@myrmidon/auth-jwt-admin 4.2.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"myrmidon-auth-jwt-admin.mjs","sources":["../../../../projects/myrmidon/auth-jwt-admin/src/lib/validators/password.validators.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/services/auth-jwt-account.service.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/state/user-list.repository.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/password-strength-bar/password-strength-bar.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/password-strength-bar/password-strength-bar.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/auth-jwt-registration/auth-jwt-registration.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/auth-jwt-registration/auth-jwt-registration.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-filter/user-filter.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-filter/user-filter.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/confirm-dialog/confirm-dialog.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/confirm-dialog/confirm-dialog.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/services/dialog.service.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-editor/user-editor.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-editor/user-editor.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-list/user-list.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-list/user-list.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/auth-jwt-admin.module.ts","../../../../projects/myrmidon/auth-jwt-admin/src/public-api.ts","../../../../projects/myrmidon/auth-jwt-admin/src/myrmidon-auth-jwt-admin.ts"],"sourcesContent":["import {\r\n AbstractControl,\r\n FormGroup,\r\n UntypedFormGroup,\r\n ValidationErrors,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\n\r\nexport class PasswordValidators {\r\n /** \"Standard\" password validator for my API services. */\r\n public static standard(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n if (!control.value) {\r\n return null;\r\n }\r\n\r\n if (control.value.length < 8) {\r\n return {\r\n passwordtooshort: true,\r\n };\r\n }\r\n\r\n if (!/.*[A-Z].*/.test(control.value)) {\r\n return {\r\n noupperinpassword: true,\r\n };\r\n }\r\n\r\n if (!/.*[a-z].*/.test(control.value)) {\r\n return {\r\n nolowerinpassword: true,\r\n };\r\n }\r\n\r\n if (!/.*[A-Z].*/.test(control.value)) {\r\n return {\r\n noupperinpassword: true,\r\n };\r\n }\r\n\r\n if (!/.*[-`~!@#$%^&*()_+=\\[\\]{};:'\",.<>/?|\\\\].*/.test(control.value)) {\r\n return {\r\n nosymbolinpassword: true,\r\n };\r\n }\r\n\r\n return null;\r\n };\r\n }\r\n\r\n public static areEqual(\r\n controlName: string,\r\n otherControlName: string\r\n ): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const g = control as FormGroup | UntypedFormGroup;\r\n const a = g.controls[controlName];\r\n const b = g.controls[otherControlName];\r\n return a.value !== b.value\r\n ? {\r\n areequal: true,\r\n }\r\n : null;\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { retry, catchError, map } from 'rxjs/operators';\r\n\r\nimport { DataPage, EnvService, ErrorService } from '@myrmidon/ng-tools';\r\nimport { User } from '@myrmidon/auth-jwt-login';\r\n\r\n/**\r\n * User registration model. You can expand this interface to add more data.\r\n */\r\nexport interface RegistrationModel {\r\n email: string;\r\n name: string;\r\n firstName?: string;\r\n lastName?: string;\r\n password: string;\r\n}\r\n\r\n/**\r\n * Result of an existing resource check.\r\n */\r\nexport interface ExistResult {\r\n entry: string;\r\n isExisting: boolean;\r\n}\r\n\r\n/**\r\n * Password change data.\r\n */\r\nexport interface PasswordChange {\r\n email: string;\r\n oldPassword: string;\r\n newPassword: string;\r\n confirmPassword: string;\r\n}\r\n\r\n/**\r\n * User filter parameters.\r\n */\r\nexport interface UserFilter {\r\n name?: string;\r\n}\r\n\r\n/**\r\n * The type of user data returned by the server.\r\n */\r\ninterface UserWithRoles<T> {\r\n user: T;\r\n roles?: string[];\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthJwtAccountService {\r\n constructor(\r\n private _http: HttpClient,\r\n private _error: ErrorService,\r\n private _env: EnvService\r\n ) {}\r\n\r\n /**\r\n * Checks if the specified email address is registered on the server.\r\n * @param email email address to test.\r\n * @returns result.\r\n */\r\n public isEmailRegistered(email: string): Observable<ExistResult> {\r\n return this._http.get<ExistResult>(\r\n this._env.get('apiUrl') +\r\n 'accounts/emailexists/' +\r\n encodeURIComponent(email)\r\n );\r\n }\r\n\r\n /**\r\n * Checks if the specified user's given name is registered on the server.\r\n * This name is a nickname chosen by users during registration, and is the key\r\n * used for referencing users when talking to the server.\r\n * @param name name to test.\r\n * @returns result.\r\n */\r\n public isNameRegistered(name: string): Observable<ExistResult> {\r\n return this._http.get<ExistResult>(\r\n this._env.get('apiUrl') +\r\n 'accounts/nameexists/' +\r\n encodeURIComponent(name)\r\n );\r\n }\r\n\r\n /**\r\n * Register the user with the specified registration data.\r\n * @param registration The registration data.\r\n * @param confirmed True to automatically confirm the user's email address\r\n * without sending the confirmation email message.\r\n */\r\n public register(\r\n registration: RegistrationModel,\r\n confirmed = false\r\n ): Observable<any> {\r\n return this._http.post(\r\n this._env.get('apiUrl') +\r\n 'accounts/register' +\r\n (confirmed ? '?confirmed=true' : ''),\r\n registration\r\n );\r\n }\r\n\r\n /**\r\n * Resend the confirmation email to the specified address.\r\n * @param email address.\r\n */\r\n public resendConfirmEmail(email: string): Observable<any> {\r\n return this._http.get(\r\n this._env.get('apiUrl') +\r\n 'accounts/resendconfirm/' +\r\n encodeURIComponent(email)\r\n // options\r\n );\r\n }\r\n\r\n /**\r\n * Request a password reset for the specified email address.\r\n * @param email Email address.\r\n */\r\n public requestPasswordReset(email: string): Observable<any> {\r\n return this._http.post(\r\n this._env.get('apiUrl') + 'accounts/resetpassword/request',\r\n { email }\r\n );\r\n }\r\n\r\n private getUserFromWrapper(response: UserWithRoles<User> | User): User {\r\n return (response as UserWithRoles<User>).user\r\n ? {\r\n ...((response as UserWithRoles<User>).user as User),\r\n roles: response.roles || [],\r\n }\r\n : (response as User);\r\n }\r\n\r\n public getAllUsers(): Observable<DataPage<User>> {\r\n return this._http\r\n .get<DataPage<UserWithRoles<User> | User>>(\r\n this._env.get('apiUrl') + 'users',\r\n {\r\n params: new HttpParams().set('pageNumber', '1'),\r\n }\r\n )\r\n .pipe(\r\n retry(3),\r\n map((dataPage: DataPage<UserWithRoles<User> | User>) => {\r\n return {\r\n ...dataPage,\r\n items: dataPage.items.map(this.getUserFromWrapper),\r\n };\r\n }),\r\n catchError(this._error.handleError)\r\n );\r\n }\r\n\r\n public getUsers(\r\n filter: UserFilter,\r\n pageNumber = 1,\r\n pageSize = 20\r\n ): Observable<DataPage<User>> {\r\n let httpParams = new HttpParams();\r\n httpParams = httpParams.set('pageNumber', pageNumber.toString());\r\n httpParams = httpParams.set('pageSize', pageSize.toString());\r\n if (filter.name) {\r\n httpParams = httpParams.set('name', filter.name);\r\n }\r\n\r\n return this._http\r\n .get<DataPage<UserWithRoles<User>>>(this._env.get('apiUrl') + 'users', {\r\n params: httpParams,\r\n })\r\n .pipe(\r\n retry(3),\r\n map((dataPage: DataPage<UserWithRoles<User>>) => {\r\n return {\r\n ...dataPage,\r\n items: dataPage.items.map(this.getUserFromWrapper),\r\n };\r\n }),\r\n catchError(this._error.handleError)\r\n );\r\n }\r\n /**\r\n * Get the top N users matching the specified name filter.\r\n * @param nameFilter The user name filter.\r\n * @param limit The maximum number of users to get.\r\n */\r\n public getTopUsers(nameFilter: string, limit = 10): Observable<User[]> {\r\n let httpParams = new HttpParams();\r\n httpParams = httpParams.set('pageNumber', '1');\r\n httpParams = httpParams.set('pageSize', limit.toString());\r\n if (nameFilter) {\r\n httpParams = httpParams.set('name', nameFilter);\r\n }\r\n const options =\r\n httpParams.keys().length > 0\r\n ? {\r\n params: httpParams,\r\n }\r\n : {};\r\n\r\n return this._http\r\n .get<UserWithRoles<User>[]>(this._env.get('apiUrl') + 'users', options)\r\n .pipe(\r\n retry(3),\r\n map((users: UserWithRoles<User>[]) => {\r\n return users.map(this.getUserFromWrapper);\r\n }),\r\n catchError(this._error.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get information about all the users listed in the specified names.\r\n * @param names User(s) names.\r\n */\r\n public getUsersFromNames(names: string[]): Observable<User[]> {\r\n let httpParams = new HttpParams();\r\n if (names && names.length > 0) {\r\n httpParams = httpParams.set('names', names.join(','));\r\n }\r\n const options =\r\n httpParams.keys().length > 0\r\n ? {\r\n params: httpParams,\r\n }\r\n : {};\r\n\r\n return this._http\r\n .get<UserWithRoles<User>[]>(\r\n this._env.get('apiUrl') + 'users-from-names',\r\n options\r\n )\r\n .pipe(\r\n retry(3),\r\n map((users: UserWithRoles<User>[]) => {\r\n return users.map(this.getUserFromWrapper);\r\n }),\r\n catchError(this._error.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get data about the specified user.\r\n * @param name The user name.\r\n */\r\n public getUser(name: string): Observable<User> {\r\n return this._http\r\n .get<UserWithRoles<User>>(this._env.get('apiUrl') + 'users/' + name)\r\n .pipe(\r\n retry(3),\r\n map(this.getUserFromWrapper),\r\n catchError(this._error.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Update the editable data for the specified user.\r\n * @param user The user to update.\r\n */\r\n public updateUser(user: User): Observable<any> {\r\n return this._http\r\n .put(\r\n this._env.get('apiUrl') +\r\n 'users' +\r\n (user.emailConfirmed ? '?confirmed=true' : ''),\r\n user\r\n )\r\n .pipe(catchError(this._error.handleError));\r\n }\r\n\r\n /**\r\n * Request a password reset email for the specified email address.\r\n * @param email The email address to receive the reset message.\r\n */\r\n public resetPassword(email: string): Observable<any> {\r\n return this._http\r\n .post(this._env.get('apiUrl') + 'accounts/resetpassword/request', {\r\n email: email,\r\n })\r\n .pipe(catchError(this._error.handleError));\r\n }\r\n\r\n /**\r\n * Change the password.\r\n * @param change The password change data.\r\n */\r\n public changePassword(change: PasswordChange): Observable<any> {\r\n return this._http\r\n .post(this._env.get('apiUrl') + 'accounts/changepassword', change)\r\n .pipe(catchError(this._error.handleError));\r\n }\r\n\r\n /**\r\n * Delete the user with the specified username.\r\n * @param name The user name.\r\n */\r\n public deleteUser(name: string): Observable<any> {\r\n return this._http\r\n .delete(this._env.get('apiUrl') + 'accounts/' + name)\r\n .pipe(catchError(this._error.handleError));\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable, take, tap } from 'rxjs';\r\n\r\nimport { User } from '@myrmidon/auth-jwt-login';\r\nimport { DataPage } from '@myrmidon/ng-tools';\r\nimport {\r\n PagedListStore,\r\n PagedListStoreService,\r\n} from '@myrmidon/paged-data-browsers';\r\n\r\nimport {\r\n AuthJwtAccountService,\r\n UserFilter,\r\n} from '../../services/auth-jwt-account.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UserListRepository\r\n implements PagedListStoreService<UserFilter, User>\r\n{\r\n private _store: PagedListStore<UserFilter, User>;\r\n private _activeUser$: BehaviorSubject<User | undefined>;\r\n private _loading$: BehaviorSubject<boolean>;\r\n private _saving$: BehaviorSubject<boolean>;\r\n\r\n public get activeUser$(): Observable<User | undefined> {\r\n return this._activeUser$.asObservable();\r\n }\r\n public get filter$(): Observable<UserFilter> {\r\n return this._store.filter$;\r\n }\r\n public get page$(): Observable<DataPage<User>> {\r\n return this._store.page$;\r\n }\r\n public get loading$(): Observable<boolean> {\r\n return this._loading$.asObservable();\r\n }\r\n public get saving$(): Observable<boolean> {\r\n return this._saving$.asObservable();\r\n }\r\n\r\n constructor(private _accService: AuthJwtAccountService) {\r\n this._store = new PagedListStore<UserFilter, User>(this);\r\n this._activeUser$ = new BehaviorSubject<User | undefined>(undefined);\r\n this._loading$ = new BehaviorSubject<boolean>(false);\r\n this._saving$ = new BehaviorSubject<boolean>(false);\r\n this._store.reset();\r\n }\r\n\r\n public loadPage(\r\n pageNumber: number,\r\n pageSize: number,\r\n filter: UserFilter\r\n ): Observable<DataPage<User>> {\r\n this._loading$.next(true);\r\n return this._accService.getUsers(filter, pageNumber, pageSize).pipe(\r\n tap({\r\n next: () => this._loading$.next(false),\r\n error: () => this._loading$.next(false),\r\n })\r\n );\r\n }\r\n\r\n public async reset(): Promise<void> {\r\n this._loading$.next(true);\r\n try {\r\n await this._store.reset();\r\n } catch (error) {\r\n throw error;\r\n } finally {\r\n this._loading$.next(false);\r\n }\r\n }\r\n\r\n public async setFilter(filter: UserFilter): Promise<void> {\r\n this._loading$.next(true);\r\n try {\r\n await this._store.setFilter(filter);\r\n } catch (error) {\r\n throw error;\r\n } finally {\r\n this._loading$.next(false);\r\n }\r\n }\r\n\r\n public getFilter(): UserFilter {\r\n return this._store.getFilter();\r\n }\r\n\r\n public async setPage(pageNumber: number, pageSize: number): Promise<void> {\r\n this._loading$.next(true);\r\n try {\r\n await this._store.setPage(pageNumber, pageSize);\r\n } catch (error) {\r\n throw error;\r\n } finally {\r\n this._loading$.next(false);\r\n }\r\n }\r\n\r\n public setActiveUser(user: User | null): void {\r\n this._activeUser$.next(user || undefined);\r\n }\r\n\r\n public updateActiveUser(user: User): Promise<boolean> {\r\n const promise: Promise<boolean> = new Promise((resolve, reject) => {\r\n this._saving$.next(true);\r\n\r\n this._accService.updateUser(user).subscribe({\r\n next: (_) => {\r\n this._saving$.next(false);\r\n this._store.reset();\r\n resolve(true);\r\n },\r\n error: (error) => {\r\n this._saving$.next(false);\r\n console.error(\r\n `Error updating user ${user.userName}: ` +\r\n JSON.stringify(error || {})\r\n );\r\n resolve(false);\r\n },\r\n });\r\n });\r\n return promise;\r\n }\r\n\r\n public deleteUser(name: string): Promise<boolean> {\r\n const promise: Promise<boolean> = new Promise((resolve, reject) => {\r\n if (this._activeUser$.value?.userName === name) {\r\n this._activeUser$.next(undefined);\r\n }\r\n\r\n this._saving$.next(true);\r\n\r\n this._accService.deleteUser(name).subscribe({\r\n next: (_) => {\r\n this._saving$.next(false);\r\n this._store.reset();\r\n resolve(true);\r\n },\r\n error: (error) => {\r\n this._saving$.next(false);\r\n console.error(\r\n `Error deleting user ${name}: ` + JSON.stringify(error || {})\r\n );\r\n reject(error);\r\n },\r\n });\r\n });\r\n return promise;\r\n }\r\n}\r\n","import {\r\n Component,\r\n OnChanges,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n SimpleChange,\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'auth-jwt-password-strength-bar',\r\n templateUrl: './password-strength-bar.component.html',\r\n styleUrls: ['./password-strength-bar.component.css'],\r\n})\r\nexport class PasswordStrengthBarComponent implements OnChanges {\r\n private _colors = ['#F00', '#F90', '#FF0', '#9F0', '#0F0'];\r\n\r\n @Input() passwordToCheck: string | undefined;\r\n\r\n @Output() strengthChange = new EventEmitter<number>();\r\n\r\n public bars: string[];\r\n\r\n constructor() {\r\n this.strengthChange = new EventEmitter<number>();\r\n this.bars = [];\r\n }\r\n\r\n private measureStrength(p: string): number {\r\n let force = 0;\r\n const regex = /[$-/:-?{-~!\"^_`\\[\\]]/g; // \"\r\n\r\n const lowerLetters = /[a-z]+/.test(p);\r\n const upperLetters = /[A-Z]+/.test(p);\r\n const numbers = /[0-9]+/.test(p);\r\n const symbols = regex.test(p);\r\n\r\n const flags = [lowerLetters, upperLetters, numbers, symbols];\r\n\r\n let passedMatches = 0;\r\n for (const flag of flags) {\r\n passedMatches += flag === true ? 1 : 0;\r\n }\r\n\r\n force += 2 * p.length + (p.length >= 10 ? 1 : 0);\r\n force += passedMatches * 10;\r\n\r\n // penalty (short password)\r\n force = p.length <= 6 ? Math.min(force, 10) : force;\r\n\r\n // penalty (poor letiety of characters)\r\n force = passedMatches === 1 ? Math.min(force, 10) : force;\r\n force = passedMatches === 2 ? Math.min(force, 20) : force;\r\n force = passedMatches === 3 ? Math.min(force, 40) : force;\r\n\r\n return force;\r\n }\r\n\r\n private getColor(s: number) {\r\n let idx = 0;\r\n if (s <= 10) {\r\n idx = 0;\r\n } else if (s <= 20) {\r\n idx = 1;\r\n } else if (s <= 30) {\r\n idx = 2;\r\n } else if (s <= 40) {\r\n idx = 3;\r\n } else {\r\n idx = 4;\r\n }\r\n return {\r\n idx: idx + 1,\r\n col: this._colors[idx],\r\n };\r\n }\r\n\r\n ngOnChanges(changes: { [propName: string]: SimpleChange }): void {\r\n const password = changes['passwordToCheck'].currentValue;\r\n this.setBarColors(5, '#DDD');\r\n if (password) {\r\n const strength = this.measureStrength(password);\r\n const c = this.getColor(strength);\r\n this.setBarColors(c.idx, c.col);\r\n this.strengthChange.emit(strength);\r\n }\r\n }\r\n\r\n private setBarColors(count: number, col: string) {\r\n for (let n = 0; n < count; n++) {\r\n this.bars[n] = col;\r\n }\r\n }\r\n}\r\n","<div id=\"strength\">\r\n <small>strength:</small>\r\n <ul id=\"strengthBar\">\r\n <li class=\"point\" [style.background-color]=\"bars[0]\"></li>\r\n <li class=\"point\" [style.background-color]=\"bars[1]\"></li>\r\n <li class=\"point\" [style.background-color]=\"bars[2]\"></li>\r\n <li class=\"point\" [style.background-color]=\"bars[3]\"></li>\r\n <li class=\"point\" [style.background-color]=\"bars[4]\"></li>\r\n </ul>\r\n</div>\r\n","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\r\nimport {\r\n Validators,\r\n AbstractControl,\r\n ValidationErrors,\r\n FormGroup,\r\n FormControl,\r\n FormBuilder,\r\n} from '@angular/forms';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Observable } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport {\r\n AuthJwtAccountService,\r\n ExistResult,\r\n RegistrationModel,\r\n} from '../../services/auth-jwt-account.service';\r\nimport { PasswordValidators } from '../../validators/password.validators';\r\nimport { UserListRepository } from '../state/user-list.repository';\r\n\r\n@Component({\r\n selector: 'auth-jwt-registration',\r\n templateUrl: './auth-jwt-registration.component.html',\r\n styleUrls: ['./auth-jwt-registration.component.css'],\r\n})\r\nexport class AuthJwtRegistrationComponent {\r\n public busy: boolean | undefined;\r\n // form\r\n public form: FormGroup;\r\n public email: FormControl<string>;\r\n public name: FormControl<string>;\r\n public firstName: FormControl<string>;\r\n public lastName: FormControl<string>;\r\n public password: FormControl<string>;\r\n public confirmPassword: FormControl<string>;\r\n\r\n /**\r\n * Emitted when a user was successfully registered. Usually\r\n * you should handle this to move away from the registration\r\n * page.\r\n */\r\n @Output()\r\n public registered: EventEmitter<any>;\r\n\r\n public hide = true;\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n private _snackbar: MatSnackBar,\r\n private _accountService: AuthJwtAccountService,\r\n private _userRepository: UserListRepository\r\n ) {\r\n this.registered = new EventEmitter<any>();\r\n // form\r\n this.email = formBuilder.control('', {\r\n validators: [Validators.required, Validators.email],\r\n asyncValidators: this.getUniqueEmailValidator(this._accountService).bind(\r\n this\r\n ),\r\n nonNullable: true,\r\n });\r\n\r\n this.name = formBuilder.control('', {\r\n validators: Validators.required,\r\n asyncValidators: this.getUniqueNameValidator(this._accountService).bind(\r\n this\r\n ),\r\n nonNullable: true,\r\n });\r\n\r\n this.firstName = formBuilder.control('', {\r\n validators: [Validators.required, Validators.maxLength(50)],\r\n nonNullable: true,\r\n });\r\n this.lastName = formBuilder.control('', {\r\n validators: [Validators.required, Validators.maxLength(50)],\r\n nonNullable: true,\r\n });\r\n\r\n // http://stackoverflow.com/questions/35474991/angular-2-form-validating-for-repeat-password\r\n this.password = formBuilder.control('', {\r\n validators: [Validators.required, PasswordValidators.standard()],\r\n nonNullable: true,\r\n });\r\n this.confirmPassword = formBuilder.control('', {\r\n validators: Validators.required,\r\n nonNullable: true,\r\n });\r\n\r\n this.form = formBuilder.group(\r\n {\r\n email: this.email,\r\n name: this.name,\r\n firstName: this.firstName,\r\n lastName: this.lastName,\r\n password: this.password,\r\n confirmPassword: this.confirmPassword,\r\n },\r\n {\r\n validators: [\r\n PasswordValidators.areEqual('password', 'confirmPassword'),\r\n ],\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Creates a unique name validator. There is no dependency injection at this level,\r\n * but we can use closures. As a matter of fact, we have access to the service instance\r\n * from the component where we register validators. So we will implement a function\r\n * that will accept the service as parameter, and create the actual validation function.\r\n * This function will have access to the service when called during the validation process.\r\n * See http://restlet.com/blog/2016/02/17/implementing-angular2-forms-beyond-basics-part-2/.\r\n */\r\n private getUniqueNameValidator(service: AuthJwtAccountService) {\r\n return (\r\n control: AbstractControl\r\n ):\r\n | Promise<ValidationErrors | null>\r\n | Observable<ValidationErrors | null> => {\r\n return new Promise((resolve, reject) => {\r\n // avoid checking if empty\r\n if (!control.value) {\r\n resolve(null);\r\n } else {\r\n service.isNameRegistered(control.value).subscribe({\r\n next: (data: ExistResult) => {\r\n if (!data.isExisting) {\r\n resolve(null);\r\n } else {\r\n resolve({ uniqueName: true });\r\n }\r\n },\r\n error: (error) => {\r\n console.error(\r\n 'Unique name validator error' +\r\n (error ? JSON.stringify(error) : '')\r\n );\r\n resolve({ uniqueName: true });\r\n },\r\n });\r\n }\r\n });\r\n };\r\n }\r\n\r\n private getUniqueEmailValidator(service: AuthJwtAccountService) {\r\n return (\r\n control: AbstractControl\r\n ):\r\n | Promise<ValidationErrors | null>\r\n | Observable<ValidationErrors | null> => {\r\n return new Promise((resolve, reject) => {\r\n // avoid checking if empty\r\n if (!control.value) {\r\n resolve(null);\r\n } else {\r\n service.isEmailRegistered(control.value).subscribe({\r\n next: (data: ExistResult) => {\r\n if (!data.isExisting) {\r\n resolve(null);\r\n } else {\r\n resolve({ uniqueEmail: true });\r\n }\r\n },\r\n error: (error) => {\r\n console.error(\r\n 'Unique email validator error' +\r\n (error ? JSON.stringify(error) : '')\r\n );\r\n resolve({ uniqueEmail: true });\r\n },\r\n });\r\n }\r\n });\r\n };\r\n }\r\n\r\n public onSubmit(): void {\r\n if (\r\n !this.form.valid ||\r\n this.busy ||\r\n this.name.pending ||\r\n this.email.pending\r\n ) {\r\n return;\r\n }\r\n\r\n const model: RegistrationModel = {\r\n email: this.email.value,\r\n name: this.name.value,\r\n firstName: this.firstName.value,\r\n lastName: this.lastName.value,\r\n password: this.password.value,\r\n };\r\n\r\n this.busy = true;\r\n this._accountService\r\n .register(model)\r\n .pipe(take(1))\r\n .subscribe({\r\n next: () => {\r\n this.busy = false;\r\n this._snackbar.open(\r\n $localize`:auth-jwt-admin:Registration succeeded`,\r\n 'OK'\r\n );\r\n this._userRepository.reset();\r\n this.registered.emit();\r\n },\r\n error: (error) => {\r\n this.busy = false;\r\n console.error(\r\n 'Registration error' + (error ? JSON.stringify(error) : '')\r\n );\r\n this._snackbar.open(\r\n $localize`:auth-jwt-admin:Registration error`,\r\n 'OK'\r\n );\r\n },\r\n });\r\n }\r\n}\r\n","<div>\n <form role=\"form\" [formGroup]=\"form\" (submit)=\"onSubmit()\">\n <fieldset>\n <legend i18n=\"auth-jwt-admin\">registration</legend>\n <!-- email -->\n <div class=\"form-row\">\n <mat-form-field>\n <mat-label i18n>email</mat-label>\n <input\n matInput\n type=\"email\"\n id=\"email\"\n maxlength=\"256\"\n required\n autofocus\n spellcheck=\"false\"\n [formControl]=\"email\"\n />\n @if (\n $any(email).errors?.required && (email.dirty || email.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >email required</mat-error\n >\n }\n @if ($any(email).errors?.email && (email.dirty || email.touched)) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >invalid email</mat-error\n >\n }\n @if (\n $any(email).errors?.uniqueEmail && (email.dirty || email.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >email already registered</mat-error\n >\n }\n </mat-form-field>\n @if (email.pending) {\n <mat-icon>hourglass</mat-icon>\n }\n </div>\n\n <!-- name -->\n <div class=\"form-row\">\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">username</mat-label>\n <input\n matInput\n type=\"text\"\n id=\"name\"\n maxlength=\"50\"\n required\n pattern=\"^[a-zA-Z][a-zA-Z0-9]{2,49}$\"\n spellcheck=\"false\"\n [formControl]=\"name\"\n />\n @if ($any(name).errors?.required && (name.dirty || name.touched)) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >username required</mat-error\n >\n }\n @if ($any(name).errors?.pattern && (name.dirty || name.touched)) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >invalid username</mat-error\n >\n }\n @if (\n $any(name).errors?.uniqueName && (name.dirty || name.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >username already registered</mat-error\n >\n }\n </mat-form-field>\n @if (name.pending) {\n <mat-icon>hourglass</mat-icon>\n }\n </div>\n\n <!-- first name -->\n <div>\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">first name</mat-label>\n <input\n matInput\n type=\"text\"\n id=\"firstName\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n [formControl]=\"firstName\"\n />\n @if (\n firstName.hasError('required') &&\n (firstName.dirty || firstName.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n class=\"text-danger small\"\n >\n first name required\r\n </mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- last name -->\n <div>\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">last name</mat-label>\n <input\n matInput\n type=\"text\"\n id=\"lastName\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n [formControl]=\"lastName\"\n />\n @if (\n lastName.hasError('required') &&\n (lastName.dirty || lastName.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n class=\"text-danger small\"\n >\n last name required\r\n </mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- <div [formGroup]=\"passwords\"> -->\n <!-- password -->\n <div>\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">password</mat-label>\n <input\n matInput\n [type]=\"hide ? 'password' : 'text'\"\n name=\"password\"\n autocomplete=\"new-password\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n [formControl]=\"password\"\n />\n <button\n type=\"button\"\n mat-icon-button\n matSuffix\n (click)=\"hide = !hide\"\n i18n-aria-label=\"auth-jwt-login\"\n aria-label=\"Hide password\"\n [attr.aria-pressed]=\"hide\"\n >\n <mat-icon>{{ hide ? \"visibility_off\" : \"visibility\" }}</mat-icon>\n </button>\n <auth-jwt-password-strength-bar [passwordToCheck]=\"password.value\">\n </auth-jwt-password-strength-bar>\n @if (\n $any(password).errors?.required &&\n (password.dirty || password.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >password required</mat-error\n >\n }\n @if (\n $any(password).errors?.passwordtooshort &&\n (password.dirty || password.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >at least 8 characters</mat-error\n >\n }\n @if (\n $any(password).errors?.noupperinpassword &&\n (password.dirty || password.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >at least 1 uppercase letter</mat-error\n >\n }\n @if (\n $any(password).errors?.nolowerinpassword &&\n (password.dirty || password.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >at least 1 lowercase letter</mat-error\n >\n }\n @if (\n $any(password).errors?.nosymbolinpassword &&\n (password.dirty || password.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >at least 1 punctuation/symbol</mat-error\n >\n }\n </mat-form-field>\n </div>\n\n <!-- confirm password -->\n <div>\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">confirm password</mat-label>\n <input\n matInput\n [type]=\"hide ? 'password' : 'text'\"\n name=\"confirmPassword\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n [formControl]=\"confirmPassword\"\n />\n </mat-form-field>\n </div>\n @if (form.errors?.areequal && confirmPassword.touched) {\n <div\n i18n=\"auth-jwt-admin\"\n style=\"color: red\"\n >\n password differs from confirmation password\r\n </div>\n }\n\n <button\n i18n=\"auth-jwt-admin\"\n mat-raised-button\n type=\"submit\"\n color=\"primary\"\n [disabled]=\"\r\n form.invalid || form.pristine || busy || name.pending || email.pending\r\n \"\r\n >\n register\r\n </button>\r\n @if (busy) {\n <mat-progress-spinner diameter=\"20\"></mat-progress-spinner>\n }\n </fieldset>\n </form>\n\n <details>\n <summary i18n=\"auth-jwt-admin\">Hints</summary>\n <div class=\"info\">\n <p i18n=\"auth-jwt-admin\">\n To register a new user, you must provide his email address, choose a\r\n password, and choose a username, which must be unique (you will be\r\n notified if another user has already taken that name). The username must\r\n include only letters/digits, start with a letter, and be no shorter than\r\n 3 characters, nor longer than 50.\r\n </p>\r\n <p i18n=\"auth-jwt-admin\">\n To promote a decent security level, the password must include at least 8\r\n characters, uppercase and lowercase letters, digits, and punctuation\r\n (like dashes, stops, parentheses, etc.).\r\n </p>\r\n <p i18n=\"auth-jwt-admin\">\n Once registered, if messaging is enabled on the server side the user\r\n will receive an email message to the email address you specified; he\r\n will have to click on the provided link to complete the registration\r\n process. Otherwise, you should edit the newly created user and confirm\r\n the email registration.\r\n </p>\r\n </div>\n </details>\n </div>\n","import { Component, Input, Output, OnInit, EventEmitter } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { UserFilter } from '../../services/auth-jwt-account.service';\r\n\r\n@Component({\r\n selector: 'auth-jwt-user-filter',\r\n templateUrl: './user-filter.component.html',\r\n styleUrls: ['./user-filter.component.css'],\r\n})\r\nexport class UserFilterComponent {\r\n private _filter?: UserFilter;\r\n\r\n @Input()\r\n public get filter(): UserFilter | null | undefined {\r\n return this._filter;\r\n }\r\n public set filter(value: UserFilter | null | undefined) {\r\n if (this._filter === value) {\r\n return;\r\n }\r\n this._filter = value || undefined;\r\n this.updateForm(this._filter);\r\n }\r\n\r\n @Input()\r\n public disabled: boolean | undefined;\r\n\r\n /**\r\n * Event emitted when the filter changes.\r\n */\r\n @Output()\r\n public filterChange: EventEmitter<UserFilter>;\r\n\r\n public name: FormControl<string | null>;\r\n public form: FormGroup;\r\n\r\n constructor(formBuilder: FormBuilder) {\r\n // form\r\n this.name = formBuilder.control<string | null>(null);\r\n this.form = formBuilder.group({\r\n name: this.name,\r\n });\r\n // event\r\n this.filterChange = new EventEmitter<UserFilter>();\r\n }\r\n\r\n private updateForm(filter?: UserFilter): void {\r\n if (!filter) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.name.setValue(filter.name || null);\r\n this.form.markAsPristine();\r\n }\r\n\r\n private getFilter(): UserFilter {\r\n return {\r\n name: this.name.value?.trim(),\r\n };\r\n }\r\n\r\n public reset(): void {\r\n this.form.reset();\r\n this._filter = {};\r\n this.filterChange.emit(this._filter);\r\n }\r\n\r\n public apply(): void {\r\n this._filter = this.getFilter();\r\n this.filterChange.emit(this._filter);\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"apply()\" ng-disabled=\"disabled\">\r\n <div class=\"form-row\">\r\n <mat-form-field>\r\n <mat-label i18n=\"auth-jwt-admin\">name or ID</mat-label>\r\n <input matInput [formControl]=\"name\" />\r\n <button\r\n mat-icon-button\r\n matSuffix\r\n type=\"button\"\r\n (click)=\"reset()\"\r\n color=\"warn\"\r\n i18n-matTooltip=\"auth-jwt-admin\"\r\n matTooltip=\"Reset filters\"\r\n [disabled]=\"disabled\"\r\n >\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <button\r\n id=\"apply\"\r\n type=\"submit\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [disabled]=\"disabled\"\r\n i18n-matTooltip=\"auth-jwt-admin\"\r\n matTooltip=\"Apply filters\"\r\n >\r\n <mat-icon>check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n","import { Component, OnInit, Inject, Optional } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n// https://medium.com/@tarik.nzl/making-use-of-dialogs-in-material-2-mddialog-7533d27df41\r\n\r\n@Component({\r\n // https://github.com/angular/components/issues/7718\r\n // selector: 'cadmus-confirm-dialog',\r\n templateUrl: './confirm-dialog.component.html',\r\n styleUrls: ['./confirm-dialog.component.css'],\r\n})\r\nexport class ConfirmDialogComponent implements OnInit {\r\n public title: string;\r\n public prompt: string;\r\n public ok: string;\r\n public cancel: string;\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<ConfirmDialogComponent>,\r\n @Optional() @Inject(MAT_DIALOG_DATA) public data: any\r\n ) {\r\n this.title = $localize`:auth-jwt-admin:Confirm`;\r\n this.prompt = $localize`:auth-jwt-admin:Confirm operation?`;\r\n this.ok = $localize`:auth-jwt-admin:yes`;\r\n this.cancel = $localize`:auth-jwt-admin:no`;\r\n }\r\n\r\n ngOnInit() {}\r\n}\r\n","<h1 mat-dialog-title>{{ title }}</h1>\r\n<mat-dialog-content>\r\n {{ prompt }}\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <button\r\n type=\"button\"\r\n mat-raised-button\r\n color=\"warn\"\r\n (click)=\"dialogRef.close(true)\"\r\n >\r\n {{ ok }}\r\n </button>\r\n <button type=\"button\" mat-button (click)=\"dialogRef.close()\">\r\n {{ cancel }}\r\n </button>\r\n</mat-dialog-actions>\r\n","import { Injectable } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { ConfirmDialogComponent } from '../components/confirm-dialog/confirm-dialog.component';\r\nimport { Observable } from 'rxjs';\r\n\r\n// https://medium.com/@tarik.nzl/making-use-of-dialogs-in-material-2-mddialog-7533d27df41\r\n\r\n/**\r\n * This service acts as a wrapper for MatDialog to simplify the process of calling\r\n * the dialog and subscribing to it. What it will do is create an Instance of\r\n * MatDialog with our custom component (ConfirmDialogComponent). Then it will set\r\n * any public properties it needs to by setting the properties on the\r\n * componentInstance object. It will return the observable afterClosed()\r\n * to the caller so they can subscribe to it. This will emit an event whenever\r\n * the dialog is closed.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DialogService {\r\n constructor(private dialog: MatDialog) {}\r\n\r\n public confirm(\r\n title: string,\r\n prompt: string,\r\n ok = $localize`:auth-jwt-admin:yes`,\r\n cancel = $localize`:auth-jwt-admin:no`\r\n ): Observable<boolean> {\r\n let dialogRef: MatDialogRef<ConfirmDialogComponent>;\r\n\r\n dialogRef = this.dialog.open(ConfirmDialogComponent);\r\n dialogRef.componentInstance.title = title;\r\n dialogRef.componentInstance.prompt = prompt;\r\n dialogRef.componentInstance.ok = ok;\r\n dialogRef.componentInstance.cancel = cancel;\r\n\r\n return dialogRef.afterClosed();\r\n }\r\n}\r\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\r\nimport {\r\n UntypedFormGroup,\r\n UntypedFormControl,\r\n UntypedFormBuilder,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { AuthJwtService, User } from '@myrmidon/auth-jwt-login';\r\n\r\n@Component({\r\n selector: 'auth-jwt-user-editor',\r\n templateUrl: './user-editor.component.html',\r\n styleUrls: ['./user-editor.component.css'],\r\n})\r\nexport class UserEditorComponent implements OnInit {\r\n private _user: User | undefined;\r\n\r\n public email: UntypedFormControl;\r\n public emailConfirmed: UntypedFormControl;\r\n public lockoutEnabled: UntypedFormControl;\r\n public firstName: UntypedFormControl;\r\n public lastName: UntypedFormControl;\r\n public roles: UntypedFormControl;\r\n public form: UntypedFormGroup;\r\n\r\n public unlocked: boolean | undefined;\r\n\r\n @Input() public set user(value: User | undefined) {\r\n this._user = value;\r\n this.updateForm(value);\r\n }\r\n public get user(): User | undefined {\r\n return this._user;\r\n }\r\n\r\n @Output() userChange: EventEmitter<User>;\r\n @Output() editorClose: EventEmitter<any>;\r\n\r\n constructor(formBuilder: UntypedFormBuilder, private _authService: AuthJwtService) {\r\n // events\r\n this.userChange = new EventEmitter<User>();\r\n this.editorClose = new EventEmitter<any>();\r\n // form\r\n this.email = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.email,\r\n ]);\r\n this.emailConfirmed = formBuilder.control(false);\r\n this.lockoutEnabled = formBuilder.control(false);\r\n this.firstName = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(50),\r\n ]);\r\n this.lastName = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(50),\r\n ]);\r\n this.roles = formBuilder.control(null, Validators.maxLength(200));\r\n\r\n this.form = formBuilder.group({\r\n email: this.email,\r\n emailConfirmed: this.emailConfirmed,\r\n lockoutEnabled: this.lockoutEnabled,\r\n firstName: this.firstName,\r\n lastName: this.lastName,\r\n roles: this.roles,\r\n });\r\n }\r\n\r\n ngOnInit(): void {}\r\n\r\n private updateForm(user: User | undefined): void {\r\n if (!user) {\r\n this.form.reset();\r\n } else {\r\n this.email.setValue(user.email);\r\n this.emailConfirmed.setValue(user.emailConfirmed);\r\n this.lockoutEnabled.setValue(user.lockoutEnabled);\r\n this.firstName.setValue(user.firstName);\r\n this.lastName.setValue(user.lastName);\r\n if (user.roles?.length > 0) {\r\n this.roles.setValue(user.roles.join(' '));\r\n } else {\r\n this.roles.setValue(null);\r\n }\r\n }\r\n }\r\n\r\n private getUserFromForm(): User {\r\n return {\r\n userName: this._user?.userName || '',\r\n email: this.email.value,\r\n emailConfirmed: this.emailConfirmed.value,\r\n lockoutEnabled: this.lockoutEnabled.value,\r\n firstName: this.firstName.value,\r\n lastName: this.lastName.value,\r\n roles: this.roles.value\r\n ? this.roles.value.split(' ').filter((s: string) => s)\r\n : [],\r\n };\r\n }\r\n\r\n public endLockout(): void {\r\n if (this.unlocked) {\r\n return;\r\n }\r\n this._user!.lockoutEnd = this._authService.getUTCDate();\r\n this.unlocked = true;\r\n }\r\n\r\n public close(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this.userChange.emit(this.getUserFromForm());\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <div class=\"form-row\">\n <!-- email -->\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">email</mat-label>\n <input type=\"text\" matInput [formControl]=\"email\" />\n @if (email.hasError('required') && (email.dirty || email.touched)) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >\n email address required\r\n </mat-error>\n }\n @if (email.hasError('pattern') && (email.dirty || email.touched)) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >\n invalid email address\r\n </mat-error>\n }\n </mat-form-field>\n\n <!-- emailConfirmed -->\n <mat-checkbox [formControl]=\"emailConfirmed\" i18n=\"auth-jwt-admin\"\n >email address confirmed</mat-checkbox\n >\n </div>\n\n <!-- lockoutEnabled -->\n <div class=\"form-row\">\n <mat-checkbox [formControl]=\"lockoutEnabled\" i18n=\"auth-jwt-admin\"\n >lockout enabled</mat-checkbox\n >\n <button\n mat-icon-button\n color=\"primary\"\n (click)=\"endLockout()\"\n [disabled]=\"unlocked\"\n i18n-matTooltip=\"auth-jwt-admin\"\n matTooltip=\"Unlock this user if locked\"\n >\n <mat-icon>lock_open</mat-icon>\n </button>\n </div>\n\n <div class=\"form-row\">\n <!-- firstName -->\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">first name</mat-label>\n <input type=\"text\" matInput [formControl]=\"firstName\" />\n @if (\n firstName.hasError('required') &&\n (firstName.dirty || firstName.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >\n first name required\r\n </mat-error>\n }\n @if (\n firstName.hasError('maxlength') &&\n (firstName.dirty || firstName.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >\n first name too long\r\n </mat-error>\n }\n </mat-form-field>\n\n <!-- lastName -->\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">last name</mat-label>\n <input type=\"text\" matInput [formControl]=\"lastName\" />\n @if (\n lastName.hasError('required') && (lastName.dirty || lastName.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >\n last name required\r\n </mat-error>\n }\n @if (\n lastName.hasError('maxlength') && (lastName.dirty || lastName.touched)\n ) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >\n last name too long\r\n </mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- roles -->\n <div>\n <mat-form-field style=\"width: 16em\">\n <mat-label i18n=\"auth-jwt-admin\">roles</mat-label>\n <input type=\"text\" matInput [formControl]=\"roles\" />\n @if (roles.hasError('maxlength') && (roles.dirty || roles.touched)) {\n <mat-error\n i18n=\"auth-jwt-admin\"\n >\n too long\r\n </mat-error>\n }\n <mat-hint i18n>roles (separated by space)</mat-hint>\n </mat-form-field>\n </div>\n\n <!-- buttons -->\n <br />\n <div>\n <button\n type=\"button\"\n mat-icon-button\n color=\"warn\"\n i18n-matTooltip=\"auth-jwt-admin\"\n matTooltip=\"Close\"\n (click)=\"close()\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n <button\n type=\"submit\"\n mat-icon-button\n color=\"primary\"\n [disabled]=\"form.invalid\"\n i18n-matTooltip=\"auth-jwt-admin\"\n matTooltip=\"Save user\"\n >\n <mat-icon>check_circle</mat-icon>\n </button>\n </div>\n </form>\n","import { Component } from '@angular/core';\r\nimport { PageEvent } from '@angular/material/paginator';\r\nimport { Observable } from 'rxjs';\r\nimport '@angular/localize/init';\r\n\r\nimport { GravatarService, User } from '@myrmidon/auth-jwt-login';\r\nimport { DataPage } from '@myrmidon/ng-tools';\r\n\r\nimport { DialogService } from '../../services/dialog.service';\r\nimport { UserListRepository } from '../state/user-list.repository';\r\nimport { UserFilter } from '../../services/auth-jwt-account.service';\r\n\r\n@Component({\r\n selector: 'auth-jwt-user-list',\r\n templateUrl: './user-list.component.html',\r\n styleUrls: ['./user-list.component.css'],\r\n})\r\nexport class UserListComponent {\r\n public active$: Observable<User | undefined>;\r\n public loading$: Observable<boolean>;\r\n public filter$: Observable<UserFilter>;\r\n public page$: Observable<DataPage<User>>;\r\n\r\n constructor(\r\n private _repository: UserListRepository,\r\n private _dialogService: DialogService,\r\n private _gravatarService: GravatarService\r\n ) {\r\n this.filter$ = _repository.filter$;\r\n this.page$ = _repository.page$;\r\n this.active$ = _repository.activeUser$;\r\n this.loading$ = _repository.loading$;\r\n }\r\n\r\n public reset(): void {\r\n this._repository.reset();\r\n }\r\n\r\n public onFilterChange(filter: UserFilter): void {\r\n this._repository.setFilter(filter);\r\n }\r\n\r\n public onPageChange(event: PageEvent): void {\r\n this._repository.setPage(event.pageIndex + 1, event.pageSize);\r\n }\r\n\r\n public deleteUser(user: User): void {\r\n this._dialogService\r\n .confirm(\r\n $localize`:auth-jwt-admin:Confirm`,\r\n $localize`:auth-jwt-admin:Delete user` + user.userName + '?'\r\n )\r\n .subscribe((yes) => {\r\n if (yes) {\r\n this._repository.deleteUser(user.userName);\r\n }\r\n });\r\n }\r\n\r\n public setActiveUser(user: User | null): void {\r\n this._repository.setActiveUser(user);\r\n }\r\n\r\n public resetActiveUser(): void {\r\n this._repository.setActiveUser(null);\r\n }\r\n\r\n public saveActiveUser(user: User): void {\r\n this._repository.updateActiveUser(user);\r\n this._repository.setActiveUser(null);\r\n }\r\n\r\n public onUserEditorClose(): void {\r\n this._repository.setActiveUser(null);\r\n }\r\n\r\n public getGravatarUrl(email: string, size = 80): string | null {\r\n return this._gravatarService.buildGravatarUrl(email, size);\r\n }\r\n}\r\n","<div id=\"container\">\n <div>\n <!-- filters -->\n <div id=\"filters\">\n <auth-jwt-user-filter\n [filter]=\"filter$ | async\"\n (filterChange)=\"onFilterChange($event)\"\n ></auth-jwt-user-filter>\n </div>\n\n <!-- list -->\n @if (page$ | async; as page) {\n <div id=\"list\">\n @if (loading$ | async) {\n <div>\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n </div>\n }\n <table>\n <thead>\n <td></td>\n <td></td>\n <th i18n=\"auth-jwt-admin\">name</th>\n <th i18n=\"auth-jwt-admin\" class=\"noif-lt-md\">first</th>\n <th i18n=\"auth-jwt-admin\" class=\"noif-lt-md\">last</th>\n <th i18n=\"auth-jwt-admin\" class=\"noif-lt-md\">email</th>\n <th i18n=\"auth-jwt-admin\">roles</th>\n <th i18n=\"auth-jwt-admin\" class=\"noif-lt-md\">lock end</th>\n </thead>\n <tbody>\n @for (user of page.items; track user) {\n <tr>\n <td class=\"fit-width\">\n <button\n mat-icon-button\n type=\"button\"\n i18n-matTooltip=\"auth-jwt-admin\"\n matTooltip=\"Edit this user\"\n color=\"primary\"\n (click)=\"setActiveUser(user)\"\n >\n <mat-icon>mode_edit</mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n i18n-matTooltip=\"auth-jwt-admin\"\n matTooltip=\"Delete this user\"\n color=\"warn\"\n (click)=\"deleteUser(user)\"\n >\n <mat-icon>remove_circle</mat-icon>\n </button>\n </td>\n <td class=\"fit-width\">\n <img\n alt=\"avatar\"\n [src]=\"getGravatarUrl(user.email, 32)\"\n [alt]=\"user.userName\"\n />\n </td>\n <td>{{ user.userName }}</td>\n <td class=\"noif-lt-md\">{{ user.firstName }}</td>\n <td class=\"noif-lt-md\">{{ user.lastName }}</td>\n <td class=\"noif-lt-md\">\n <a [href]=\"'mailto:' + user.email\">{{ user.email }}</a>\n </td>\n <td>{{ user.roles.join(\" \") }}</td>\n <td class=\"noif-lt-md\">{{ user.lockoutEnd }}</td>\n </tr>\n }\n </tbody>\n </table>\n <!-- paginator -->\n <div class=\"form-row\">\n <button\n type=\"button\"\n mat-icon-button\n color=\"warn\"\n i18n-matmatTooltip=\"auth-jwt-admin\"\n matTooltip=\"Refresh list\"\n (click)=\"reset()\"\n >\n <mat-icon>autorenew</mat-icon>\n </button>\n <mat-paginator\n [length]=\"page.total\"\n [pageIndex]=\"page.pageNumber - 1\"\n [pageSize]=\"page.pageSize\"\n [pageSizeOptions]=\"[5, 10, 20, 50, 100]\"\n (page)=\"onPageChange($event)\"\n [showFirstLastButtons]=\"true\"\n ></mat-paginator>\n </div>\n </div>\n }\n </div>\n\n <!-- editor -->\n <mat-expansion-panel\n id=\"editor\"\n [expanded]=\"active$ | async\"\n [disabled]=\"!(active$ | async)\"\n >\n @if (active$ | async; as active) {\n <div>\n <fieldset>\n <legend>{{ active.userName }}</legend>\n <auth-jwt-user-editor\n [user]=\"active\"\n (userChange)=\"saveActiveUser($event)\"\n (editorClose)=\"resetActiveUser()\"\n ></auth-jwt-user-editor>\n </fieldset>\n </div>\n }\n </mat-expansion-panel>\n </div>\n","import { CommonModule } from '@angular/common';\r\nimport { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\r\nimport { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport {MatExpansionModule} from '@angular/material/expansion';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\n\r\nimport { AuthJwtLoginModule } from '@myrmidon/auth-jwt-login';\r\nimport { NgToolsModule } from '@myrmidon/ng-tools';\r\n\r\nimport { AuthJwtRegistrationComponent } from './components/auth-jwt-registration/auth-jwt-registration.component';\r\nimport { PasswordStrengthBarComponent } from './components/password-strength-bar/password-strength-bar.component';\r\nimport { UserFilterComponent } from './components/user-filter/user-filter.component';\r\nimport { UserListComponent } from './components/user-list/user-list.component';\r\nimport { ConfirmDialogComponent } from './components/confirm-dialog/confirm-dialog.component';\r\nimport { UserEditorComponent } from './components/user-editor/user-editor.component';\r\n\r\n@NgModule({ declarations: [\n AuthJwtRegistrationComponent,\n PasswordStrengthBarComponent,\n UserFilterComponent,\n UserListComponent,\n ConfirmDialogComponent,\n UserEditorComponent,\n ],\n exports: [\n AuthJwtRegistrationComponent,\n PasswordStrengthBarComponent,\n UserFilterComponent,\n UserListComponent\n ], imports: [CommonModule,\n FormsModule,\n RouterModule,\n ReactiveFormsModule,\n // material\n MatButtonModule,\n MatCardModule,\n MatCheckboxModule,\n MatDialogModule,\n MatExpansionModule,\n MatIconModule,\n MatInputModule,\n MatPaginatorModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n MatSnackBarModule,\n MatTooltipModule,\n AuthJwtLoginModule,\n NgToolsModule], providers: [provideHttpClient(withInterceptorsFromDi())] })\r\nexport class AuthJwtAdminModule {}\r\n","/*\r\n * Public API Surface of auth-jwt-admin\r\n */\r\n\r\nexport * from './lib/components/auth-jwt-registration/auth-jwt-registration.component';\r\nexport * from './lib/components/password-strength-bar/password-strength-bar.component';\r\nexport * from './lib/components/user-filter/user-filter.component';\r\nexport * from './lib/components/user-list/user-list.component';\r\nexport * from './lib/components/state/user-list.repository';\r\nexport * from './lib/services/auth-jwt-account.service';\r\nexport * from './lib/validators/password.validators';\r\nexport * from './lib/auth-jwt-admin.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AuthJwtAccountService","i1","i2","i3.AuthJwtAccountService","i4.UserListRepository","i10.PasswordStrengthBarComponent","i3","i4","i5","i6","i7","i8","i1.UserListRepository","i2.DialogService","i9","i10.UserFilterComponent","i11.UserEditorComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAQa,kBAAkB,CAAA;;AAEtB,IAAA,OAAO,QAAQ,GAAA;QACpB,OAAO,CAAC,OAAwB,KAA6B;AAC3D,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAClB,gBAAA,OAAO,IAAI,CAAC;aACb;YAED,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5B,OAAO;AACL,oBAAA,gBAAgB,EAAE,IAAI;iBACvB,CAAC;aACH;YAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACpC,OAAO;AACL,oBAAA,iBAAiB,EAAE,IAAI;iBACxB,CAAC;aACH;YAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACpC,OAAO;AACL,oBAAA,iBAAiB,EAAE,IAAI;iBACxB,CAAC;aACH;YAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACpC,OAAO;AACL,oBAAA,iBAAiB,EAAE,IAAI;iBACxB,CAAC;aACH;YAED,IAAI,CAAC,2CAA2C,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACpE,OAAO;AACL,oBAAA,kBAAkB,EAAE,IAAI;iBACzB,CAAC;aACH;AAED,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC;KACH;AAEM,IAAA,OAAO,QAAQ,CACpB,WAAmB,EACnB,gBAAwB,EAAA;QAExB,OAAO,CAAC,OAAwB,KAA6B;YAC3D,MAAM,CAAC,GAAG,OAAuC,CAAC;YAClD,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAClC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AACvC,YAAA,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;AACxB,kBAAE;AACE,oBAAA,QAAQ,EAAE,IAAI;AACf,iBAAA;kBACD,IAAI,CAAC;AACX,SAAC,CAAC;KACH;AACF;;MCVY,qBAAqB,CAAA;AAChC,IAAA,WAAA,CACU,KAAiB,EACjB,MAAoB,EACpB,IAAgB,EAAA;QAFhB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAY;QACjB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAc;QACpB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;KACtB;AAEJ;;;;AAIG;AACI,IAAA,iBAAiB,CAAC,KAAa,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YACrB,uBAAuB;AACvB,YAAA,kBAAkB,CAAC,KAAK,CAAC,CAC5B,CAAC;KACH;AAED;;;;;;AAMG;AACI,IAAA,gBAAgB,CAAC,IAAY,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YACrB,sBAAsB;AACtB,YAAA,kBAAkB,CAAC,IAAI,CAAC,CAC3B,CAAC;KACH;AAED;;;;;AAKG;AACI,IAAA,QAAQ,CACb,YAA+B,EAC/B,SAAS,GAAG,KAAK,EAAA;AAEjB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CACpB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YACrB,mBAAmB;AACnB,aAAC,SAAS,GAAG,iBAAiB,GAAG,EAAE,CAAC,EACtC,YAAY,CACb,CAAC;KACH;AAED;;;AAGG;AACI,IAAA,kBAAkB,CAAC,KAAa,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YACrB,yBAAyB;YACzB,kBAAkB,CAAC,KAAK,CAAC;;SAE5B,CAAC;KACH;AAED;;;AAGG;AACI,IAAA,oBAAoB,CAAC,KAAa,EAAA;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CACpB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,gCAAgC,EAC1D,EAAE,KAAK,EAAE,CACV,CAAC;KACH;AAEO,IAAA,kBAAkB,CAAC,QAAoC,EAAA;QAC7D,OAAQ,QAAgC,CAAC,IAAI;AAC3C,cAAE;gBACE,GAAK,QAAgC,CAAC,IAAa;AACnD,gBAAA,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,EAAE;AAC5B,aAAA;cACA,QAAiB,CAAC;KACxB;IAEM,WAAW,GAAA;QAChB,OAAO,IAAI,CAAC,KAAK;aACd,GAAG,CACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,OAAO,EACjC;YACE,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC;SAChD,CACF;aACA,IAAI,CACH,KAAK,CAAC,CAAC,CAAC,EACR,GAAG,CAAC,CAAC,QAA8C,KAAI;YACrD,OAAO;AACL,gBAAA,GAAG,QAAQ;gBACX,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC;aACnD,CAAC;SACH,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CACpC,CAAC;KACL;IAEM,QAAQ,CACb,MAAkB,EAClB,UAAU,GAAG,CAAC,EACd,QAAQ,GAAG,EAAE,EAAA;AAEb,QAAA,IAAI,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;AAClC,QAAA,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;AACjE,QAAA,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7D,QAAA,IAAI,MAAM,CAAC,IAAI,EAAE;YACf,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;SAClD;QAED,OAAO,IAAI,CAAC,KAAK;aACd,GAAG,CAAgC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,OAAO,EAAE;AACrE,YAAA,MAAM,EAAE,UAAU;SACnB,CAAC;aACD,IAAI,CACH,KAAK,CAAC,CAAC,CAAC,EACR,GAAG,CAAC,CAAC,QAAuC,KAAI;YAC9C,OAAO;AACL,gBAAA,GAAG,QAAQ;gBACX,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC;aACnD,CAAC;SACH,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CACpC,CAAC;KACL;AACD;;;;AAIG;AACI,IAAA,WAAW,CAAC,UAAkB,EAAE,KAAK,GAAG,EAAE,EAAA;AAC/C,QAAA,IAAI,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QAClC,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AAC/C,QAAA,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1D,IAAI,UAAU,EAAE;YACd,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;SACjD;QACD,MAAM,OAAO,GACX,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;AAC1B,cAAE;AACE,gBAAA,MAAM,EAAE,UAAU;AACnB,aAAA;cACD,EAAE,CAAC;QAET,OAAO,IAAI,CAAC,KAAK;AACd,aAAA,GAAG,CAAwB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC;aACtE,IAAI,CACH,KAAK,CAAC,CAAC,CAAC,EACR,GAAG,CAAC,CAAC,KAA4B,KAAI;YACnC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;SAC3C,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CACpC,CAAC;KACL;AAED;;;AAGG;AACI,IAAA,iBAAiB,CAAC,KAAe,EAAA;AACtC,QAAA,IAAI,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QAClC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SACvD;QACD,MAAM,OAAO,GACX,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;AAC1B,cAAE;AACE,gBAAA,MAAM,EAAE,UAAU;AACnB,aAAA;cACD,EAAE,CAAC;QAET,OAAO,IAAI,CAAC,KAAK;AACd,aAAA,GAAG,CACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,kBAAkB,EAC5C,OAAO,CACR;aACA,IAAI,CACH,KAAK,CAAC,CAAC,CAAC,EACR,GAAG,CAAC,CAAC,KAA4B,KAAI;YACnC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;SAC3C,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CACpC,CAAC;KACL;AAED;;;AAGG;AACI,IAAA,OAAO,CAAC,IAAY,EAAA;QACzB,OAAO,IAAI,CAAC,KAAK;AACd,aAAA,GAAG,CAAsB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC;aACnE,IAAI,CACH,KAAK,CAAC,CAAC,CAAC,EACR,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAC5B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CACpC,CAAC;KACL;AAED;;;AAGG;AACI,IAAA,UAAU,CAAC,IAAU,EAAA;QAC1B,OAAO,IAAI,CAAC,KAAK;aACd,GAAG,CACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YACrB,OAAO;AACP,aAAC,IAAI,CAAC,cAAc,GAAG,iBAAiB,GAAG,EAAE,CAAC,EAChD,IAAI,CACL;aACA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;KAC9C;AAED;;;AAGG;AACI,IAAA,aAAa,CAAC,KAAa,EAAA;QAChC,OAAO,IAAI,CAAC,KAAK;aACd,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,gCAAgC,EAAE;AAChE,YAAA,KAAK,EAAE,KAAK;SACb,CAAC;aACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;KAC9C;AAED;;;AAGG;AACI,IAAA,cAAc,CAAC,MAAsB,EAAA;QAC1C,OAAO,IAAI,CAAC,KAAK;AACd,aAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,yBAAyB,EAAE,MAAM,CAAC;aACjE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;KAC9C;AAED;;;AAGG;AACI,IAAA,UAAU,CAAC,IAAY,EAAA;QAC5B,OAAO,IAAI,CAAC,KAAK;AACd,aAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC;aACpD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;KAC9C;8GA5PU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCtCY,kBAAkB,CAAA;AAQ7B,IAAA,IAAW,WAAW,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;KACzC;AACD,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;KAC5B;AACD,IAAA,IAAW,KAAK,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;KAC1B;AACD,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;KACtC;AACD,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;KACrC;AAED,IAAA,WAAA,CAAoB,WAAkC,EAAA;QAAlC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAuB;QACpD,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAmB,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,CAAmB,SAAS,CAAC,CAAC;QACrE,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;KACrB;AAEM,IAAA,QAAQ,CACb,UAAkB,EAClB,QAAgB,EAChB,MAAkB,EAAA;AAElB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,IAAI,CACjE,GAAG,CAAC;YACF,IAAI,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;YACtC,KAAK,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AACxC,SAAA,CAAC,CACH,CAAC;KACH;AAEM,IAAA,MAAM,KAAK,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;SAC3B;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,KAAK,CAAC;SACb;gBAAS;AACR,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC5B;KACF;IAEM,MAAM,SAAS,CAAC,MAAkB,EAAA;AACvC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SACrC;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,KAAK,CAAC;SACb;gBAAS;AACR,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC5B;KACF;IAEM,SAAS,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;KAChC;AAEM,IAAA,MAAM,OAAO,CAAC,UAAkB,EAAE,QAAgB,EAAA;AACvD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;SACjD;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,KAAK,CAAC;SACb;gBAAS;AACR,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC5B;KACF;AAEM,IAAA,aAAa,CAAC,IAAiB,EAAA;QACpC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;KAC3C;AAEM,IAAA,gBAAgB,CAAC,IAAU,EAAA;QAChC,MAAM,OAAO,GAAqB,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AAChE,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEzB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;AAC1C,gBAAA,IAAI,EAAE,CAAC,CAAC,KAAI;AACV,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,oBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBACpB,OAAO,CAAC,IAAI,CAAC,CAAC;iBACf;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,oBAAA,OAAO,CAAC,KAAK,CACX,uBAAuB,IAAI,CAAC,QAAQ,CAAI,EAAA,CAAA;wBACtC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,CAC9B,CAAC;oBACF,OAAO,CAAC,KAAK,CAAC,CAAC;iBAChB;AACF,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC;KAChB;AAEM,IAAA,UAAU,CAAC,IAAY,EAAA;QAC5B,MAAM,OAAO,GAAqB,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YAChE,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,EAAE;AAC9C,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACnC;AAED,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEzB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;AAC1C,gBAAA,IAAI,EAAE,CAAC,CAAC,KAAI;AACV,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,oBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBACpB,OAAO,CAAC,IAAI,CAAC,CAAC;iBACf;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,oBAAA,OAAO,CAAC,KAAK,CACX,CAAuB,oBAAA,EAAA,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,CAC9D,CAAC;oBACF,MAAM,CAAC,KAAK,CAAC,CAAC;iBACf;AACF,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC;KAChB;8GAtIU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;MCDrB,4BAA4B,CAAA;AASvC,IAAA,WAAA,GAAA;AARQ,QAAA,IAAA,CAAA,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAIjD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAU,CAAC;AAKpD,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,YAAY,EAAU,CAAC;AACjD,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;KAChB;AAEO,IAAA,eAAe,CAAC,CAAS,EAAA;QAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,QAAA,MAAM,KAAK,GAAG,uBAAuB,CAAC;QAEtC,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE9B,MAAM,KAAK,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE7D,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,aAAa,IAAI,IAAI,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;SACxC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,QAAA,KAAK,IAAI,aAAa,GAAG,EAAE,CAAC;;QAG5B,KAAK,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;;AAGpD,QAAA,KAAK,GAAG,aAAa,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;AAC1D,QAAA,KAAK,GAAG,aAAa,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;AAC1D,QAAA,KAAK,GAAG,aAAa,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;AAE1D,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,QAAQ,CAAC,CAAS,EAAA;QACxB,IAAI,GAAG,GAAG,CAAC,CAAC;AACZ,QAAA,IAAI,CAAC,IAAI,EAAE,EAAE;YACX,GAAG,GAAG,CAAC,CAAC;SACT;AAAM,aAAA,IAAI,CAAC,IAAI,EAAE,EAAE;YAClB,GAAG,GAAG,CAAC,CAAC;SACT;AAAM,aAAA,IAAI,CAAC,IAAI,EAAE,EAAE;YAClB,GAAG,GAAG,CAAC,CAAC;SACT;AAAM,aAAA,IAAI,CAAC,IAAI,EAAE,EAAE;YAClB,GAAG,GAAG,CAAC,CAAC;SACT;aAAM;YACL,GAAG,GAAG,CAAC,CAAC;SACT;QACD,OAAO;YACL,GAAG,EAAE,GAAG,GAAG,CAAC;AACZ,YAAA,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;SACvB,CAAC;KACH;AAED,IAAA,WAAW,CAAC,OAA6C,EAAA;QACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC;AACzD,QAAA,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7B,IAAI,QAAQ,EAAE;YACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACpC;KACF;IAEO,YAAY,CAAC,KAAa,EAAE,GAAW,EAAA;AAC7C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AAC9B,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;SACpB;KACF;8GA9EU,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,0LCdzC,ycAUA,EAAA,MAAA,EAAA,CAAA,yOAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDIa,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBALxC,SAAS;+BACE,gCAAgC,EAAA,QAAA,EAAA,ycAAA,EAAA,MAAA,EAAA,CAAA,yOAAA,CAAA,EAAA,CAAA;wDAOjC,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAEI,cAAc,EAAA,CAAA;sBAAvB,MAAM;;;MEOI,4BAA4B,CAAA;AAqBvC,IAAA,WAAA,CACE,WAAwB,EAChB,SAAsB,EACtB,eAAsC,EACtC,eAAmC,EAAA;QAFnC,IAAS,CAAA,SAAA,GAAT,SAAS,CAAa;QACtB,IAAe,CAAA,eAAA,GAAf,eAAe,CAAuB;QACtC,IAAe,CAAA,eAAA,GAAf,eAAe,CAAoB;QANtC,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC;AAQjB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,YAAY,EAAO,CAAC;;QAE1C,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE;YACnC,UAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC;AACnD,YAAA,eAAe,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CACtE,IAAI,CACL;AACD,YAAA,WAAW,EAAE,IAAI;AAClB,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE;YAClC,UAAU,EAAE,UAAU,CAAC,QAAQ;AAC/B,YAAA,eAAe,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CACrE,IAAI,CACL;AACD,YAAA,WAAW,EAAE,IAAI;AAClB,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE;AACvC,YAAA,UAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC3D,YAAA,WAAW,EAAE,IAAI;AAClB,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE;AACtC,YAAA,UAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC3D,YAAA,WAAW,EAAE,IAAI;AAClB,SAAA,CAAC,CAAC;;QAGH,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE;YACtC,UAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,EAAE,CAAC;AAChE,YAAA,WAAW,EAAE,IAAI;AAClB,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE;YAC7C,UAAU,EAAE,UAAU,CAAC,QAAQ;AAC/B,YAAA,WAAW,EAAE,IAAI;AAClB,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAC3B;YACE,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,eAAe,EAAE,IAAI,CAAC,eAAe;SACtC,EACD;AACE,YAAA,UAAU,EAAE;AACV,gBAAA,kBAAkB,CAAC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;AAC3D,aAAA;AACF,SAAA,CACF,CAAC;KACH;AAED;;;;;;;AAOG;AACK,IAAA,sBAAsB,CAAC,OAA8B,EAAA;QAC3D,OAAO,CACL,OAAwB,KAGgB;YACxC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;;AAErC,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;oBAClB,OAAO,CAAC,IAAI,CAAC,CAAC;iBACf;qBAAM;oBACL,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AAChD,wBAAA,IAAI,EAAE,CAAC,IAAiB,KAAI;AAC1B,4BAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gCACpB,OAAO,CAAC,IAAI,CAAC,CAAC;6BACf;iCAAM;AACL,gCAAA,OAAO,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;6BAC/B;yBACF;AACD,wBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;4BACf,OAAO,CAAC,KAAK,CACX,6BAA6B;AAC3B,iCAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CACvC,CAAC;AACF,4BAAA,OAAO,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;yBAC/B;AACF,qBAAA,CAAC,CAAC;iBACJ;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAC;KACH;AAEO,IAAA,uBAAuB,CAAC,OAA8B,EAAA;QAC5D,OAAO,CACL,OAAwB,KAGgB;YACxC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;;AAErC,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;oBAClB,OAAO,CAAC,IAAI,CAAC,CAAC;iBACf;qBAAM;oBACL,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AACjD,wBAAA,IAAI,EAAE,CAAC,IAAiB,KAAI;AAC1B,4BAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gCACpB,OAAO,CAAC,IAAI,CAAC,CAAC;6BACf;iCAAM;AACL,gCAAA,OAAO,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;6BAChC;yBACF;AACD,wBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;4BACf,OAAO,CAAC,KAAK,CACX,8BAA8B;AAC5B,iCAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CACvC,CAAC;AACF,4BAAA,OAAO,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;yBAChC;AACF,qBAAA,CAAC,CAAC;iBACJ;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAC;KACH;IAEM,QAAQ,GAAA;AACb,QAAA,IACE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;AAChB,YAAA,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,IAAI,CAAC,OAAO;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAClB;YACA,OAAO;SACR;AAED,QAAA,MAAM,KAAK,GAAsB;AAC/B,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;AACvB,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;AACrB,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK;AAC/B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;AAC7B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;SAC9B,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,eAAe;aACjB,QAAQ,CAAC,KAAK,CAAC;AACf,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACb,aAAA,SAAS,CAAC;YACT,IAAI,EAAE,MAAK;AACT,gBAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,SAAS,CAAA,CAAwC,sCAAA,CAAA,EACjD,IAAI,CACL,CAAC;AACF,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;AAC7B,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,OAAO,CAAC,KAAK,CACX,qBAAqB,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAC7D,CAAC;gBACF,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,SAAS,CAAA,CAAoC,kCAAA,CAAA,EAC7C,IAAI,CACL,CAAC;aACH;AACF,SAAA,CAAC,CAAC;KACN;8GApMU,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,oGC1BzC,0yYA0RA,EAAA,MAAA,EAAA,CAAA,sOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,4BAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDhQa,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBALxC,SAAS;+BACE,uBAAuB,EAAA,QAAA,EAAA,0yYAAA,EAAA,MAAA,EAAA,CAAA,sOAAA,CAAA,EAAA,CAAA;6KAqB1B,UAAU,EAAA,CAAA;sBADhB,MAAM;;;ME/BI,mBAAmB,CAAA;AAG9B,IAAA,IACW,MAAM,GAAA;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;IACD,IAAW,MAAM,CAAC,KAAoC,EAAA;AACpD,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;YAC1B,OAAO;SACR;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,IAAI,SAAS,CAAC;AAClC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC/B;AAcD,IAAA,WAAA,CAAY,WAAwB,EAAA;;QAElC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,OAAO,CAAgB,IAAI,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;YAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,SAAA,CAAC,CAAC;;AAEH,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAc,CAAC;KACpD;AAEO,IAAA,UAAU,CAAC,MAAmB,EAAA;QACpC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;KAC5B;IAEO,SAAS,GAAA;QACf,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;SAC9B,CAAC;KACH;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACtC;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACtC;8GA7DU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,2JCXhC,26BAgCA,EAAA,MAAA,EAAA,CAAA,uHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDrBa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,26BAAA,EAAA,MAAA,EAAA,CAAA,uHAAA,CAAA,EAAA,CAAA;kFAQrB,MAAM,EAAA,CAAA;sBADhB,KAAK;gBAaC,QAAQ,EAAA,CAAA;sBADd,KAAK;gBAOC,YAAY,EAAA,CAAA;sBADlB,MAAM;;;AE7BT;MAQa,sBAAsB,CAAA;IAMjC,WACS,CAAA,SAA+C,EACV,IAAS,EAAA;QAD9C,IAAS,CAAA,SAAA,GAAT,SAAS,CAAsC;QACV,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAK;AAErD,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA,yBAAyB,CAAC;AAChD,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA,oCAAoC,CAAC;AAC5D,QAAA,IAAI,CAAC,EAAE,GAAG,SAAS,CAAA,qBAAqB,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA,oBAAoB,CAAC;KAC7C;AAED,IAAA,QAAQ,MAAK;AAhBF,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,gDAQX,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAR1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,oDCXnC,2aAiBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDNa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;;;0BAcL,QAAQ;;0BAAI,MAAM;2BAAC,eAAe,CAAA;;;AEdvC;AAEA;;;;;;;;AAQG;MAIU,aAAa,CAAA;AACxB,IAAA,WAAA,CAAoB,MAAiB,EAAA;QAAjB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;KAAI;AAElC,IAAA,OAAO,CACZ,KAAa,EACb,MAAc,EACd,EAAE,GAAG,SAAS,CAAA,qBAAqB,EACnC,MAAM,GAAG,SAAS,CAAA,CAAoB,kBAAA,CAAA,EAAA;AAEtC,QAAA,IAAI,SAA+C,CAAC;QAEpD,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AACrD,QAAA,SAAS,CAAC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC;AAC1C,QAAA,SAAS,CAAC,iBAAiB,CAAC,MAAM,GAAG,MAAM,CAAC;AAC5C,QAAA,SAAS,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,CAAC;AACpC,QAAA,SAAS,CAAC,iBAAiB,CAAC,MAAM,GAAG,MAAM,CAAC;AAE5C,QAAA,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC;KAChC;8GAlBU,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCJY,mBAAmB,CAAA;IAa9B,IAAoB,IAAI,CAAC,KAAuB,EAAA;AAC9C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KACxB;AACD,IAAA,IAAW,IAAI,GAAA;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAKD,WAAY,CAAA,WAA+B,EAAU,YAA4B,EAAA;QAA5B,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAgB;;AAE/E,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,YAAY,EAAQ,CAAC;AAC3C,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,EAAO,CAAC;;QAE3C,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE;AACrC,YAAA,UAAU,CAAC,QAAQ;AACnB,YAAA,UAAU,CAAC,KAAK;AACjB,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE;AACzC,YAAA,UAAU,CAAC,QAAQ;AACnB,YAAA,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;AACzB,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE;AACxC,YAAA,UAAU,CAAC,QAAQ;AACnB,YAAA,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;AACzB,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAElE,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;YAC5B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,QAAQ,MAAW;AAEX,IAAA,UAAU,CAAC,IAAsB,EAAA;QACvC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;SACnB;aAAM;YACL,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;AAC1B,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;aAC3C;iBAAM;AACL,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;aAC3B;SACF;KACF;IAEO,eAAe,GAAA;QACrB,OAAO;AACL,YAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,IAAI,EAAE;AACpC,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;AACvB,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK;AACzC,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK;AACzC,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK;AAC/B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;AAC7B,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;kBACnB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,KAAK,CAAC,CAAC;AACtD,kBAAE,EAAE;SACP,CAAC;KACH;IAEM,UAAU,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO;SACR;QACD,IAAI,CAAC,KAAM,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;AACxD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;KACzB;IAEM,IAAI,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACrB,OAAO;SACR;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;KAC9C;8GAzGU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,yJCdhC,qiIA0IA,EAAA,MAAA,EAAA,CAAA,+FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FD5Ha,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,qiIAAA,EAAA,MAAA,EAAA,CAAA,+FAAA,CAAA,EAAA,CAAA;wHAiBZ,IAAI,EAAA,CAAA;sBAAvB,KAAK;gBAQI,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBACG,WAAW,EAAA,CAAA;sBAApB,MAAM;;;MEnBI,iBAAiB,CAAA;AAM5B,IAAA,WAAA,CACU,WAA+B,EAC/B,cAA6B,EAC7B,gBAAiC,EAAA;QAFjC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAoB;QAC/B,IAAc,CAAA,cAAA,GAAd,cAAc,CAAe;QAC7B,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAiB;AAEzC,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;AACnC,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC;AACvC,QAAA,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;KACtC;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;KAC1B;AAEM,IAAA,cAAc,CAAC,MAAkB,EAAA;AACtC,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KACpC;AAEM,IAAA,YAAY,CAAC,KAAgB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;KAC/D;AAEM,IAAA,UAAU,CAAC,IAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,cAAc;AAChB,aAAA,OAAO,CACN,SAAS,CAAA,CAAA,uBAAA,CAAyB,EAClC,SAAS,CAAA,CAA6B,2BAAA,CAAA,GAAG,IAAI,CAAC,QAAQ,GAAG,GAAG,CAC7D;AACA,aAAA,SAAS,CAAC,CAAC,GAAG,KAAI;YACjB,IAAI,GAAG,EAAE;gBACP,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC5C;AACH,SAAC,CAAC,CAAC;KACN;AAEM,IAAA,aAAa,CAAC,IAAiB,EAAA;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KACtC;IAEM,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KACtC;AAEM,IAAA,cAAc,CAAC,IAAU,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KACtC;IAEM,iBAAiB,GAAA;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KACtC;AAEM,IAAA,cAAc,CAAC,KAAa,EAAE,IAAI,GAAG,EAAE,EAAA;QAC5C,OAAO,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KAC5D;8GA7DU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAP,IAAA,CAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,0DCjB9B,oiIAsHA,EAAA,MAAA,EAAA,CAAA,k0BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,GAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDrGa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;+BACE,oBAAoB,EAAA,QAAA,EAAA,oiIAAA,EAAA,MAAA,EAAA,CAAA,k0BAAA,CAAA,EAAA,CAAA;;;MEgDnB,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,iBA/BvB,4BAA4B;YAC5B,4BAA4B;YAC5B,mBAAmB;YACnB,iBAAiB;YACjB,sBAAsB;AACtB,YAAA,mBAAmB,aAOV,YAAY;YACrB,WAAW;YACX,YAAY;YACZ,mBAAmB;;YAEnB,eAAe;YACf,aAAa;YACb,iBAAiB;YACjB,eAAe;YACf,kBAAkB;YAClB,aAAa;YACb,cAAc;YACd,kBAAkB;YAClB,oBAAoB;YACpB,wBAAwB;YACxB,iBAAiB;YACjB,gBAAgB;YAChB,kBAAkB;AAClB,YAAA,aAAa,aAtBb,4BAA4B;YAC5B,4BAA4B;YAC5B,mBAAmB;YACnB,iBAAiB,CAAA,EAAA,CAAA,CAAA,EAAA;+GAoBZ,kBAAkB,EAAA,SAAA,EADI,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAA,OAAA,EAAA,CAlB/D,YAAY;YACrB,WAAW;YACX,YAAY;YACZ,mBAAmB;;YAEnB,eAAe;YACf,aAAa;YACb,iBAAiB;YACjB,eAAe;YACf,kBAAkB;YAClB,aAAa;YACb,cAAc;YACd,kBAAkB;YAClB,oBAAoB;YACpB,wBAAwB;YACxB,iBAAiB;YACjB,gBAAgB;YAChB,kBAAkB;YAClB,aAAa,CAAA,EAAA,CAAA,CAAA,EAAA;;2FACR,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAhC9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,YAAY,EAAE;wBAClB,4BAA4B;wBAC5B,4BAA4B;wBAC5B,mBAAmB;wBACnB,iBAAiB;wBACjB,sBAAsB;wBACtB,mBAAmB;AACtB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,4BAA4B;wBAC5B,4BAA4B;wBAC5B,mBAAmB;wBACnB,iBAAiB;qBACpB,EAAE,OAAO,EAAE,CAAC,YAAY;wBACrB,WAAW;wBACX,YAAY;wBACZ,mBAAmB;;wBAEnB,eAAe;wBACf,aAAa;wBACb,iBAAiB;wBACjB,eAAe;wBACf,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,kBAAkB;wBAClB,oBAAoB;wBACpB,wBAAwB;wBACxB,iBAAiB;wBACjB,gBAAgB;wBAChB,kBAAkB;wBAClB,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,CAAA;;;AC5DlF;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"myrmidon-auth-jwt-admin.mjs","sources":["../../../../projects/myrmidon/auth-jwt-admin/src/lib/validators/password.validators.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/services/auth-jwt-account.service.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/state/user-list.repository.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/password-strength-bar/password-strength-bar.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/password-strength-bar/password-strength-bar.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/auth-jwt-registration/auth-jwt-registration.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/auth-jwt-registration/auth-jwt-registration.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-filter/user-filter.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-filter/user-filter.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-editor/user-editor.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-editor/user-editor.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-list/user-list.component.ts","../../../../projects/myrmidon/auth-jwt-admin/src/lib/components/user-list/user-list.component.html","../../../../projects/myrmidon/auth-jwt-admin/src/lib/auth-jwt-admin.module.ts","../../../../projects/myrmidon/auth-jwt-admin/src/public-api.ts","../../../../projects/myrmidon/auth-jwt-admin/src/myrmidon-auth-jwt-admin.ts"],"sourcesContent":["import {\r\n AbstractControl,\r\n FormGroup,\r\n UntypedFormGroup,\r\n ValidationErrors,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\n\r\nexport class PasswordValidators {\r\n /** \"Standard\" password validator for my API services. */\r\n public static standard(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n if (!control.value) {\r\n return null;\r\n }\r\n\r\n if (control.value.length < 8) {\r\n return {\r\n passwordtooshort: true,\r\n };\r\n }\r\n\r\n if (!/.*[A-Z].*/.test(control.value)) {\r\n return {\r\n noupperinpassword: true,\r\n };\r\n }\r\n\r\n if (!/.*[a-z].*/.test(control.value)) {\r\n return {\r\n nolowerinpassword: true,\r\n };\r\n }\r\n\r\n if (!/.*[A-Z].*/.test(control.value)) {\r\n return {\r\n noupperinpassword: true,\r\n };\r\n }\r\n\r\n if (!/.*[-`~!@#$%^&*()_+=\\[\\]{};:'\",.<>/?|\\\\].*/.test(control.value)) {\r\n return {\r\n nosymbolinpassword: true,\r\n };\r\n }\r\n\r\n return null;\r\n };\r\n }\r\n\r\n public static areEqual(\r\n controlName: string,\r\n otherControlName: string\r\n ): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const g = control as FormGroup | UntypedFormGroup;\r\n const a = g.controls[controlName];\r\n const b = g.controls[otherControlName];\r\n return a.value !== b.value\r\n ? {\r\n areequal: true,\r\n }\r\n : null;\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { retry, catchError, map } from 'rxjs/operators';\r\n\r\nimport { DataPage, EnvService, ErrorService } from '@myrmidon/ng-tools';\r\nimport { User } from '@myrmidon/auth-jwt-login';\r\n\r\n/**\r\n * User registration model. You can expand this interface to add more data.\r\n */\r\nexport interface RegistrationModel {\r\n email: string;\r\n name: string;\r\n firstName?: string;\r\n lastName?: string;\r\n password: string;\r\n}\r\n\r\n/**\r\n * Result of an existing resource check.\r\n */\r\nexport interface ExistResult {\r\n entry: string;\r\n isExisting: boolean;\r\n}\r\n\r\n/**\r\n * Password change data.\r\n */\r\nexport interface PasswordChange {\r\n email: string;\r\n oldPassword: string;\r\n newPassword: string;\r\n confirmPassword: string;\r\n}\r\n\r\n/**\r\n * User filter parameters.\r\n */\r\nexport interface UserFilter {\r\n name?: string;\r\n}\r\n\r\n/**\r\n * The type of user data returned by the server.\r\n */\r\ninterface UserWithRoles<T> {\r\n user: T;\r\n roles?: string[];\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthJwtAccountService {\r\n constructor(\r\n private _http: HttpClient,\r\n private _error: ErrorService,\r\n private _env: EnvService\r\n ) {}\r\n\r\n /**\r\n * Checks if the specified email address is registered on the server.\r\n * @param email email address to test.\r\n * @returns result.\r\n */\r\n public isEmailRegistered(email: string): Observable<ExistResult> {\r\n return this._http.get<ExistResult>(\r\n this._env.get('apiUrl') +\r\n 'accounts/emailexists/' +\r\n encodeURIComponent(email)\r\n );\r\n }\r\n\r\n /**\r\n * Checks if the specified user's given name is registered on the server.\r\n * This name is a nickname chosen by users during registration, and is the key\r\n * used for referencing users when talking to the server.\r\n * @param name name to test.\r\n * @returns result.\r\n */\r\n public isNameRegistered(name: string): Observable<ExistResult> {\r\n return this._http.get<ExistResult>(\r\n this._env.get('apiUrl') +\r\n 'accounts/nameexists/' +\r\n encodeURIComponent(name)\r\n );\r\n }\r\n\r\n /**\r\n * Register the user with the specified registration data.\r\n * @param registration The registration data.\r\n * @param confirmed True to automatically confirm the user's email address\r\n * without sending the confirmation email message.\r\n */\r\n public register(\r\n registration: RegistrationModel,\r\n confirmed = false\r\n ): Observable<any> {\r\n return this._http.post(\r\n this._env.get('apiUrl') +\r\n 'accounts/register' +\r\n (confirmed ? '?confirmed=true' : ''),\r\n registration\r\n );\r\n }\r\n\r\n /**\r\n * Resend the confirmation email to the specified address.\r\n * @param email address.\r\n */\r\n public resendConfirmEmail(email: string): Observable<any> {\r\n return this._http.get(\r\n this._env.get('apiUrl') +\r\n 'accounts/resendconfirm/' +\r\n encodeURIComponent(email)\r\n // options\r\n );\r\n }\r\n\r\n /**\r\n * Request a password reset for the specified email address.\r\n * @param email Email address.\r\n */\r\n public requestPasswordReset(email: string): Observable<any> {\r\n return this._http.post(\r\n this._env.get('apiUrl') + 'accounts/resetpassword/request',\r\n { email }\r\n );\r\n }\r\n\r\n private getUserFromWrapper(response: UserWithRoles<User> | User): User {\r\n return (response as UserWithRoles<User>).user\r\n ? {\r\n ...((response as UserWithRoles<User>).user as User),\r\n roles: response.roles || [],\r\n }\r\n : (response as User);\r\n }\r\n\r\n public getAllUsers(): Observable<DataPage<User>> {\r\n return this._http\r\n .get<DataPage<UserWithRoles<User> | User>>(\r\n this._env.get('apiUrl') + 'users',\r\n {\r\n params: new HttpParams().set('pageNumber', '1'),\r\n }\r\n )\r\n .pipe(\r\n retry(3),\r\n map((dataPage: DataPage<UserWithRoles<User> | User>) => {\r\n return {\r\n ...dataPage,\r\n items: dataPage.items.map(this.getUserFromWrapper),\r\n };\r\n }),\r\n catchError(this._error.handleError)\r\n );\r\n }\r\n\r\n public getUsers(\r\n filter: UserFilter,\r\n pageNumber = 1,\r\n pageSize = 20\r\n ): Observable<DataPage<User>> {\r\n let httpParams = new HttpParams();\r\n httpParams = httpParams.set('pageNumber', pageNumber.toString());\r\n httpParams = httpParams.set('pageSize', pageSize.toString());\r\n if (filter.name) {\r\n httpParams = httpParams.set('name', filter.name);\r\n }\r\n\r\n return this._http\r\n .get<DataPage<UserWithRoles<User>>>(this._env.get('apiUrl') + 'users', {\r\n params: httpParams,\r\n })\r\n .pipe(\r\n retry(3),\r\n map((dataPage: DataPage<UserWithRoles<User>>) => {\r\n return {\r\n ...dataPage,\r\n items: dataPage.items.map(this.getUserFromWrapper),\r\n };\r\n }),\r\n catchError(this._error.handleError)\r\n );\r\n }\r\n /**\r\n * Get the top N users matching the specified name filter.\r\n * @param nameFilter The user name filter.\r\n * @param limit The maximum number of users to get.\r\n */\r\n public getTopUsers(nameFilter: string, limit = 10): Observable<User[]> {\r\n let httpParams = new HttpParams();\r\n httpParams = httpParams.set('pageNumber', '1');\r\n httpParams = httpParams.set('pageSize', limit.toString());\r\n if (nameFilter) {\r\n httpParams = httpParams.set('name', nameFilter);\r\n }\r\n const options =\r\n httpParams.keys().length > 0\r\n ? {\r\n params: httpParams,\r\n }\r\n : {};\r\n\r\n return this._http\r\n .get<UserWithRoles<User>[]>(this._env.get('apiUrl') + 'users', options)\r\n .pipe(\r\n retry(3),\r\n map((users: UserWithRoles<User>[]) => {\r\n return users.map(this.getUserFromWrapper);\r\n }),\r\n catchError(this._error.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get information about all the users listed in the specified names.\r\n * @param names User(s) names.\r\n */\r\n public getUsersFromNames(names: string[]): Observable<User[]> {\r\n let httpParams = new HttpParams();\r\n if (names && names.length > 0) {\r\n httpParams = httpParams.set('names', names.join(','));\r\n }\r\n const options =\r\n httpParams.keys().length > 0\r\n ? {\r\n params: httpParams,\r\n }\r\n : {};\r\n\r\n return this._http\r\n .get<UserWithRoles<User>[]>(\r\n this._env.get('apiUrl') + 'users-from-names',\r\n options\r\n )\r\n .pipe(\r\n retry(3),\r\n map((users: UserWithRoles<User>[]) => {\r\n return users.map(this.getUserFromWrapper);\r\n }),\r\n catchError(this._error.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get data about the specified user.\r\n * @param name The user name.\r\n */\r\n public getUser(name: string): Observable<User> {\r\n return this._http\r\n .get<UserWithRoles<User>>(this._env.get('apiUrl') + 'users/' + name)\r\n .pipe(\r\n retry(3),\r\n map(this.getUserFromWrapper),\r\n catchError(this._error.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Update the editable data for the specified user.\r\n * @param user The user to update.\r\n */\r\n public updateUser(user: User): Observable<any> {\r\n return this._http\r\n .put(\r\n this._env.get('apiUrl') +\r\n 'users' +\r\n (user.emailConfirmed ? '?confirmed=true' : ''),\r\n user\r\n )\r\n .pipe(catchError(this._error.handleError));\r\n }\r\n\r\n /**\r\n * Request a password reset email for the specified email address.\r\n * @param email The email address to receive the reset message.\r\n */\r\n public resetPassword(email: string): Observable<any> {\r\n return this._http\r\n .post(this._env.get('apiUrl') + 'accounts/resetpassword/request', {\r\n email: email,\r\n })\r\n .pipe(catchError(this._error.handleError));\r\n }\r\n\r\n /**\r\n * Change the password.\r\n * @param change The password change data.\r\n */\r\n public changePassword(change: PasswordChange): Observable<any> {\r\n return this._http\r\n .post(this._env.get('apiUrl') + 'accounts/changepassword', change)\r\n .pipe(catchError(this._error.handleError));\r\n }\r\n\r\n /**\r\n * Delete the user with the specified username.\r\n * @param name The user name.\r\n */\r\n public deleteUser(name: string): Observable<any> {\r\n return this._http\r\n .delete(this._env.get('apiUrl') + 'accounts/' + name)\r\n .pipe(catchError(this._error.handleError));\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable, take, tap } from 'rxjs';\r\n\r\nimport { User } from '@myrmidon/auth-jwt-login';\r\nimport { DataPage } from '@myrmidon/ng-tools';\r\nimport {\r\n PagedListStore,\r\n PagedListStoreService,\r\n} from '@myrmidon/paged-data-browsers';\r\n\r\nimport {\r\n AuthJwtAccountService,\r\n UserFilter,\r\n} from '../../services/auth-jwt-account.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UserListRepository\r\n implements PagedListStoreService<UserFilter, User>\r\n{\r\n private _store: PagedListStore<UserFilter, User>;\r\n private _activeUser$: BehaviorSubject<User | undefined>;\r\n private _loading$: BehaviorSubject<boolean>;\r\n private _saving$: BehaviorSubject<boolean>;\r\n\r\n public get activeUser$(): Observable<User | undefined> {\r\n return this._activeUser$.asObservable();\r\n }\r\n public get filter$(): Observable<UserFilter> {\r\n return this._store.filter$;\r\n }\r\n public get page$(): Observable<DataPage<User>> {\r\n return this._store.page$;\r\n }\r\n public get loading$(): Observable<boolean> {\r\n return this._loading$.asObservable();\r\n }\r\n public get saving$(): Observable<boolean> {\r\n return this._saving$.asObservable();\r\n }\r\n\r\n constructor(private _accService: AuthJwtAccountService) {\r\n this._store = new PagedListStore<UserFilter, User>(this);\r\n this._activeUser$ = new BehaviorSubject<User | undefined>(undefined);\r\n this._loading$ = new BehaviorSubject<boolean>(false);\r\n this._saving$ = new BehaviorSubject<boolean>(false);\r\n this._store.reset();\r\n }\r\n\r\n public loadPage(\r\n pageNumber: number,\r\n pageSize: number,\r\n filter: UserFilter\r\n ): Observable<DataPage<User>> {\r\n this._loading$.next(true);\r\n return this._accService.getUsers(filter, pageNumber, pageSize).pipe(\r\n tap({\r\n next: () => this._loading$.next(false),\r\n error: () => this._loading$.next(false),\r\n })\r\n );\r\n }\r\n\r\n public async reset(): Promise<void> {\r\n this._loading$.next(true);\r\n try {\r\n await this._store.reset();\r\n } catch (error) {\r\n throw error;\r\n } finally {\r\n this._loading$.next(false);\r\n }\r\n }\r\n\r\n public async setFilter(filter: UserFilter): Promise<void> {\r\n this._loading$.next(true);\r\n try {\r\n await this._store.setFilter(filter);\r\n } catch (error) {\r\n throw error;\r\n } finally {\r\n this._loading$.next(false);\r\n }\r\n }\r\n\r\n public getFilter(): UserFilter {\r\n return this._store.getFilter();\r\n }\r\n\r\n public async setPage(pageNumber: number, pageSize: number): Promise<void> {\r\n this._loading$.next(true);\r\n try {\r\n await this._store.setPage(pageNumber, pageSize);\r\n } catch (error) {\r\n throw error;\r\n } finally {\r\n this._loading$.next(false);\r\n }\r\n }\r\n\r\n public setActiveUser(user: User | null): void {\r\n this._activeUser$.next(user || undefined);\r\n }\r\n\r\n public updateActiveUser(user: User): Promise<boolean> {\r\n const promise: Promise<boolean> = new Promise((resolve, reject) => {\r\n this._saving$.next(true);\r\n\r\n this._accService.updateUser(user).subscribe({\r\n next: (_) => {\r\n this._saving$.next(false);\r\n this._store.reset();\r\n resolve(true);\r\n },\r\n error: (error) => {\r\n this._saving$.next(false);\r\n console.error(\r\n `Error updating user ${user.userName}: ` +\r\n JSON.stringify(error || {})\r\n );\r\n resolve(false);\r\n },\r\n });\r\n });\r\n return promise;\r\n }\r\n\r\n public deleteUser(name: string): Promise<boolean> {\r\n const promise: Promise<boolean> = new Promise((resolve, reject) => {\r\n if (this._activeUser$.value?.userName === name) {\r\n this._activeUser$.next(undefined);\r\n }\r\n\r\n this._saving$.next(true);\r\n\r\n this._accService.deleteUser(name).subscribe({\r\n next: (_) => {\r\n this._saving$.next(false);\r\n this._store.reset();\r\n resolve(true);\r\n },\r\n error: (error) => {\r\n this._saving$.next(false);\r\n console.error(\r\n `Error deleting user ${name}: ` + JSON.stringify(error || {})\r\n );\r\n reject(error);\r\n },\r\n });\r\n });\r\n return promise;\r\n }\r\n}\r\n","import {\r\n Component,\r\n OnChanges,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n SimpleChange,\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'auth-jwt-password-strength-bar',\r\n templateUrl: './password-strength-bar.component.html',\r\n styleUrls: ['./password-strength-bar.component.css'],\r\n})\r\nexport class PasswordStrengthBarComponent implements OnChanges {\r\n private _colors = ['#F00', '#F90', '#FF0', '#9F0', '#0F0'];\r\n\r\n @Input() passwordToCheck: string | undefined;\r\n\r\n @Output() strengthChange = new EventEmitter<number>();\r\n\r\n public bars: string[];\r\n\r\n constructor() {\r\n this.strengthChange = new EventEmitter<number>();\r\n this.bars = [];\r\n }\r\n\r\n private measureStrength(p: string): number {\r\n let force = 0;\r\n const regex = /[$-/:-?{-~!\"^_`\\[\\]]/g; // \"\r\n\r\n const lowerLetters = /[a-z]+/.test(p);\r\n const upperLetters = /[A-Z]+/.test(p);\r\n const numbers = /[0-9]+/.test(p);\r\n const symbols = regex.test(p);\r\n\r\n const flags = [lowerLetters, upperLetters, numbers, symbols];\r\n\r\n let passedMatches = 0;\r\n for (const flag of flags) {\r\n passedMatches += flag === true ? 1 : 0;\r\n }\r\n\r\n force += 2 * p.length + (p.length >= 10 ? 1 : 0);\r\n force += passedMatches * 10;\r\n\r\n // penalty (short password)\r\n force = p.length <= 6 ? Math.min(force, 10) : force;\r\n\r\n // penalty (poor letiety of characters)\r\n force = passedMatches === 1 ? Math.min(force, 10) : force;\r\n force = passedMatches === 2 ? Math.min(force, 20) : force;\r\n force = passedMatches === 3 ? Math.min(force, 40) : force;\r\n\r\n return force;\r\n }\r\n\r\n private getColor(s: number) {\r\n let idx = 0;\r\n if (s <= 10) {\r\n idx = 0;\r\n } else if (s <= 20) {\r\n idx = 1;\r\n } else if (s <= 30) {\r\n idx = 2;\r\n } else if (s <= 40) {\r\n idx = 3;\r\n } else {\r\n idx = 4;\r\n }\r\n return {\r\n idx: idx + 1,\r\n col: this._colors[idx],\r\n };\r\n }\r\n\r\n ngOnChanges(changes: { [propName: string]: SimpleChange }): void {\r\n const password = changes['passwordToCheck'].currentValue;\r\n this.setBarColors(5, '#DDD');\r\n if (password) {\r\n const strength = this.measureStrength(password);\r\n const c = this.getColor(strength);\r\n this.setBarColors(c.idx, c.col);\r\n this.strengthChange.emit(strength);\r\n }\r\n }\r\n\r\n private setBarColors(count: number, col: string) {\r\n for (let n = 0; n < count; n++) {\r\n this.bars[n] = col;\r\n }\r\n }\r\n}\r\n","<div id=\"strength\">\r\n <small>strength:</small>\r\n <ul id=\"strengthBar\">\r\n <li class=\"point\" [style.background-color]=\"bars[0]\"></li>\r\n <li class=\"point\" [style.background-color]=\"bars[1]\"></li>\r\n <li class=\"point\" [style.background-color]=\"bars[2]\"></li>\r\n <li class=\"point\" [style.background-color]=\"bars[3]\"></li>\r\n <li class=\"point\" [style.background-color]=\"bars[4]\"></li>\r\n </ul>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport {\r\n Validators,\r\n AbstractControl,\r\n ValidationErrors,\r\n FormGroup,\r\n FormControl,\r\n FormBuilder,\r\n} from '@angular/forms';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Observable } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport {\r\n AuthJwtAccountService,\r\n ExistResult,\r\n RegistrationModel,\r\n} from '../../services/auth-jwt-account.service';\r\nimport { PasswordValidators } from '../../validators/password.validators';\r\nimport { UserListRepository } from '../state/user-list.repository';\r\n\r\n@Component({\r\n selector: 'auth-jwt-registration',\r\n templateUrl: './auth-jwt-registration.component.html',\r\n styleUrls: ['./auth-jwt-registration.component.css'],\r\n})\r\nexport class AuthJwtRegistrationComponent {\r\n public busy: boolean | undefined;\r\n // form\r\n public form: FormGroup;\r\n public email: FormControl<string>;\r\n public name: FormControl<string>;\r\n public firstName: FormControl<string>;\r\n public lastName: FormControl<string>;\r\n public password: FormControl<string>;\r\n public confirmPassword: FormControl<string>;\r\n\r\n /**\r\n * True if the registration should be confirmed automatically.\r\n */\r\n @Input()\r\n public autoConfirm?: boolean;\r\n\r\n /**\r\n * Emitted when a user was successfully registered. Usually\r\n * you should handle this to move away from the registration\r\n * page.\r\n */\r\n @Output()\r\n public registered: EventEmitter<any>;\r\n\r\n public hide = true;\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n private _snackbar: MatSnackBar,\r\n private _accountService: AuthJwtAccountService,\r\n private _userRepository: UserListRepository\r\n ) {\r\n this.registered = new EventEmitter<any>();\r\n // form\r\n this.email = formBuilder.control('', {\r\n validators: [Validators.required, Validators.email],\r\n asyncValidators: this.getUniqueEmailValidator(this._accountService).bind(\r\n this\r\n ),\r\n nonNullable: true,\r\n });\r\n\r\n this.name = formBuilder.control('', {\r\n validators: Validators.required,\r\n asyncValidators: this.getUniqueNameValidator(this._accountService).bind(\r\n this\r\n ),\r\n nonNullable: true,\r\n });\r\n\r\n this.firstName = formBuilder.control('', {\r\n validators: [Validators.required, Validators.maxLength(50)],\r\n nonNullable: true,\r\n });\r\n this.lastName = formBuilder.control('', {\r\n validators: [Validators.required, Validators.maxLength(50)],\r\n nonNullable: true,\r\n });\r\n\r\n // http://stackoverflow.com/questions/35474991/angular-2-form-validating-for-repeat-password\r\n this.password = formBuilder.control('', {\r\n validators: [Validators.required, PasswordValidators.standard()],\r\n nonNullable: true,\r\n });\r\n this.confirmPassword = formBuilder.control('', {\r\n validators: Validators.required,\r\n nonNullable: true,\r\n });\r\n\r\n this.form = formBuilder.group(\r\n {\r\n email: this.email,\r\n name: this.name,\r\n firstName: this.firstName,\r\n lastName: this.lastName,\r\n password: this.password,\r\n confirmPassword: this.confirmPassword,\r\n },\r\n {\r\n validators: [\r\n PasswordValidators.areEqual('password', 'confirmPassword'),\r\n ],\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Creates a unique name validator. There is no dependency injection at this level,\r\n * but we can use closures. As a matter of fact, we have access to the service instance\r\n * from the component where we register validators. So we will implement a function\r\n * that will accept the service as parameter, and create the actual validation function.\r\n * This function will have access to the service when called during the validation process.\r\n * See http://restlet.com/blog/2016/02/17/implementing-angular2-forms-beyond-basics-part-2/.\r\n */\r\n private getUniqueNameValidator(service: AuthJwtAccountService) {\r\n return (\r\n control: AbstractControl\r\n ):\r\n | Promise<ValidationErrors | null>\r\n | Observable<ValidationErrors | null> => {\r\n return new Promise((resolve, reject) => {\r\n // avoid checking if empty\r\n if (!control.value) {\r\n resolve(null);\r\n } else {\r\n service.isNameRegistered(control.value).subscribe({\r\n next: (data: ExistResult) => {\r\n if (!data.isExisting) {\r\n resolve(null);\r\n } else {\r\n resolve({ uniqueName: true });\r\n }\r\n },\r\n error: (error) => {\r\n console.error(\r\n 'Unique name validator error' +\r\n (error ? JSON.stringify(error) : '')\r\n );\r\n resolve({ uniqueName: true });\r\n },\r\n });\r\n }\r\n });\r\n };\r\n }\r\n\r\n private getUniqueEmailValidator(service: AuthJwtAccountService) {\r\n return (\r\n control: AbstractControl\r\n ):\r\n | Promise<ValidationErrors | null>\r\n | Observable<ValidationErrors | null> => {\r\n return new Promise((resolve, reject) => {\r\n // avoid checking if empty\r\n if (!control.value) {\r\n resolve(null);\r\n } else {\r\n service.isEmailRegistered(control.value).subscribe({\r\n next: (data: ExistResult) => {\r\n if (!data.isExisting) {\r\n resolve(null);\r\n } else {\r\n resolve({ uniqueEmail: true });\r\n }\r\n },\r\n error: (error) => {\r\n console.error(\r\n 'Unique email validator error' +\r\n (error ? JSON.stringify(error) : '')\r\n );\r\n resolve({ uniqueEmail: true });\r\n },\r\n });\r\n }\r\n });\r\n };\r\n }\r\n\r\n public onSubmit(): void {\r\n if (\r\n !this.form.valid ||\r\n this.busy ||\r\n this.name.pending ||\r\n this.email.pending\r\n ) {\r\n return;\r\n }\r\n\r\n const model: RegistrationModel = {\r\n email: this.email.value,\r\n name: this.name.value,\r\n firstName: this.firstName.value,\r\n lastName: this.lastName.value,\r\n password: this.password.value,\r\n };\r\n\r\n this.busy = true;\r\n this._accountService\r\n .register(model, this.autoConfirm)\r\n .pipe(take(1))\r\n .subscribe({\r\n next: () => {\r\n this.busy = false;\r\n this._snackbar.open(\r\n $localize`:auth-jwt-admin:Registration succeeded`,\r\n 'OK'\r\n );\r\n this._userRepository.reset();\r\n this.registered.emit();\r\n },\r\n error: (error) => {\r\n this.busy = false;\r\n console.error(\r\n 'Registration error' + (error ? JSON.stringify(error) : '')\r\n );\r\n this._snackbar.open(\r\n $localize`:auth-jwt-admin:Registration error`,\r\n 'OK'\r\n );\r\n },\r\n });\r\n }\r\n}\r\n","<div>\n <form role=\"form\" [formGroup]=\"form\" (submit)=\"onSubmit()\">\n <fieldset>\n <legend i18n=\"auth-jwt-admin\">registration</legend>\n <!-- email -->\n <div class=\"form-row\">\n <mat-form-field>\n <mat-label i18n>email</mat-label>\n <input\n matInput\n type=\"email\"\n id=\"email\"\n maxlength=\"256\"\n required\n autofocus\n spellcheck=\"false\"\n [formControl]=\"email\"\n />\n @if ( $any(email).errors?.required && (email.dirty || email.touched) )\n {\n <mat-error i18n=\"auth-jwt-admin\">email required</mat-error>\n } @if ($any(email).errors?.email && (email.dirty || email.touched)) {\n <mat-error i18n=\"auth-jwt-admin\">invalid email</mat-error>\n } @if ( $any(email).errors?.uniqueEmail && (email.dirty ||\n email.touched) ) {\n <mat-error i18n=\"auth-jwt-admin\">email already registered</mat-error>\n }\n </mat-form-field>\n @if (email.pending) {\n <mat-icon>hourglass</mat-icon>\n }\n </div>\n\n <!-- name -->\n <div class=\"form-row\">\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">username</mat-label>\n <input\n matInput\n type=\"text\"\n id=\"name\"\n maxlength=\"50\"\n required\n pattern=\"^[a-zA-Z][a-zA-Z0-9]{2,49}$\"\n spellcheck=\"false\"\n [formControl]=\"name\"\n />\n @if ($any(name).errors?.required && (name.dirty || name.touched)) {\n <mat-error i18n=\"auth-jwt-admin\">username required</mat-error>\n } @if ($any(name).errors?.pattern && (name.dirty || name.touched)) {\n <mat-error i18n=\"auth-jwt-admin\">invalid username</mat-error>\n } @if ( $any(name).errors?.uniqueName && (name.dirty || name.touched)\n ) {\n <mat-error i18n=\"auth-jwt-admin\"\n >username already registered</mat-error\n >\n }\n </mat-form-field>\n @if (name.pending) {\n <mat-icon>hourglass</mat-icon>\n }\n </div>\n\n <!-- first name -->\n <div>\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">first name</mat-label>\n <input\n matInput\n type=\"text\"\n id=\"firstName\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n [formControl]=\"firstName\"\n />\n @if ( firstName.hasError('required') && (firstName.dirty ||\n firstName.touched) ) {\n <mat-error i18n=\"auth-jwt-admin\" class=\"text-danger small\">\n first name required\n </mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- last name -->\n <div>\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">last name</mat-label>\n <input\n matInput\n type=\"text\"\n id=\"lastName\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n [formControl]=\"lastName\"\n />\n @if ( lastName.hasError('required') && (lastName.dirty ||\n lastName.touched) ) {\n <mat-error i18n=\"auth-jwt-admin\" class=\"text-danger small\">\n last name required\n </mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- <div [formGroup]=\"passwords\"> -->\n <!-- password -->\n <div>\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">password</mat-label>\n <input\n matInput\n [type]=\"hide ? 'password' : 'text'\"\n name=\"password\"\n autocomplete=\"new-password\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n [formControl]=\"password\"\n />\n <button\n type=\"button\"\n mat-icon-button\n matSuffix\n (click)=\"hide = !hide\"\n i18n-aria-label=\"auth-jwt-login\"\n aria-label=\"Hide password\"\n [attr.aria-pressed]=\"hide\"\n >\n <mat-icon>{{ hide ? \"visibility_off\" : \"visibility\" }}</mat-icon>\n </button>\n <auth-jwt-password-strength-bar [passwordToCheck]=\"password.value\">\n </auth-jwt-password-strength-bar>\n @if ( $any(password).errors?.required && (password.dirty ||\n password.touched) ) {\n <mat-error i18n=\"auth-jwt-admin\">password required</mat-error>\n } @if ( $any(password).errors?.passwordtooshort && (password.dirty ||\n password.touched) ) {\n <mat-error i18n=\"auth-jwt-admin\">at least 8 characters</mat-error>\n } @if ( $any(password).errors?.noupperinpassword && (password.dirty ||\n password.touched) ) {\n <mat-error i18n=\"auth-jwt-admin\"\n >at least 1 uppercase letter</mat-error\n >\n } @if ( $any(password).errors?.nolowerinpassword && (password.dirty ||\n password.touched) ) {\n <mat-error i18n=\"auth-jwt-admin\"\n >at least 1 lowercase letter</mat-error\n >\n } @if ( $any(password).errors?.nosymbolinpassword && (password.dirty\n || password.touched) ) {\n <mat-error i18n=\"auth-jwt-admin\"\n >at least 1 punctuation/symbol</mat-error\n >\n }\n </mat-form-field>\n </div>\n\n <!-- confirm password -->\n <div>\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">confirm password</mat-label>\n <input\n matInput\n [type]=\"hide ? 'password' : 'text'\"\n name=\"confirmPassword\"\n maxlength=\"50\"\n required\n spellcheck=\"false\"\n [formControl]=\"confirmPassword\"\n />\n </mat-form-field>\n </div>\n @if (form.errors?.areequal && confirmPassword.touched) {\n <div i18n=\"auth-jwt-admin\" style=\"color: red\">\n password differs from confirmation password\n </div>\n }\n\n <button\n i18n=\"auth-jwt-admin\"\n mat-flat-button\n type=\"submit\"\n color=\"primary\"\n class=\"mat-primary\"\n [disabled]=\"\n form.invalid || form.pristine || busy || name.pending || email.pending\n \"\n >\n register\n </button>\n @if (busy) {\n <mat-progress-spinner diameter=\"20\"></mat-progress-spinner>\n }\n </fieldset>\n </form>\n\n <details>\n <summary i18n=\"auth-jwt-admin\">Hints</summary>\n <div class=\"info\">\n <p i18n=\"auth-jwt-admin\">\n To register a new user, you must provide his email address, choose a\n password, and choose a username, which must be unique (you will be\n notified if another user has already taken that name). The username must\n include only letters/digits, start with a letter, and be no shorter than\n 3 characters, nor longer than 50.\n </p>\n <p i18n=\"auth-jwt-admin\">\n To promote a decent security level, the password must include at least 8\n characters, uppercase and lowercase letters, digits, and punctuation\n (like dashes, stops, parentheses, etc.).\n </p>\n <p i18n=\"auth-jwt-admin\">\n Once registered, if messaging is enabled on the server side the user\n will receive an email message to the email address you specified; he\n will have to click on the provided link to complete the registration\n process. Otherwise, you should edit the newly created user and confirm\n the email registration.\n </p>\n </div>\n </details>\n</div>\n","import { Component, Input, Output, OnInit, EventEmitter } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { UserFilter } from '../../services/auth-jwt-account.service';\r\n\r\n@Component({\r\n selector: 'auth-jwt-user-filter',\r\n templateUrl: './user-filter.component.html',\r\n styleUrls: ['./user-filter.component.css'],\r\n})\r\nexport class UserFilterComponent {\r\n private _filter?: UserFilter;\r\n\r\n @Input()\r\n public get filter(): UserFilter | null | undefined {\r\n return this._filter;\r\n }\r\n public set filter(value: UserFilter | null | undefined) {\r\n if (this._filter === value) {\r\n return;\r\n }\r\n this._filter = value || undefined;\r\n this.updateForm(this._filter);\r\n }\r\n\r\n @Input()\r\n public disabled: boolean | undefined;\r\n\r\n /**\r\n * Event emitted when the filter changes.\r\n */\r\n @Output()\r\n public filterChange: EventEmitter<UserFilter>;\r\n\r\n public name: FormControl<string | null>;\r\n public form: FormGroup;\r\n\r\n constructor(formBuilder: FormBuilder) {\r\n // form\r\n this.name = formBuilder.control<string | null>(null);\r\n this.form = formBuilder.group({\r\n name: this.name,\r\n });\r\n // event\r\n this.filterChange = new EventEmitter<UserFilter>();\r\n }\r\n\r\n private updateForm(filter?: UserFilter): void {\r\n if (!filter) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.name.setValue(filter.name || null);\r\n this.form.markAsPristine();\r\n }\r\n\r\n private getFilter(): UserFilter {\r\n return {\r\n name: this.name.value?.trim(),\r\n };\r\n }\r\n\r\n public reset(): void {\r\n this.form.reset();\r\n this._filter = {};\r\n this.filterChange.emit(this._filter);\r\n }\r\n\r\n public apply(): void {\r\n this._filter = this.getFilter();\r\n this.filterChange.emit(this._filter);\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"apply()\" ng-disabled=\"disabled\">\r\n <div class=\"form-row\">\r\n <mat-form-field>\r\n <mat-label i18n=\"auth-jwt-admin\">name or ID</mat-label>\r\n <input matInput [formControl]=\"name\" />\r\n <button\r\n mat-icon-button\r\n matSuffix\r\n type=\"button\"\r\n (click)=\"reset()\"\r\n color=\"warn\"\r\n class=\"mat-warn\"\r\n i18n-matTooltip=\"auth-jwt-admin\"\r\n matTooltip=\"Reset filters\"\r\n [disabled]=\"disabled\"\r\n >\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <button\r\n id=\"apply\"\r\n type=\"submit\"\r\n mat-icon-button\r\n color=\"primary\"\r\n class=\"mat-primary\"\r\n [disabled]=\"disabled\"\r\n i18n-matTooltip=\"auth-jwt-admin\"\r\n matTooltip=\"Apply filters\"\r\n >\r\n <mat-icon>check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\r\nimport {\r\n UntypedFormGroup,\r\n UntypedFormControl,\r\n UntypedFormBuilder,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { AuthJwtService, User } from '@myrmidon/auth-jwt-login';\r\n\r\n@Component({\r\n selector: 'auth-jwt-user-editor',\r\n templateUrl: './user-editor.component.html',\r\n styleUrls: ['./user-editor.component.css'],\r\n})\r\nexport class UserEditorComponent implements OnInit {\r\n private _user: User | undefined;\r\n\r\n public email: UntypedFormControl;\r\n public emailConfirmed: UntypedFormControl;\r\n public lockoutEnabled: UntypedFormControl;\r\n public firstName: UntypedFormControl;\r\n public lastName: UntypedFormControl;\r\n public roles: UntypedFormControl;\r\n public form: UntypedFormGroup;\r\n\r\n public unlocked: boolean | undefined;\r\n\r\n @Input() public set user(value: User | undefined) {\r\n this._user = value;\r\n this.updateForm(value);\r\n }\r\n public get user(): User | undefined {\r\n return this._user;\r\n }\r\n\r\n @Output() userChange: EventEmitter<User>;\r\n @Output() editorClose: EventEmitter<any>;\r\n\r\n constructor(formBuilder: UntypedFormBuilder, private _authService: AuthJwtService) {\r\n // events\r\n this.userChange = new EventEmitter<User>();\r\n this.editorClose = new EventEmitter<any>();\r\n // form\r\n this.email = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.email,\r\n ]);\r\n this.emailConfirmed = formBuilder.control(false);\r\n this.lockoutEnabled = formBuilder.control(false);\r\n this.firstName = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(50),\r\n ]);\r\n this.lastName = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(50),\r\n ]);\r\n this.roles = formBuilder.control(null, Validators.maxLength(200));\r\n\r\n this.form = formBuilder.group({\r\n email: this.email,\r\n emailConfirmed: this.emailConfirmed,\r\n lockoutEnabled: this.lockoutEnabled,\r\n firstName: this.firstName,\r\n lastName: this.lastName,\r\n roles: this.roles,\r\n });\r\n }\r\n\r\n ngOnInit(): void {}\r\n\r\n private updateForm(user: User | undefined): void {\r\n if (!user) {\r\n this.form.reset();\r\n } else {\r\n this.email.setValue(user.email);\r\n this.emailConfirmed.setValue(user.emailConfirmed);\r\n this.lockoutEnabled.setValue(user.lockoutEnabled);\r\n this.firstName.setValue(user.firstName);\r\n this.lastName.setValue(user.lastName);\r\n if (user.roles?.length > 0) {\r\n this.roles.setValue(user.roles.join(' '));\r\n } else {\r\n this.roles.setValue(null);\r\n }\r\n }\r\n }\r\n\r\n private getUserFromForm(): User {\r\n return {\r\n userName: this._user?.userName || '',\r\n email: this.email.value,\r\n emailConfirmed: this.emailConfirmed.value,\r\n lockoutEnabled: this.lockoutEnabled.value,\r\n firstName: this.firstName.value,\r\n lastName: this.lastName.value,\r\n roles: this.roles.value\r\n ? this.roles.value.split(' ').filter((s: string) => s)\r\n : [],\r\n };\r\n }\r\n\r\n public endLockout(): void {\r\n if (this.unlocked) {\r\n return;\r\n }\r\n this._user!.lockoutEnd = this._authService.getUTCDate();\r\n this.unlocked = true;\r\n }\r\n\r\n public close(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this.userChange.emit(this.getUserFromForm());\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <div class=\"form-row\">\n <!-- email -->\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">email</mat-label>\n <input type=\"text\" matInput [formControl]=\"email\" />\n @if (email.hasError('required') && (email.dirty || email.touched)) {\n <mat-error i18n=\"auth-jwt-admin\"> email address required </mat-error>\n } @if (email.hasError('pattern') && (email.dirty || email.touched)) {\n <mat-error i18n=\"auth-jwt-admin\"> invalid email address </mat-error>\n }\n </mat-form-field>\n\n <!-- emailConfirmed -->\n <mat-checkbox [formControl]=\"emailConfirmed\" i18n=\"auth-jwt-admin\"\n >email address confirmed</mat-checkbox\n >\n </div>\n\n <!-- lockoutEnabled -->\n <div class=\"form-row\">\n <mat-checkbox [formControl]=\"lockoutEnabled\" i18n=\"auth-jwt-admin\"\n >lockout enabled</mat-checkbox\n >\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n class=\"mat-primary\"\n (click)=\"endLockout()\"\n [disabled]=\"unlocked\"\n i18n-matTooltip=\"auth-jwt-admin\"\n matTooltip=\"Unlock this user if locked\"\n >\n <mat-icon>lock_open</mat-icon>\n </button>\n </div>\n\n <div class=\"form-row\">\n <!-- firstName -->\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">first name</mat-label>\n <input type=\"text\" matInput [formControl]=\"firstName\" />\n @if ( firstName.hasError('required') && (firstName.dirty ||\n firstName.touched) ) {\n <mat-error i18n=\"auth-jwt-admin\"> first name required </mat-error>\n } @if ( firstName.hasError('maxlength') && (firstName.dirty ||\n firstName.touched) ) {\n <mat-error i18n=\"auth-jwt-admin\"> first name too long </mat-error>\n }\n </mat-form-field>\n\n <!-- lastName -->\n <mat-form-field>\n <mat-label i18n=\"auth-jwt-admin\">last name</mat-label>\n <input type=\"text\" matInput [formControl]=\"lastName\" />\n @if ( lastName.hasError('required') && (lastName.dirty ||\n lastName.touched) ) {\n <mat-error i18n=\"auth-jwt-admin\"> last name required </mat-error>\n } @if ( lastName.hasError('maxlength') && (lastName.dirty ||\n lastName.touched) ) {\n <mat-error i18n=\"auth-jwt-admin\"> last name too long </mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- roles -->\n <div>\n <mat-form-field style=\"width: 16em\">\n <mat-label i18n=\"auth-jwt-admin\">roles</mat-label>\n <input type=\"text\" matInput [formControl]=\"roles\" />\n @if (roles.hasError('maxlength') && (roles.dirty || roles.touched)) {\n <mat-error i18n=\"auth-jwt-admin\"> too long </mat-error>\n }\n <mat-hint i18n>roles (separated by space)</mat-hint>\n </mat-form-field>\n </div>\n\n <!-- buttons -->\n <br />\n <div>\n <button\n type=\"button\"\n mat-icon-button\n color=\"warn\"\n class=\"mat-warn\"\n i18n-matTooltip=\"auth-jwt-admin\"\n matTooltip=\"Close\"\n (click)=\"close()\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n <button\n type=\"submit\"\n mat-icon-button\n color=\"primary\"\n class=\"mat-primary\"\n [disabled]=\"form.invalid\"\n i18n-matTooltip=\"auth-jwt-admin\"\n matTooltip=\"Save user\"\n >\n <mat-icon>check_circle</mat-icon>\n </button>\n </div>\n</form>\n","import { Component } from '@angular/core';\r\nimport { PageEvent } from '@angular/material/paginator';\r\nimport { Observable } from 'rxjs';\r\nimport '@angular/localize/init';\r\n\r\nimport { GravatarService, User } from '@myrmidon/auth-jwt-login';\r\nimport { DataPage } from '@myrmidon/ng-tools';\r\nimport { DialogService } from '@myrmidon/ng-mat-tools';\r\n\r\nimport { UserListRepository } from '../state/user-list.repository';\r\nimport { UserFilter } from '../../services/auth-jwt-account.service';\r\n\r\n@Component({\r\n selector: 'auth-jwt-user-list',\r\n templateUrl: './user-list.component.html',\r\n styleUrls: ['./user-list.component.css'],\r\n})\r\nexport class UserListComponent {\r\n public active$: Observable<User | undefined>;\r\n public loading$: Observable<boolean>;\r\n public filter$: Observable<UserFilter>;\r\n public page$: Observable<DataPage<User>>;\r\n\r\n constructor(\r\n private _repository: UserListRepository,\r\n private _dialogService: DialogService,\r\n private _gravatarService: GravatarService\r\n ) {\r\n this.filter$ = _repository.filter$;\r\n this.page$ = _repository.page$;\r\n this.active$ = _repository.activeUser$;\r\n this.loading$ = _repository.loading$;\r\n }\r\n\r\n public reset(): void {\r\n this._repository.reset();\r\n }\r\n\r\n public onFilterChange(filter: UserFilter): void {\r\n this._repository.setFilter(filter);\r\n }\r\n\r\n public onPageChange(event: PageEvent): void {\r\n this._repository.setPage(event.pageIndex + 1, event.pageSize);\r\n }\r\n\r\n public deleteUser(user: User): void {\r\n this._dialogService\r\n .confirm(\r\n $localize`:auth-jwt-admin:Confirm`,\r\n $localize`:auth-jwt-admin:Delete user ` + user.userName + '?'\r\n )\r\n .subscribe((yes) => {\r\n if (yes) {\r\n this._repository.deleteUser(user.userName);\r\n }\r\n });\r\n }\r\n\r\n public setActiveUser(user: User | null): void {\r\n this._repository.setActiveUser(user);\r\n }\r\n\r\n public resetActiveUser(): void {\r\n this._repository.setActiveUser(null);\r\n }\r\n\r\n public saveActiveUser(user: User): void {\r\n this._repository.updateActiveUser(user);\r\n this._repository.setActiveUser(null);\r\n }\r\n\r\n public onUserEditorClose(): void {\r\n this._repository.setActiveUser(null);\r\n }\r\n\r\n public getGravatarUrl(email: string, size = 80): string | null {\r\n return this._gravatarService.buildGravatarUrl(email, size);\r\n }\r\n}\r\n","<div id=\"container\">\n <div>\n <!-- filters -->\n <div id=\"filters\">\n <auth-jwt-user-filter\n [filter]=\"filter$ | async\"\n (filterChange)=\"onFilterChange($event)\"\n ></auth-jwt-user-filter>\n </div>\n\n <!-- list -->\n @if (page$ | async; as page) {\n <div id=\"list\">\n @if (loading$ | async) {\n <div>\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n </div>\n }\n <table>\n <thead>\n <td></td>\n <td></td>\n <th i18n=\"auth-jwt-admin\">name</th>\n <th i18n=\"auth-jwt-admin\" class=\"noif-lt-md\">first</th>\n <th i18n=\"auth-jwt-admin\" class=\"noif-lt-md\">last</th>\n <th i18n=\"auth-jwt-admin\" class=\"noif-lt-md\">email</th>\n <th i18n=\"auth-jwt-admin\">roles</th>\n <th i18n=\"auth-jwt-admin\" class=\"noif-lt-md\">lock end</th>\n </thead>\n <tbody>\n @for (user of page.items; track user) {\n <tr>\n <td class=\"fit-width\">\n <button\n mat-icon-button\n type=\"button\"\n i18n-matTooltip=\"auth-jwt-admin\"\n matTooltip=\"Edit this user\"\n color=\"primary\"\n class=\"mat-primary\"\n (click)=\"setActiveUser(user)\"\n >\n <mat-icon>mode_edit</mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n i18n-matTooltip=\"auth-jwt-admin\"\n matTooltip=\"Delete this user\"\n color=\"warn\"\n class=\"mat-warn\"\n (click)=\"deleteUser(user)\"\n >\n <mat-icon>remove_circle</mat-icon>\n </button>\n </td>\n <td class=\"fit-width\">\n <img\n alt=\"avatar\"\n [src]=\"getGravatarUrl(user.email, 32)\"\n [alt]=\"user.userName\"\n />\n </td>\n <td>{{ user.userName }}</td>\n <td class=\"noif-lt-md\">{{ user.firstName }}</td>\n <td class=\"noif-lt-md\">{{ user.lastName }}</td>\n <td class=\"noif-lt-md\">\n <a [href]=\"'mailto:' + user.email\">{{ user.email }}</a>\n </td>\n <td>{{ user.roles.join(\" \") }}</td>\n <td class=\"noif-lt-md\">{{ user.lockoutEnd }}</td>\n </tr>\n }\n </tbody>\n </table>\n <!-- paginator -->\n <div class=\"form-row\">\n <button\n type=\"button\"\n mat-icon-button\n color=\"warn\"\n class=\"mat-warn\"\n i18n-matmatTooltip=\"auth-jwt-admin\"\n matTooltip=\"Refresh list\"\n (click)=\"reset()\"\n >\n <mat-icon>autorenew</mat-icon>\n </button>\n <mat-paginator\n [length]=\"page.total\"\n [pageIndex]=\"page.pageNumber - 1\"\n [pageSize]=\"page.pageSize\"\n [pageSizeOptions]=\"[5, 10, 20, 50, 100]\"\n (page)=\"onPageChange($event)\"\n [showFirstLastButtons]=\"true\"\n ></mat-paginator>\n </div>\n </div>\n }\n </div>\n\n <!-- editor -->\n <mat-expansion-panel\n id=\"editor\"\n [expanded]=\"active$ | async\"\n [disabled]=\"!(active$ | async)\"\n >\n @if (active$ | async; as active) {\n <div>\n <fieldset>\n <legend>{{ active.userName }}</legend>\n <auth-jwt-user-editor\n [user]=\"active\"\n (userChange)=\"saveActiveUser($event)\"\n (editorClose)=\"resetActiveUser()\"\n ></auth-jwt-user-editor>\n </fieldset>\n </div>\n }\n </mat-expansion-panel>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { AuthJwtLoginModule } from '@myrmidon/auth-jwt-login';\nimport { NgToolsModule } from '@myrmidon/ng-tools';\n\nimport { AuthJwtRegistrationComponent } from './components/auth-jwt-registration/auth-jwt-registration.component';\nimport { PasswordStrengthBarComponent } from './components/password-strength-bar/password-strength-bar.component';\nimport { UserFilterComponent } from './components/user-filter/user-filter.component';\nimport { UserListComponent } from './components/user-list/user-list.component';\nimport { UserEditorComponent } from './components/user-editor/user-editor.component';\n\n@NgModule({\n declarations: [\n AuthJwtRegistrationComponent,\n PasswordStrengthBarComponent,\n UserFilterComponent,\n UserListComponent,\n UserEditorComponent,\n ],\n exports: [\n AuthJwtRegistrationComponent,\n PasswordStrengthBarComponent,\n UserFilterComponent,\n UserListComponent,\n ],\n imports: [\n CommonModule,\n FormsModule,\n RouterModule,\n ReactiveFormsModule,\n // material\n MatButtonModule,\n MatCardModule,\n MatCheckboxModule,\n MatDialogModule,\n MatExpansionModule,\n MatIconModule,\n MatInputModule,\n MatPaginatorModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n MatSnackBarModule,\n MatTooltipModule,\n AuthJwtLoginModule,\n NgToolsModule,\n ],\n})\nexport class AuthJwtAdminModule {}\n","/*\r\n * Public API Surface of auth-jwt-admin\r\n */\r\n\r\nexport * from './lib/components/auth-jwt-registration/auth-jwt-registration.component';\r\nexport * from './lib/components/password-strength-bar/password-strength-bar.component';\r\nexport * from './lib/components/user-filter/user-filter.component';\r\nexport * from './lib/components/user-list/user-list.component';\r\nexport * from './lib/components/state/user-list.repository';\r\nexport * from './lib/services/auth-jwt-account.service';\r\nexport * from './lib/validators/password.validators';\r\nexport * from './lib/auth-jwt-admin.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AuthJwtAccountService","i1","i2","i3.AuthJwtAccountService","i4.UserListRepository","i10.PasswordStrengthBarComponent","i3","i4","i5","i6","i7","i8","i1.UserListRepository","i9","i10.UserFilterComponent","i11.UserEditorComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAQa,kBAAkB,CAAA;;AAEtB,IAAA,OAAO,QAAQ,GAAA;QACpB,OAAO,CAAC,OAAwB,KAA6B;AAC3D,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAClB,gBAAA,OAAO,IAAI,CAAC;aACb;YAED,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5B,OAAO;AACL,oBAAA,gBAAgB,EAAE,IAAI;iBACvB,CAAC;aACH;YAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACpC,OAAO;AACL,oBAAA,iBAAiB,EAAE,IAAI;iBACxB,CAAC;aACH;YAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACpC,OAAO;AACL,oBAAA,iBAAiB,EAAE,IAAI;iBACxB,CAAC;aACH;YAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACpC,OAAO;AACL,oBAAA,iBAAiB,EAAE,IAAI;iBACxB,CAAC;aACH;YAED,IAAI,CAAC,2CAA2C,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACpE,OAAO;AACL,oBAAA,kBAAkB,EAAE,IAAI;iBACzB,CAAC;aACH;AAED,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC;KACH;AAEM,IAAA,OAAO,QAAQ,CACpB,WAAmB,EACnB,gBAAwB,EAAA;QAExB,OAAO,CAAC,OAAwB,KAA6B;YAC3D,MAAM,CAAC,GAAG,OAAuC,CAAC;YAClD,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAClC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AACvC,YAAA,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;AACxB,kBAAE;AACE,oBAAA,QAAQ,EAAE,IAAI;AACf,iBAAA;kBACD,IAAI,CAAC;AACX,SAAC,CAAC;KACH;AACF;;MCVY,qBAAqB,CAAA;AAChC,IAAA,WAAA,CACU,KAAiB,EACjB,MAAoB,EACpB,IAAgB,EAAA;QAFhB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAY;QACjB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAc;QACpB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;KACtB;AAEJ;;;;AAIG;AACI,IAAA,iBAAiB,CAAC,KAAa,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YACrB,uBAAuB;AACvB,YAAA,kBAAkB,CAAC,KAAK,CAAC,CAC5B,CAAC;KACH;AAED;;;;;;AAMG;AACI,IAAA,gBAAgB,CAAC,IAAY,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YACrB,sBAAsB;AACtB,YAAA,kBAAkB,CAAC,IAAI,CAAC,CAC3B,CAAC;KACH;AAED;;;;;AAKG;AACI,IAAA,QAAQ,CACb,YAA+B,EAC/B,SAAS,GAAG,KAAK,EAAA;AAEjB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CACpB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YACrB,mBAAmB;AACnB,aAAC,SAAS,GAAG,iBAAiB,GAAG,EAAE,CAAC,EACtC,YAAY,CACb,CAAC;KACH;AAED;;;AAGG;AACI,IAAA,kBAAkB,CAAC,KAAa,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YACrB,yBAAyB;YACzB,kBAAkB,CAAC,KAAK,CAAC;;SAE5B,CAAC;KACH;AAED;;;AAGG;AACI,IAAA,oBAAoB,CAAC,KAAa,EAAA;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CACpB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,gCAAgC,EAC1D,EAAE,KAAK,EAAE,CACV,CAAC;KACH;AAEO,IAAA,kBAAkB,CAAC,QAAoC,EAAA;QAC7D,OAAQ,QAAgC,CAAC,IAAI;AAC3C,cAAE;gBACE,GAAK,QAAgC,CAAC,IAAa;AACnD,gBAAA,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,EAAE;AAC5B,aAAA;cACA,QAAiB,CAAC;KACxB;IAEM,WAAW,GAAA;QAChB,OAAO,IAAI,CAAC,KAAK;aACd,GAAG,CACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,OAAO,EACjC;YACE,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC;SAChD,CACF;aACA,IAAI,CACH,KAAK,CAAC,CAAC,CAAC,EACR,GAAG,CAAC,CAAC,QAA8C,KAAI;YACrD,OAAO;AACL,gBAAA,GAAG,QAAQ;gBACX,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC;aACnD,CAAC;SACH,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CACpC,CAAC;KACL;IAEM,QAAQ,CACb,MAAkB,EAClB,UAAU,GAAG,CAAC,EACd,QAAQ,GAAG,EAAE,EAAA;AAEb,QAAA,IAAI,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;AAClC,QAAA,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;AACjE,QAAA,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7D,QAAA,IAAI,MAAM,CAAC,IAAI,EAAE;YACf,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;SAClD;QAED,OAAO,IAAI,CAAC,KAAK;aACd,GAAG,CAAgC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,OAAO,EAAE;AACrE,YAAA,MAAM,EAAE,UAAU;SACnB,CAAC;aACD,IAAI,CACH,KAAK,CAAC,CAAC,CAAC,EACR,GAAG,CAAC,CAAC,QAAuC,KAAI;YAC9C,OAAO;AACL,gBAAA,GAAG,QAAQ;gBACX,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC;aACnD,CAAC;SACH,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CACpC,CAAC;KACL;AACD;;;;AAIG;AACI,IAAA,WAAW,CAAC,UAAkB,EAAE,KAAK,GAAG,EAAE,EAAA;AAC/C,QAAA,IAAI,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QAClC,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AAC/C,QAAA,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1D,IAAI,UAAU,EAAE;YACd,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;SACjD;QACD,MAAM,OAAO,GACX,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;AAC1B,cAAE;AACE,gBAAA,MAAM,EAAE,UAAU;AACnB,aAAA;cACD,EAAE,CAAC;QAET,OAAO,IAAI,CAAC,KAAK;AACd,aAAA,GAAG,CAAwB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC;aACtE,IAAI,CACH,KAAK,CAAC,CAAC,CAAC,EACR,GAAG,CAAC,CAAC,KAA4B,KAAI;YACnC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;SAC3C,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CACpC,CAAC;KACL;AAED;;;AAGG;AACI,IAAA,iBAAiB,CAAC,KAAe,EAAA;AACtC,QAAA,IAAI,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QAClC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SACvD;QACD,MAAM,OAAO,GACX,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;AAC1B,cAAE;AACE,gBAAA,MAAM,EAAE,UAAU;AACnB,aAAA;cACD,EAAE,CAAC;QAET,OAAO,IAAI,CAAC,KAAK;AACd,aAAA,GAAG,CACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,kBAAkB,EAC5C,OAAO,CACR;aACA,IAAI,CACH,KAAK,CAAC,CAAC,CAAC,EACR,GAAG,CAAC,CAAC,KAA4B,KAAI;YACnC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;SAC3C,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CACpC,CAAC;KACL;AAED;;;AAGG;AACI,IAAA,OAAO,CAAC,IAAY,EAAA;QACzB,OAAO,IAAI,CAAC,KAAK;AACd,aAAA,GAAG,CAAsB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC;aACnE,IAAI,CACH,KAAK,CAAC,CAAC,CAAC,EACR,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAC5B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CACpC,CAAC;KACL;AAED;;;AAGG;AACI,IAAA,UAAU,CAAC,IAAU,EAAA;QAC1B,OAAO,IAAI,CAAC,KAAK;aACd,GAAG,CACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YACrB,OAAO;AACP,aAAC,IAAI,CAAC,cAAc,GAAG,iBAAiB,GAAG,EAAE,CAAC,EAChD,IAAI,CACL;aACA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;KAC9C;AAED;;;AAGG;AACI,IAAA,aAAa,CAAC,KAAa,EAAA;QAChC,OAAO,IAAI,CAAC,KAAK;aACd,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,gCAAgC,EAAE;AAChE,YAAA,KAAK,EAAE,KAAK;SACb,CAAC;aACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;KAC9C;AAED;;;AAGG;AACI,IAAA,cAAc,CAAC,MAAsB,EAAA;QAC1C,OAAO,IAAI,CAAC,KAAK;AACd,aAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,yBAAyB,EAAE,MAAM,CAAC;aACjE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;KAC9C;AAED;;;AAGG;AACI,IAAA,UAAU,CAAC,IAAY,EAAA;QAC5B,OAAO,IAAI,CAAC,KAAK;AACd,aAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC;aACpD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;KAC9C;8GA5PU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCtCY,kBAAkB,CAAA;AAQ7B,IAAA,IAAW,WAAW,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;KACzC;AACD,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;KAC5B;AACD,IAAA,IAAW,KAAK,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;KAC1B;AACD,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;KACtC;AACD,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;KACrC;AAED,IAAA,WAAA,CAAoB,WAAkC,EAAA;QAAlC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAuB;QACpD,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAmB,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,CAAmB,SAAS,CAAC,CAAC;QACrE,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;KACrB;AAEM,IAAA,QAAQ,CACb,UAAkB,EAClB,QAAgB,EAChB,MAAkB,EAAA;AAElB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,IAAI,CACjE,GAAG,CAAC;YACF,IAAI,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;YACtC,KAAK,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AACxC,SAAA,CAAC,CACH,CAAC;KACH;AAEM,IAAA,MAAM,KAAK,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;SAC3B;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,KAAK,CAAC;SACb;gBAAS;AACR,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC5B;KACF;IAEM,MAAM,SAAS,CAAC,MAAkB,EAAA;AACvC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SACrC;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,KAAK,CAAC;SACb;gBAAS;AACR,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC5B;KACF;IAEM,SAAS,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;KAChC;AAEM,IAAA,MAAM,OAAO,CAAC,UAAkB,EAAE,QAAgB,EAAA;AACvD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;SACjD;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,KAAK,CAAC;SACb;gBAAS;AACR,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC5B;KACF;AAEM,IAAA,aAAa,CAAC,IAAiB,EAAA;QACpC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;KAC3C;AAEM,IAAA,gBAAgB,CAAC,IAAU,EAAA;QAChC,MAAM,OAAO,GAAqB,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AAChE,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEzB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;AAC1C,gBAAA,IAAI,EAAE,CAAC,CAAC,KAAI;AACV,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,oBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBACpB,OAAO,CAAC,IAAI,CAAC,CAAC;iBACf;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,oBAAA,OAAO,CAAC,KAAK,CACX,uBAAuB,IAAI,CAAC,QAAQ,CAAI,EAAA,CAAA;wBACtC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,CAC9B,CAAC;oBACF,OAAO,CAAC,KAAK,CAAC,CAAC;iBAChB;AACF,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC;KAChB;AAEM,IAAA,UAAU,CAAC,IAAY,EAAA;QAC5B,MAAM,OAAO,GAAqB,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YAChE,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,EAAE;AAC9C,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACnC;AAED,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEzB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;AAC1C,gBAAA,IAAI,EAAE,CAAC,CAAC,KAAI;AACV,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,oBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBACpB,OAAO,CAAC,IAAI,CAAC,CAAC;iBACf;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,oBAAA,OAAO,CAAC,KAAK,CACX,CAAuB,oBAAA,EAAA,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,CAC9D,CAAC;oBACF,MAAM,CAAC,KAAK,CAAC,CAAC;iBACf;AACF,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC;KAChB;8GAtIU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;MCDrB,4BAA4B,CAAA;AASvC,IAAA,WAAA,GAAA;AARQ,QAAA,IAAA,CAAA,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAIjD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAU,CAAC;AAKpD,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,YAAY,EAAU,CAAC;AACjD,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;KAChB;AAEO,IAAA,eAAe,CAAC,CAAS,EAAA;QAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,QAAA,MAAM,KAAK,GAAG,uBAAuB,CAAC;QAEtC,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE9B,MAAM,KAAK,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE7D,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,aAAa,IAAI,IAAI,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;SACxC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,QAAA,KAAK,IAAI,aAAa,GAAG,EAAE,CAAC;;QAG5B,KAAK,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;;AAGpD,QAAA,KAAK,GAAG,aAAa,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;AAC1D,QAAA,KAAK,GAAG,aAAa,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;AAC1D,QAAA,KAAK,GAAG,aAAa,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;AAE1D,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,QAAQ,CAAC,CAAS,EAAA;QACxB,IAAI,GAAG,GAAG,CAAC,CAAC;AACZ,QAAA,IAAI,CAAC,IAAI,EAAE,EAAE;YACX,GAAG,GAAG,CAAC,CAAC;SACT;AAAM,aAAA,IAAI,CAAC,IAAI,EAAE,EAAE;YAClB,GAAG,GAAG,CAAC,CAAC;SACT;AAAM,aAAA,IAAI,CAAC,IAAI,EAAE,EAAE;YAClB,GAAG,GAAG,CAAC,CAAC;SACT;AAAM,aAAA,IAAI,CAAC,IAAI,EAAE,EAAE;YAClB,GAAG,GAAG,CAAC,CAAC;SACT;aAAM;YACL,GAAG,GAAG,CAAC,CAAC;SACT;QACD,OAAO;YACL,GAAG,EAAE,GAAG,GAAG,CAAC;AACZ,YAAA,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;SACvB,CAAC;KACH;AAED,IAAA,WAAW,CAAC,OAA6C,EAAA;QACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC;AACzD,QAAA,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7B,IAAI,QAAQ,EAAE;YACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACpC;KACF;IAEO,YAAY,CAAC,KAAa,EAAE,GAAW,EAAA;AAC7C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AAC9B,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;SACpB;KACF;8GA9EU,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,0LCdzC,ycAUA,EAAA,MAAA,EAAA,CAAA,yOAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDIa,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBALxC,SAAS;+BACE,gCAAgC,EAAA,QAAA,EAAA,ycAAA,EAAA,MAAA,EAAA,CAAA,yOAAA,CAAA,EAAA,CAAA;wDAOjC,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAEI,cAAc,EAAA,CAAA;sBAAvB,MAAM;;;MEOI,4BAA4B,CAAA;AA2BvC,IAAA,WAAA,CACE,WAAwB,EAChB,SAAsB,EACtB,eAAsC,EACtC,eAAmC,EAAA;QAFnC,IAAS,CAAA,SAAA,GAAT,SAAS,CAAa;QACtB,IAAe,CAAA,eAAA,GAAf,eAAe,CAAuB;QACtC,IAAe,CAAA,eAAA,GAAf,eAAe,CAAoB;QANtC,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC;AAQjB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,YAAY,EAAO,CAAC;;QAE1C,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE;YACnC,UAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC;AACnD,YAAA,eAAe,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CACtE,IAAI,CACL;AACD,YAAA,WAAW,EAAE,IAAI;AAClB,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE;YAClC,UAAU,EAAE,UAAU,CAAC,QAAQ;AAC/B,YAAA,eAAe,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CACrE,IAAI,CACL;AACD,YAAA,WAAW,EAAE,IAAI;AAClB,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE;AACvC,YAAA,UAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC3D,YAAA,WAAW,EAAE,IAAI;AAClB,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE;AACtC,YAAA,UAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC3D,YAAA,WAAW,EAAE,IAAI;AAClB,SAAA,CAAC,CAAC;;QAGH,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE;YACtC,UAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,EAAE,CAAC;AAChE,YAAA,WAAW,EAAE,IAAI;AAClB,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE;YAC7C,UAAU,EAAE,UAAU,CAAC,QAAQ;AAC/B,YAAA,WAAW,EAAE,IAAI;AAClB,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAC3B;YACE,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,eAAe,EAAE,IAAI,CAAC,eAAe;SACtC,EACD;AACE,YAAA,UAAU,EAAE;AACV,gBAAA,kBAAkB,CAAC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;AAC3D,aAAA;AACF,SAAA,CACF,CAAC;KACH;AAED;;;;;;;AAOG;AACK,IAAA,sBAAsB,CAAC,OAA8B,EAAA;QAC3D,OAAO,CACL,OAAwB,KAGgB;YACxC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;;AAErC,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;oBAClB,OAAO,CAAC,IAAI,CAAC,CAAC;iBACf;qBAAM;oBACL,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AAChD,wBAAA,IAAI,EAAE,CAAC,IAAiB,KAAI;AAC1B,4BAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gCACpB,OAAO,CAAC,IAAI,CAAC,CAAC;6BACf;iCAAM;AACL,gCAAA,OAAO,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;6BAC/B;yBACF;AACD,wBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;4BACf,OAAO,CAAC,KAAK,CACX,6BAA6B;AAC3B,iCAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CACvC,CAAC;AACF,4BAAA,OAAO,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;yBAC/B;AACF,qBAAA,CAAC,CAAC;iBACJ;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAC;KACH;AAEO,IAAA,uBAAuB,CAAC,OAA8B,EAAA;QAC5D,OAAO,CACL,OAAwB,KAGgB;YACxC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;;AAErC,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;oBAClB,OAAO,CAAC,IAAI,CAAC,CAAC;iBACf;qBAAM;oBACL,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AACjD,wBAAA,IAAI,EAAE,CAAC,IAAiB,KAAI;AAC1B,4BAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gCACpB,OAAO,CAAC,IAAI,CAAC,CAAC;6BACf;iCAAM;AACL,gCAAA,OAAO,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;6BAChC;yBACF;AACD,wBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;4BACf,OAAO,CAAC,KAAK,CACX,8BAA8B;AAC5B,iCAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CACvC,CAAC;AACF,4BAAA,OAAO,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;yBAChC;AACF,qBAAA,CAAC,CAAC;iBACJ;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAC;KACH;IAEM,QAAQ,GAAA;AACb,QAAA,IACE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;AAChB,YAAA,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,IAAI,CAAC,OAAO;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAClB;YACA,OAAO;SACR;AAED,QAAA,MAAM,KAAK,GAAsB;AAC/B,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;AACvB,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;AACrB,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK;AAC/B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;AAC7B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;SAC9B,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,eAAe;AACjB,aAAA,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC;AACjC,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACb,aAAA,SAAS,CAAC;YACT,IAAI,EAAE,MAAK;AACT,gBAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,SAAS,CAAA,CAAwC,sCAAA,CAAA,EACjD,IAAI,CACL,CAAC;AACF,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;AAC7B,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,OAAO,CAAC,KAAK,CACX,qBAAqB,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAC7D,CAAC;gBACF,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,SAAS,CAAA,CAAoC,kCAAA,CAAA,EAC7C,IAAI,CACL,CAAC;aACH;AACF,SAAA,CAAC,CAAC;KACN;8GA1MU,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,4IC1BzC,qzPAgOA,EAAA,MAAA,EAAA,CAAA,sOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,4BAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDtMa,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBALxC,SAAS;+BACE,uBAAuB,EAAA,QAAA,EAAA,qzPAAA,EAAA,MAAA,EAAA,CAAA,sOAAA,CAAA,EAAA,CAAA;6KAmB1B,WAAW,EAAA,CAAA;sBADjB,KAAK;gBASC,UAAU,EAAA,CAAA;sBADhB,MAAM;;;MErCI,mBAAmB,CAAA;AAG9B,IAAA,IACW,MAAM,GAAA;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;IACD,IAAW,MAAM,CAAC,KAAoC,EAAA;AACpD,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;YAC1B,OAAO;SACR;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,IAAI,SAAS,CAAC;AAClC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC/B;AAcD,IAAA,WAAA,CAAY,WAAwB,EAAA;;QAElC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,OAAO,CAAgB,IAAI,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;YAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,SAAA,CAAC,CAAC;;AAEH,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAc,CAAC;KACpD;AAEO,IAAA,UAAU,CAAC,MAAmB,EAAA;QACpC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;KAC5B;IAEO,SAAS,GAAA;QACf,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;SAC9B,CAAC;KACH;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACtC;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACtC;8GA7DU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,2JCXhC,w+BAkCA,EAAA,MAAA,EAAA,CAAA,uHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDvBa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,w+BAAA,EAAA,MAAA,EAAA,CAAA,uHAAA,CAAA,EAAA,CAAA;kFAQrB,MAAM,EAAA,CAAA;sBADhB,KAAK;gBAaC,QAAQ,EAAA,CAAA;sBADd,KAAK;gBAOC,YAAY,EAAA,CAAA;sBADlB,MAAM;;;MElBI,mBAAmB,CAAA;IAa9B,IAAoB,IAAI,CAAC,KAAuB,EAAA;AAC9C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KACxB;AACD,IAAA,IAAW,IAAI,GAAA;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAKD,WAAY,CAAA,WAA+B,EAAU,YAA4B,EAAA;QAA5B,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAgB;;AAE/E,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,YAAY,EAAQ,CAAC;AAC3C,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,EAAO,CAAC;;QAE3C,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE;AACrC,YAAA,UAAU,CAAC,QAAQ;AACnB,YAAA,UAAU,CAAC,KAAK;AACjB,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE;AACzC,YAAA,UAAU,CAAC,QAAQ;AACnB,YAAA,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;AACzB,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE;AACxC,YAAA,UAAU,CAAC,QAAQ;AACnB,YAAA,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;AACzB,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAElE,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;YAC5B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,QAAQ,MAAW;AAEX,IAAA,UAAU,CAAC,IAAsB,EAAA;QACvC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;SACnB;aAAM;YACL,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;AAC1B,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;aAC3C;iBAAM;AACL,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;aAC3B;SACF;KACF;IAEO,eAAe,GAAA;QACrB,OAAO;AACL,YAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,IAAI,EAAE;AACpC,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;AACvB,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK;AACzC,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK;AACzC,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK;AAC/B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;AAC7B,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;kBACnB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,KAAK,CAAC,CAAC;AACtD,kBAAE,EAAE;SACP,CAAC;KACH;IAEM,UAAU,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO;SACR;QACD,IAAI,CAAC,KAAM,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;AACxD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;KACzB;IAEM,IAAI,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACrB,OAAO;SACR;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;KAC9C;8GAzGU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAR,IAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,yJCdhC,84GAyGA,EAAA,MAAA,EAAA,CAAA,+FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FD3Fa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,84GAAA,EAAA,MAAA,EAAA,CAAA,+FAAA,CAAA,EAAA,CAAA;wHAiBZ,IAAI,EAAA,CAAA;sBAAvB,KAAK;gBAQI,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBACG,WAAW,EAAA,CAAA;sBAApB,MAAM;;;MEnBI,iBAAiB,CAAA;AAM5B,IAAA,WAAA,CACU,WAA+B,EAC/B,cAA6B,EAC7B,gBAAiC,EAAA;QAFjC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAoB;QAC/B,IAAc,CAAA,cAAA,GAAd,cAAc,CAAe;QAC7B,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAiB;AAEzC,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;AACnC,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC;AACvC,QAAA,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;KACtC;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;KAC1B;AAEM,IAAA,cAAc,CAAC,MAAkB,EAAA;AACtC,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KACpC;AAEM,IAAA,YAAY,CAAC,KAAgB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;KAC/D;AAEM,IAAA,UAAU,CAAC,IAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,cAAc;AAChB,aAAA,OAAO,CACN,SAAS,CAAA,CAAA,uBAAA,CAAyB,EAClC,SAAS,CAAA,CAA8B,4BAAA,CAAA,GAAG,IAAI,CAAC,QAAQ,GAAG,GAAG,CAC9D;AACA,aAAA,SAAS,CAAC,CAAC,GAAG,KAAI;YACjB,IAAI,GAAG,EAAE;gBACP,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC5C;AACH,SAAC,CAAC,CAAC;KACN;AAEM,IAAA,aAAa,CAAC,IAAiB,EAAA;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KACtC;IAEM,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KACtC;AAEM,IAAA,cAAc,CAAC,IAAU,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KACtC;IAEM,iBAAiB,GAAA;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KACtC;AAEM,IAAA,cAAc,CAAC,KAAa,EAAE,IAAI,GAAG,EAAE,EAAA;QAC5C,OAAO,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KAC5D;8GA7DU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAV,IAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAI,IAAA,CAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,0DCjB9B,mwHAyHA,EAAA,MAAA,EAAA,CAAA,k0BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,GAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDxGa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;+BACE,oBAAoB,EAAA,QAAA,EAAA,mwHAAA,EAAA,MAAA,EAAA,CAAA,k0BAAA,CAAA,EAAA,CAAA;;;MEkDnB,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,iBAlC3B,4BAA4B;YAC5B,4BAA4B;YAC5B,mBAAmB;YACnB,iBAAiB;AACjB,YAAA,mBAAmB,aASnB,YAAY;YACZ,WAAW;YACX,YAAY;YACZ,mBAAmB;;YAEnB,eAAe;YACf,aAAa;YACb,iBAAiB;YACjB,eAAe;YACf,kBAAkB;YAClB,aAAa;YACb,cAAc;YACd,kBAAkB;YAClB,oBAAoB;YACpB,wBAAwB;YACxB,iBAAiB;YACjB,gBAAgB;YAChB,kBAAkB;AAClB,YAAA,aAAa,aAxBb,4BAA4B;YAC5B,4BAA4B;YAC5B,mBAAmB;YACnB,iBAAiB,CAAA,EAAA,CAAA,CAAA,EAAA;AAwBR,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YArB3B,YAAY;YACZ,WAAW;YACX,YAAY;YACZ,mBAAmB;;YAEnB,eAAe;YACf,aAAa;YACb,iBAAiB;YACjB,eAAe;YACf,kBAAkB;YAClB,aAAa;YACb,cAAc;YACd,kBAAkB;YAClB,oBAAoB;YACpB,wBAAwB;YACxB,iBAAiB;YACjB,gBAAgB;YAChB,kBAAkB;YAClB,aAAa,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGJ,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBApC9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,4BAA4B;wBAC5B,4BAA4B;wBAC5B,mBAAmB;wBACnB,iBAAiB;wBACjB,mBAAmB;AACpB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,4BAA4B;wBAC5B,4BAA4B;wBAC5B,mBAAmB;wBACnB,iBAAiB;AAClB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,YAAY;wBACZ,mBAAmB;;wBAEnB,eAAe;wBACf,aAAa;wBACb,iBAAiB;wBACjB,eAAe;wBACf,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,kBAAkB;wBAClB,oBAAoB;wBACpB,wBAAwB;wBACxB,iBAAiB;wBACjB,gBAAgB;wBAChB,kBAAkB;wBAClB,aAAa;AACd,qBAAA;AACF,iBAAA,CAAA;;;AC9DD;;AAEG;;ACFH;;AAEG;;;;"}
@@ -3,27 +3,26 @@ import * as i1 from "./components/auth-jwt-registration/auth-jwt-registration.co
3
3
  import * as i2 from "./components/password-strength-bar/password-strength-bar.component";
4
4
  import * as i3 from "./components/user-filter/user-filter.component";
5
5
  import * as i4 from "./components/user-list/user-list.component";
6
- import * as i5 from "./components/confirm-dialog/confirm-dialog.component";
7
- import * as i6 from "./components/user-editor/user-editor.component";
8
- import * as i7 from "@angular/common";
9
- import * as i8 from "@angular/forms";
10
- import * as i9 from "@angular/router";
11
- import * as i10 from "@angular/material/button";
12
- import * as i11 from "@angular/material/card";
13
- import * as i12 from "@angular/material/checkbox";
14
- import * as i13 from "@angular/material/dialog";
15
- import * as i14 from "@angular/material/expansion";
16
- import * as i15 from "@angular/material/icon";
17
- import * as i16 from "@angular/material/input";
18
- import * as i17 from "@angular/material/paginator";
19
- import * as i18 from "@angular/material/progress-bar";
20
- import * as i19 from "@angular/material/progress-spinner";
21
- import * as i20 from "@angular/material/snack-bar";
22
- import * as i21 from "@angular/material/tooltip";
23
- import * as i22 from "@myrmidon/auth-jwt-login";
24
- import * as i23 from "@myrmidon/ng-tools";
6
+ import * as i5 from "./components/user-editor/user-editor.component";
7
+ import * as i6 from "@angular/common";
8
+ import * as i7 from "@angular/forms";
9
+ import * as i8 from "@angular/router";
10
+ import * as i9 from "@angular/material/button";
11
+ import * as i10 from "@angular/material/card";
12
+ import * as i11 from "@angular/material/checkbox";
13
+ import * as i12 from "@angular/material/dialog";
14
+ import * as i13 from "@angular/material/expansion";
15
+ import * as i14 from "@angular/material/icon";
16
+ import * as i15 from "@angular/material/input";
17
+ import * as i16 from "@angular/material/paginator";
18
+ import * as i17 from "@angular/material/progress-bar";
19
+ import * as i18 from "@angular/material/progress-spinner";
20
+ import * as i19 from "@angular/material/snack-bar";
21
+ import * as i20 from "@angular/material/tooltip";
22
+ import * as i21 from "@myrmidon/auth-jwt-login";
23
+ import * as i22 from "@myrmidon/ng-tools";
25
24
  export declare class AuthJwtAdminModule {
26
25
  static ɵfac: i0.ɵɵFactoryDeclaration<AuthJwtAdminModule, never>;
27
- static ɵmod: i0.ɵɵNgModuleDeclaration<AuthJwtAdminModule, [typeof i1.AuthJwtRegistrationComponent, typeof i2.PasswordStrengthBarComponent, typeof i3.UserFilterComponent, typeof i4.UserListComponent, typeof i5.ConfirmDialogComponent, typeof i6.UserEditorComponent], [typeof i7.CommonModule, typeof i8.FormsModule, typeof i9.RouterModule, typeof i8.ReactiveFormsModule, typeof i10.MatButtonModule, typeof i11.MatCardModule, typeof i12.MatCheckboxModule, typeof i13.MatDialogModule, typeof i14.MatExpansionModule, typeof i15.MatIconModule, typeof i16.MatInputModule, typeof i17.MatPaginatorModule, typeof i18.MatProgressBarModule, typeof i19.MatProgressSpinnerModule, typeof i20.MatSnackBarModule, typeof i21.MatTooltipModule, typeof i22.AuthJwtLoginModule, typeof i23.NgToolsModule], [typeof i1.AuthJwtRegistrationComponent, typeof i2.PasswordStrengthBarComponent, typeof i3.UserFilterComponent, typeof i4.UserListComponent]>;
26
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AuthJwtAdminModule, [typeof i1.AuthJwtRegistrationComponent, typeof i2.PasswordStrengthBarComponent, typeof i3.UserFilterComponent, typeof i4.UserListComponent, typeof i5.UserEditorComponent], [typeof i6.CommonModule, typeof i7.FormsModule, typeof i8.RouterModule, typeof i7.ReactiveFormsModule, typeof i9.MatButtonModule, typeof i10.MatCardModule, typeof i11.MatCheckboxModule, typeof i12.MatDialogModule, typeof i13.MatExpansionModule, typeof i14.MatIconModule, typeof i15.MatInputModule, typeof i16.MatPaginatorModule, typeof i17.MatProgressBarModule, typeof i18.MatProgressSpinnerModule, typeof i19.MatSnackBarModule, typeof i20.MatTooltipModule, typeof i21.AuthJwtLoginModule, typeof i22.NgToolsModule], [typeof i1.AuthJwtRegistrationComponent, typeof i2.PasswordStrengthBarComponent, typeof i3.UserFilterComponent, typeof i4.UserListComponent]>;
28
27
  static ɵinj: i0.ɵɵInjectorDeclaration<AuthJwtAdminModule>;
29
28
  }
@@ -16,6 +16,10 @@ export declare class AuthJwtRegistrationComponent {
16
16
  lastName: FormControl<string>;
17
17
  password: FormControl<string>;
18
18
  confirmPassword: FormControl<string>;
19
+ /**
20
+ * True if the registration should be confirmed automatically.
21
+ */
22
+ autoConfirm?: boolean;
19
23
  /**
20
24
  * Emitted when a user was successfully registered. Usually
21
25
  * you should handle this to move away from the registration
@@ -36,5 +40,5 @@ export declare class AuthJwtRegistrationComponent {
36
40
  private getUniqueEmailValidator;
37
41
  onSubmit(): void;
38
42
  static ɵfac: i0.ɵɵFactoryDeclaration<AuthJwtRegistrationComponent, never>;
39
- static ɵcmp: i0.ɵɵComponentDeclaration<AuthJwtRegistrationComponent, "auth-jwt-registration", never, {}, { "registered": "registered"; }, never, never, false, never>;
43
+ static ɵcmp: i0.ɵɵComponentDeclaration<AuthJwtRegistrationComponent, "auth-jwt-registration", never, { "autoConfirm": { "alias": "autoConfirm"; "required": false; }; }, { "registered": "registered"; }, never, never, false, never>;
40
44
  }
@@ -3,7 +3,7 @@ import { Observable } from 'rxjs';
3
3
  import '@angular/localize/init';
4
4
  import { GravatarService, User } from '@myrmidon/auth-jwt-login';
5
5
  import { DataPage } from '@myrmidon/ng-tools';
6
- import { DialogService } from '../../services/dialog.service';
6
+ import { DialogService } from '@myrmidon/ng-mat-tools';
7
7
  import { UserListRepository } from '../state/user-list.repository';
8
8
  import { UserFilter } from '../../services/auth-jwt-account.service';
9
9
  import * as i0 from "@angular/core";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@myrmidon/auth-jwt-admin",
3
- "version": "4.2.0",
3
+ "version": "5.0.0",
4
4
  "description": "JWT-based auth services accounts admin component.",
5
5
  "keywords": [
6
6
  "JWT",
@@ -18,8 +18,9 @@
18
18
  "@angular/common": "^18.0.0",
19
19
  "@angular/core": "^18.0.0",
20
20
  "@angular/material": "^18.0.0",
21
- "@myrmidon/auth-jwt-login": "^4.0.1",
22
- "@myrmidon/ng-tools": "^3.1.0"
21
+ "@myrmidon/auth-jwt-login": "^5.0.0",
22
+ "@myrmidon/ng-tools": "^3.1.1",
23
+ "@myrmidon/ng-mat-tools": "^3.1.0"
23
24
  },
24
25
  "dependencies": {
25
26
  "tslib": "^2.5.0"