@idea-ionic/auth 7.2.4 → 7.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/src/auth.service.mjs +2 -2
- package/esm2022/src/confirmPassword.page.mjs +2 -2
- package/esm2022/src/newPassword.page.mjs +2 -2
- package/esm2022/src/passwordPolicy.component.mjs +4 -4
- package/esm2022/src/signIn.page.mjs +2 -2
- package/esm2022/src/signUp.page.mjs +2 -2
- package/fesm2022/idea-ionic-auth.mjs +3 -3
- package/fesm2022/idea-ionic-auth.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idea-ionic-auth.mjs","sources":["../../../modules/auth/src/auth.service.ts","../../../modules/auth/src/signIn.page.ts","../../../modules/auth/src/signIn.page.html","../../../modules/auth/src/passwordPolicy.component.ts","../../../modules/auth/src/signUp.page.ts","../../../modules/auth/src/signUp.page.html","../../../modules/auth/src/newPassword.page.ts","../../../modules/auth/src/newPassword.page.html","../../../modules/auth/src/resendLink.page.ts","../../../modules/auth/src/resendLink.page.html","../../../modules/auth/src/forgotPassword.page.ts","../../../modules/auth/src/forgotPassword.page.html","../../../modules/auth/src/confirmPassword.page.ts","../../../modules/auth/src/confirmPassword.page.html","../../../modules/auth/src/mfaChallenge.page.ts","../../../modules/auth/src/mfaChallenge.page.html","../../../modules/auth/src/setupMFA/setupMFAModal.component.ts","../../../modules/auth/src/setupMFA/setupMFAModal.component.html","../../../modules/auth/src/setupMFA/setupMFAButton.component.ts","../../../modules/auth/src/setupMFA/setupMFAButton.component.html","../../../modules/auth/src/setupMFA.page.ts","../../../modules/auth/src/setupMFA.page.html","../../../modules/auth/src/setupMFA/setupMFA.module.ts","../../../modules/auth/src/auth.module.ts","../../../modules/auth/idea-ionic-auth.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport {\n AuthenticationDetails,\n CognitoUser,\n CognitoUserAttribute,\n CognitoUserPool,\n CognitoRefreshToken,\n CognitoUserSession,\n ISignUpResult,\n ChallengeName\n} from 'amazon-cognito-identity-js';\nimport { IDEAStorageService } from '@idea-ionic/common';\n\nimport { environment as env } from '@env';\n\n/**\n * The name of the Cognito's user attribute which contains the key of the last device to login in this project.\n */\nconst DEVICE_KEY_ATTRIBUTE = 'custom:'.concat(env.idea.project);\n\n/**\n * Cognito wrapper to manage the authentication flow.\n *\n * Note: in IDEA's Cognito users pools, the email is an alias of the username.\n */\n@Injectable({ providedIn: 'root' })\nexport class IDEAAuthService {\n private userPool: CognitoUserPool;\n\n challengeUsername: string;\n private challengePassword: string;\n\n private newAccountJustRegistered: string;\n\n private mfaProjectName = env.idea.app.title ?? env.idea.project;\n\n private passwordPolicy = env.idea.auth.passwordPolicy;\n\n constructor(private storage: IDEAStorageService) {\n this.userPool = new CognitoUserPool({\n UserPoolId: env.aws.cognito.userPoolId,\n ClientId: env.aws.cognito.userPoolClientId\n });\n }\n\n /**\n * Prepare the necessary structure to get authorized in Cognito.\n */\n private prepareAuthDetails(username: string, pwd: string): AuthenticationDetails {\n return new AuthenticationDetails({ Username: username, Password: pwd });\n }\n /**\n * Prepare the necessary structure to identify a Cognito user.\n */\n prepareCognitoUser(username: string): CognitoUser {\n return new CognitoUser({ Username: username, Pool: this.userPool });\n }\n /**\n * Prepare a user attribute (they are all strings) in Cognito's format.\n */\n private prepareUserAttribute(name: string, value: string): CognitoUserAttribute {\n return new CognitoUserAttribute({ Name: name, Value: value });\n }\n\n /**\n * Perform a login through username and password.\n */\n login(username: string, password: string): Promise<LoginOutcomeActions> {\n return new Promise((resolve, reject): void => {\n const user = this.prepareCognitoUser(username);\n user.authenticateUser(this.prepareAuthDetails(username, password), {\n onSuccess: (): void =>\n resolve(env.idea.auth.forceLoginWithMFA ? LoginOutcomeActions.MFA_SETUP : LoginOutcomeActions.NONE),\n onFailure: (err: Error): void => reject(err),\n newPasswordRequired: (): void => {\n this.challengeUsername = username;\n this.challengePassword = password;\n resolve(LoginOutcomeActions.NEW_PASSWORD);\n },\n totpRequired: (): void => {\n this.challengeUsername = username;\n this.challengePassword = password;\n resolve(LoginOutcomeActions.MFA_CHALLENGE);\n }\n });\n });\n }\n /**\n * Complete the new password flow in the authentication.\n */\n confirmNewPassword(newPassword: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n const user = this.prepareCognitoUser(this.challengeUsername);\n user.authenticateUser(this.prepareAuthDetails(this.challengeUsername, this.challengePassword), {\n onSuccess: (): void => resolve(),\n onFailure: (err: Error): void => reject(err),\n newPasswordRequired: (): void =>\n user.completeNewPasswordChallenge(\n newPassword,\n {},\n {\n onSuccess: (): void => {\n this.challengeUsername = null;\n this.challengePassword = null;\n resolve();\n },\n onFailure: (err: Error): void => reject(err)\n }\n )\n });\n });\n }\n /**\n * Complete the MFA challenge flow in the authentication.\n */\n completeMFAChallenge(otpCode: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n const user = this.prepareCognitoUser(this.challengeUsername);\n user.authenticateUser(this.prepareAuthDetails(this.challengeUsername, this.challengePassword), {\n onSuccess: (): void => resolve(),\n onFailure: (err: Error): void => reject(err),\n totpRequired: (challengeName: ChallengeName): void =>\n user.sendMFACode(\n otpCode,\n {\n onSuccess: (): void => {\n this.challengeUsername = null;\n this.challengePassword = null;\n resolve();\n },\n onFailure: err => reject(err)\n },\n challengeName\n )\n });\n });\n }\n /**\n * Register a new user a set its default attributes.\n */\n register(username: string, password: string, attributes?: any): Promise<CognitoUser> {\n attributes = attributes || {};\n return new Promise((resolve, reject): void => {\n // add attributes like the email address and the fullname\n const attrs = [];\n for (const prop in attributes)\n if (attributes[prop]) attrs.push(this.prepareUserAttribute(prop, attributes[prop]));\n // add the email, which is equal to the username for most of our Pools\n if (!attributes.email) attrs.push(this.prepareUserAttribute('email', username));\n // register the new user to the pool\n this.userPool.signUp(username, password, attrs, null, (err: Error, res: ISignUpResult): void => {\n if (err) return reject(err);\n this.newAccountJustRegistered = username;\n resolve(res.user);\n });\n });\n }\n /**\n * In case new account has just been registered, return the username.\n */\n getNewAccountJustRegistered(): string {\n return this.newAccountJustRegistered;\n }\n /**\n * Confirm a new registration through the confirmation code sent by Cognito.\n */\n confirmRegistration(username: string, code: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n this.prepareCognitoUser(username).confirmRegistration(code, true, (err: Error): void =>\n err ? reject(err) : resolve()\n );\n });\n }\n /**\n * Send again a confirmation code for a new registration.\n */\n resendConfirmationCode(username: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n this.prepareCognitoUser(username).resendConfirmationCode((err: Error): void => (err ? reject(err) : resolve()));\n });\n }\n /**\n * Logout the currently signed-in user.\n */\n logout(options?: { global: boolean }): Promise<void> {\n options = Object.assign({ global: false }, options);\n return new Promise((resolve, reject): void => {\n // remove the refresh token previosly saved\n this.storage.remove('AuthRefreshToken').then(\n (): Promise<void> =>\n // remove the optional auth details\n this.storage.remove('AuthUserDetails').then((): void => {\n // get the user and the session\n const user = this.userPool.getCurrentUser();\n user.getSession(async (err: Error): Promise<void> => {\n // if the session is active, run the online sign-out; otherwise, only the local data has been deleted\n if (err) return resolve();\n // if a reference to the device was saved, forget it\n if (env.idea.auth.singleSimultaneousSession) await this.setCurrentDeviceForProject(null);\n // sign-out from the pool (terminate the current session or all the sessions)\n if (options.global)\n user.globalSignOut({ onSuccess: (): void => resolve(), onFailure: err => reject(err) });\n else {\n user.signOut();\n resolve();\n }\n });\n })\n );\n });\n }\n /**\n * Send a password reset request.\n */\n forgotPassword(username: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n this.prepareCognitoUser(username).forgotPassword({\n onSuccess: (): void => resolve(),\n onFailure: (err: Error): void => reject(err)\n });\n });\n }\n /**\n * Confirm a new password after a password reset request.\n */\n confirmPassword(username: string, code: string, newPwd: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n this.prepareCognitoUser(username).confirmPassword(code, newPwd, {\n onSuccess: (): void => resolve(),\n onFailure: (err: Error): void => reject(err)\n });\n });\n }\n /**\n * Gets the URL for enabling MFA. This URL can be used to generate a QR Code to read with an authenticator app.\n */\n getURLForEnablingMFA(): Promise<string> {\n return new Promise((resolve, reject): void => {\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n user.getSession((err: Error): void => {\n if (err) return reject(err);\n user.associateSoftwareToken({\n associateSecretCode: (secretCode: string): void =>\n resolve(`otpauth://totp/${encodeURI(this.mfaProjectName)}?secret=${secretCode}`),\n onFailure: (err: any): void => reject(err)\n });\n });\n });\n }\n /**\n * Check whether the user has MFA enabled.\n */\n checkIfUserHasMFAEnabled(bypassCache = false): Promise<boolean> {\n return new Promise((resolve, reject): void => {\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n user.getSession((err: Error): void => {\n if (err) return reject(err);\n user.getUserData(\n (err, data): void => {\n if (err) return reject(err);\n const isMFAEnabled = !!(data.UserMFASettingList && data.UserMFASettingList.includes('SOFTWARE_TOKEN_MFA'));\n resolve(isMFAEnabled);\n },\n { bypassCache }\n );\n });\n });\n }\n /**\n * Configure a MFA device for the user.\n */\n private setMFADevice(otp: string, mfaDeviceName: string, enabled = true, preferred = true): Promise<void> {\n return new Promise((resolve, reject): void => {\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n user.getSession((err: Error): void => {\n if (err) return reject(err);\n user.verifySoftwareToken(otp, mfaDeviceName, {\n onSuccess: (): void =>\n user.setUserMfaPreference(null, { Enabled: enabled, PreferredMfa: preferred }, (err: Error): void =>\n err ? reject(err) : resolve()\n ),\n onFailure: (err): void => reject(err)\n });\n });\n });\n }\n /**\n * Enable a new MFA device for the user by inserting an OTP code generated by it.\n */\n enableMFA(otp: string, mfaDeviceName = 'default'): Promise<void> {\n return this.setMFADevice(otp, mfaDeviceName, true, true);\n }\n /**\n * Disable MFA for a user by inserting an OTP code generated by it.\n */\n disableMFA(otp: string, mfaDeviceName = 'default'): Promise<void> {\n return this.setMFADevice(otp, mfaDeviceName, false, false);\n }\n /**\n * Check if a user is currently authenticated.\n * @param offlineAllowed if set and if offline, skip authentication and retrieve data locally\n * @param getFreshIdTokenOnExp cb function to execute when the idToken is refreshed\n */\n isAuthenticated(offlineAllowed: boolean, getFreshIdTokenOnExp?: (freshIdToken: string) => void): Promise<any> {\n return new Promise((resolve, reject): void => {\n if (offlineAllowed && !navigator.onLine) {\n this.storage.get('AuthUserDetails').then(userDetails => resolve({ idToken: null, userDetails }));\n // re-execute the method when back online, so that you can retrieve a token to make requests\n window.addEventListener(\n 'online',\n (): Promise<void> =>\n this.isAuthenticated(true, getFreshIdTokenOnExp)\n // set the new token as if it was refreshed\n .then(result => getFreshIdTokenOnExp(result.idToken))\n );\n } else {\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n user.getSession((err: Error, session: CognitoUserSession): void => {\n if (err) return reject(err);\n user.getUserData(\n (err, data): void => {\n if (err) return reject(err);\n const isMFAEnabled = !!(\n data.UserMFASettingList && data.UserMFASettingList.includes('SOFTWARE_TOKEN_MFA')\n );\n if (!isMFAEnabled && env.idea.auth.forceLoginWithMFA)\n return reject(new Error(LoginOutcomeActions.MFA_SETUP));\n user.getUserAttributes((e: Error, attributes: CognitoUserAttribute[]): void => {\n if (e) return reject(e);\n // remap user attributes\n const userDetails: any = {};\n attributes.forEach((a: CognitoUserAttribute): string => (userDetails[a.getName()] = a.getValue()));\n // add the user's groups to the attributes\n const sessionInfo = session.getAccessToken().decodePayload();\n const groups: string[] = sessionInfo['cognito:groups'] || [];\n userDetails['groups'] = groups;\n // run some checks considering the user's groups and devices (based on the project's configuration)\n this.runPostAuthChecks(userDetails, err => {\n // in case some check failed, reject the authorisation flow\n if (err) return reject(err);\n // (async) save the refresh token so it can be accessed by other procedures\n this.storage.set('AuthRefreshToken', session.getRefreshToken().getToken());\n // set a timer to manage the autorefresh of the idToken (through the refreshToken)\n setTimeout(\n (): void => this.refreshSession(user, session.getRefreshToken().getToken(), getFreshIdTokenOnExp),\n 15 * 60 * 1000\n ); // every 15 minutes\n // (async) if offlineAllowed, save data locally, to use it next time we'll be offline\n if (offlineAllowed) this.storage.set('AuthUserDetails', userDetails);\n // return the idToken (to use with API)\n resolve({ idToken: session.getIdToken().getJwtToken(), userDetails });\n });\n });\n },\n { bypassCache: true }\n );\n });\n }\n });\n }\n /**\n * Helper to refresh the session every N minutes.\n */\n private refreshSession(user: CognitoUser, refreshToken: string, callback: (freshIdToken: string) => void): void {\n user.refreshSession(\n new CognitoRefreshToken({ RefreshToken: refreshToken }),\n (err: Error, session: CognitoUserSession): void => {\n if (err) {\n // try again in 1 minute\n setTimeout((): void => this.refreshSession(user, refreshToken, callback), 1 * 60 * 1000);\n } else {\n // (async) save the refresh token so it can be accessed by other procedures\n this.storage.set('AuthRefreshToken', session.getRefreshToken().getToken());\n // repeat every 15 minutes\n setTimeout(\n (): void => this.refreshSession(user, session.getRefreshToken().getToken(), callback),\n 15 * 60 * 1000\n );\n // run the callback action, if set\n if (callback) callback(session.getIdToken().getJwtToken());\n }\n }\n );\n }\n /**\n * Run some post-auth checks, based on the users groups and on the app's configuration:\n * - users in the Cognito's \"admins\" grup skip all the following rules.\n * - users in the Cognito's \"robots\" group can't sign-into front-ends (they serve only back-end purposes).\n * - if `env.idea.auth.singleSimultaneousSession` is on, make sure there is only one active session per user.\n */\n private runPostAuthChecks(userDetails: any, callback: (err?: Error) => void): void | Promise<void> {\n const groups: string[] = userDetails['groups'];\n // skip checks if the user is in the \"admins\" group\n const isAdmin = groups.some(x => x === 'admins');\n if (isAdmin) return callback();\n // users in the \"robots\" group can't sign-into front-ends (they serve only back-end purposes)\n const isRobot = groups.some(x => x === 'robots');\n if (isRobot) return callback(new Error('ROBOT_USER'));\n // in case the project limits each account to only one simultaneous session, run a check\n if (env.idea.auth.singleSimultaneousSession) return this.checkForSimultaneousSessions(userDetails, callback);\n // otherwise, we're done\n callback();\n }\n /**\n * Check whether the user signed-into multiple devices.\n */\n private async checkForSimultaneousSessions(userDetails: any, callback: (err?: Error) => void): Promise<void> {\n // get or create a key for the current device (~random)\n let currentDeviceKey = await this.storage.get('AuthDeviceKey');\n if (!currentDeviceKey) {\n const randomKey = Math.random().toString(36).substring(10);\n currentDeviceKey = randomKey.concat(String(Date.now()));\n await this.storage.set('AuthDeviceKey', currentDeviceKey);\n }\n // check whether the last device to sign-into this project (if any) is the current one\n const lastDeviceToSignIntoThisProject = userDetails[DEVICE_KEY_ATTRIBUTE];\n // if it's the first user's device to sign-in, save the reference in Cognito and resolve\n if (!lastDeviceToSignIntoThisProject) {\n this.setCurrentDeviceForProject(currentDeviceKey)\n .then((): void => callback())\n .catch((): void => callback(new Error('CANT_SET_DEVICE')));\n // if the device didn't change, resolve\n } else if (lastDeviceToSignIntoThisProject === currentDeviceKey) callback();\n // othwerwise, report there is more than one simultaneous session\n else callback(new Error('SIMULTANEOUS_SESSION'));\n }\n /**\n * Set (or reset) the current user's device (by key) in the current project (stored in Cognito).\n */\n private setCurrentDeviceForProject(deviceKey?: string): Promise<void> {\n const attributes: any = {};\n // note: an empty string will remove the attribute from Cognito\n attributes[DEVICE_KEY_ATTRIBUTE] = deviceKey || '';\n return this.updateUserAttributes(attributes);\n }\n /**\n * Update the currently logged in user's attributes.\n */\n updateUserAttributes(attributes: any): Promise<void> {\n return new Promise((resolve, reject): void => {\n // prepare the attributes we want to change\n const attrs = new Array<any>();\n for (const prop in attributes)\n if (attributes[prop] !== undefined) attrs.push(this.prepareUserAttribute(prop, attributes[prop]));\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n // we need to get the session before to make changes\n user.getSession((err: Error): void => {\n if (err) reject(err);\n else user.updateAttributes(attrs, (e: Error): void => (e ? reject(e) : resolve()));\n });\n });\n }\n\n /**\n * Validate the password against the policy set in the environments configuration.\n * In case there are errors, they are returned as an array of strings.\n */\n validatePasswordAgainstPolicy(password: string): string[] {\n const errors = [];\n if (password?.trim().length < this.passwordPolicy.minLength) errors.push('MIN_LENGTH');\n if (this.passwordPolicy.requireDigits && !/\\d/.test(password)) errors.push('REQUIRE_DIGITS');\n if (this.passwordPolicy.requireLowercase && !/[a-z]/.test(password)) errors.push('REQUIRE_LOWERCASE');\n if (this.passwordPolicy.requireSymbols && !/[\\^\\$\\*\\.\\_\\~\\`\\+\\=@\\!\\?\\>\\<\\:\\;\\\\\\,\\#\\%\\&]/.test(password))\n errors.push('REQUIRE_SYMBOLS');\n if (this.passwordPolicy.requireUppercase && !/[A-Z]/.test(password)) errors.push('REQUIRE_UPPERCASE');\n return errors;\n }\n /**\n * Get a complete password policy pattern, based on the environments configuration, to use on password input fields.\n * Note: some of the symbols couldn't be included because unsupported by the input[pattern] attribute.\n */\n getPasswordPolicyPatternForInput(): string {\n let pattern = '';\n if (this.passwordPolicy.requireDigits) pattern += `(?=.*[0-9])`;\n if (this.passwordPolicy.requireLowercase) pattern += `(?=.*[a-z])`;\n if (this.passwordPolicy.requireSymbols) pattern += `(?=.*[\\^\\$\\*\\.\\_\\~\\`\\+\\=@\\!\\?\\>\\<\\:\\;\\\\\\,\\#\\%\\&])`;\n if (this.passwordPolicy.requireUppercase) pattern += `(?=.*[A-Z])`;\n pattern += `.{${this.passwordPolicy.minLength},}`;\n return pattern;\n }\n}\n\n/**\n * The possible actions following a successful login.\n */\nexport enum LoginOutcomeActions {\n NONE = 'none',\n NEW_PASSWORD = 'newPassword',\n MFA_CHALLENGE = 'mfaChallenge',\n MFA_SETUP = 'mfaSetup'\n}\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { Browser } from '@capacitor/browser';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService, LoginOutcomeActions } from './auth.service';\n\nimport { environment as env } from '@env';\n\n@Component({\n selector: 'idea-sign-in',\n templateUrl: 'signIn.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEASignInPage {\n title = env.idea.app.title;\n registrationPossible = env.idea.auth.registrationIsPossible;\n hasIntroPage = env.idea.app.hasIntroPage;\n website = env.idea.website;\n\n email: string;\n password: string;\n agreementsCheck = true;\n newAccountRegistered = false;\n errorMsg: string;\n darkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;\n\n constructor(\n private navCtrl: NavController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private t: IDEATranslationsService,\n private auth: IDEAAuthService\n ) {}\n ionViewDidEnter(): void {\n // manage the scenario in which we just created a new account (show a explanatory message: email must be confirmed)\n this.newAccountRegistered = !!this.auth.getNewAccountJustRegistered();\n if (this.newAccountRegistered) this.email = this.auth.getNewAccountJustRegistered();\n }\n\n async login(): Promise<void> {\n if (!this.agreementsCheck) return;\n try {\n this.errorMsg = null;\n await this.loading.show();\n const loginAction = await this.auth.login(this.email, this.password);\n if (loginAction === LoginOutcomeActions.NEW_PASSWORD) this.navCtrl.navigateForward(['auth', 'new-password']);\n else if (loginAction === LoginOutcomeActions.MFA_CHALLENGE)\n this.navCtrl.navigateForward(['auth', 'mfa-challenge']);\n else if (loginAction === LoginOutcomeActions.MFA_SETUP) this.navCtrl.navigateForward(['auth', 'setup-mfa']);\n else window.location.assign('');\n } catch (err) {\n if ((err as any).name === 'UserNotConfirmedException')\n this.errorMsg = this.t._('IDEA_AUTH.CONFIRM_YOUR_EMAIL_TO_LOGIN');\n else if (\n (err as any).name === 'UserLambdaValidationException' &&\n (err as any).message?.includes('@IDEA_COGNITO_TRANSITION')\n )\n this.errorMsg = this.t._('IDEA_AUTH.CHANGE_YOUR_PASSWORD_TO_LOGIN');\n this.message.error('IDEA_AUTH.AUTHENTICATION_FAILED');\n } finally {\n this.loading.hide();\n }\n }\n\n goToIntro(): void {\n this.navCtrl.navigateBack(['intro']);\n }\n goToForgotPassword(): void {\n this.navCtrl.navigateForward(['auth/forgot-password']);\n }\n goToRegistration(): void {\n this.navCtrl.navigateForward(['auth', 'sign-up']);\n }\n\n translationExists(key: string): boolean {\n return !!this.t._(key);\n }\n\n async openLink(url: string): Promise<void> {\n await Browser.open({ url });\n }\n}\n","<ion-content>\n <ion-card color=\"warning\" *ngIf=\"newAccountRegistered\">\n <ion-card-content>{{ 'IDEA_AUTH.CONFIRM_YOUR_EMAIL_TO_LOGIN' | translate }}</ion-card-content>\n </ion-card>\n <form class=\"flexBox\">\n <div>\n <ion-card class=\"authCard\">\n <ion-img\n [title]=\"'IDEA_AUTH.SERVICE_LOGO' | translate\"\n [src]=\"darkMode ? 'assets/icons/icon-auth-alt.svg' : 'assets/icons/icon-auth.svg'\"\n ></ion-img>\n <ion-card-header>\n <ion-card-title color=\"primary\" *ngIf=\"title\">{{ title }}</ion-card-title>\n <ion-card-subtitle *ngIf=\"translationExists('IDEA_VARIABLES.TAGLINE')\">\n {{ 'IDEA_VARIABLES.TAGLINE' | translate }}\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\"><b>{{ 'IDEA_AUTH.WARNING' | translate }}.</b> {{ errorMsg }}</p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"email\"\n [placeholder]=\"'IDEA_AUTH.EMAIL' | translate\"\n [title]=\"'IDEA_AUTH.EMAIL_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"login()\"\n ></ion-input>\n </ion-item>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n id=\"current-password\"\n type=\"password\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"current-password\"\n [clearOnEdit]=\"false\"\n [placeholder]=\"'IDEA_AUTH.PASSWORD' | translate\"\n [title]=\"'IDEA_AUTH.PASSWORD_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"password\"\n (keyup.enter)=\"login()\"\n ></ion-input>\n </ion-item>\n <ion-row\n class=\"agreementsAcceptanceRow\"\n *ngIf=\"\n !registrationPossible &&\n (translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL'))\n \"\n >\n <ion-col>\n <ion-checkbox\n size=\"small\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"agreementsCheck\"\n ></ion-checkbox>\n {{ 'IDEA_AUTH.AGREEMENTS_CHECK_LOGIN' | translate }}:\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\"\n [title]=\"'IDEA_AUTH.TERMS_AND_CONDITIONS_HINT' | translate\"\n [href]=\"'IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL' | translate\"\n >\n {{ 'IDEA_AUTH.TERMS_AND_CONDITIONS' | translate }}\n </a>\n <ion-text\n *ngIf=\"\n translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL') && translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\n \"\n >\n &\n </ion-text>\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL')\"\n [title]=\"'IDEA_AUTH.PRIVACY_POLICY_HINT' | translate\"\n [href]=\"'IDEA_VARIABLES.PRIVACY_POLICY_URL' | translate\"\n >\n {{ 'IDEA_AUTH.PRIVACY_POLICY' | translate }}\n </a>\n </ion-col>\n </ion-row>\n <ion-button\n expand=\"block\"\n [disabled]=\"!agreementsCheck\"\n [title]=\"'IDEA_AUTH.SIGN_IN_HINT' | translate\"\n (click)=\"login()\"\n >\n {{ 'IDEA_AUTH.SIGN_IN' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n *ngIf=\"registrationPossible\"\n [title]=\"'IDEA_AUTH.CREATE_AN_ACCOUNT_HINT' | translate\"\n (click)=\"goToRegistration()\"\n >\n {{ 'IDEA_AUTH.CREATE_AN_ACCOUNT' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.I_FORGOT_MY_PASSWORD_HINT' | translate\"\n (click)=\"goToForgotPassword()\"\n >\n {{ 'IDEA_AUTH.I_FORGOT_MY_PASSWORD' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n color=\"medium\"\n class=\"smallCaseButton\"\n *ngIf=\"hasIntroPage\"\n [title]=\"'IDEA_AUTH.BACK_TO_INTRO_HINT' | translate\"\n (click)=\"goToIntro()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_INTRO' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n <ion-img\n class=\"ideaLogo\"\n *ngIf=\"website\"\n [src]=\"darkMode ? './assets/icons/idea-alt.png' : './assets/icons/idea.png'\"\n [title]=\"'IDEA_AUTH.IDEA_TAGLINE' | translate\"\n (click)=\"openLink(website)\"\n ></ion-img>\n </div>\n </form>\n</ion-content>\n","import { Component } from '@angular/core';\n\nimport { environment as env } from '@env';\n\n@Component({\n selector: 'idea-password-policy',\n template: `\n <ion-card class=\"passwordPolicyCard\">\n <ion-card-header>\n <ion-card-title>{{ 'IDEA_AUTH.PASSWORD_REQUIREMENTS_TITLE' | translate }}</ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <ul>\n <li>{{ 'IDEA_AUTH.PASSWORD_REQUIREMENTS.MIN_LENGTH' | translate : { n: passwordPolicy.minLength } }}</li>\n <li *ngIf=\"passwordPolicy.requireDigits\">\n {{ 'IDEA_AUTH.PASSWORD_REQUIREMENTS.REQUIRE_DIGITS' | translate }}\n </li>\n <li *ngIf=\"passwordPolicy.requireSymbols\">\n {{ 'IDEA_AUTH.PASSWORD_REQUIREMENTS.REQUIRE_SYMBOLS' | translate }}\n </li>\n <li *ngIf=\"passwordPolicy.requireUppercase\">\n {{ 'IDEA_AUTH.PASSWORD_REQUIREMENTS.REQUIRE_UPPERCASE' | translate }}\n </li>\n <li *ngIf=\"passwordPolicy.requireLowercase\">\n {{ 'IDEA_AUTH.PASSWORD_REQUIREMENTS.REQUIRE_LOWERCASE' | translate }}\n </li>\n </ul>\n </ion-card-content>\n </ion-card>\n `,\n styles: [\n `\n ion-card.passwordPolicyCard {\n box-shadow: none;\n border: none;\n padding: 6px;\n }\n ion-card.passwordPolicyCard ion-card-title {\n font-size: 1rem;\n }\n ion-card.passwordPolicyCard ul {\n margin: 0;\n }\n `\n ]\n})\nexport class IDEAPasswordPolicyComponent {\n passwordPolicy = env.idea.auth.passwordPolicy;\n\n constructor() {}\n}\n","import { Component, OnInit } from '@angular/core';\nimport { NavController, PopoverController } from '@ionic/angular';\nimport { isEmpty } from 'idea-toolbox';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAPasswordPolicyComponent } from './passwordPolicy.component';\n\nimport { IDEAAuthService } from './auth.service';\n\nimport { environment as env } from '@env';\n\n@Component({\n selector: 'idea-sign-up',\n templateUrl: 'signUp.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEASignUpPage implements OnInit {\n email: string;\n password: string;\n agreementsCheck = false;\n passwordPolicy = env.idea.auth.passwordPolicy;\n errorMsg: string;\n\n constructor(\n private navCtrl: NavController,\n private popoverCtrl: PopoverController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private t: IDEATranslationsService,\n public auth: IDEAAuthService\n ) {}\n ngOnInit(): void {\n if (!env.idea.auth.registrationIsPossible) return this.goToAuth();\n this.agreementsCheck =\n this.t._('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || this.t._('IDEA_VARIABLES.PRIVACY_POLICY_URL')\n ? this.agreementsCheck\n : true;\n }\n\n async register(): Promise<void> {\n this.errorMsg = null;\n if (isEmpty(this.email, 'email')) this.errorMsg = this.t._('IDEA_AUTH.VALID_EMAIL_OBLIGATORY');\n else {\n const errors = this.auth.validatePasswordAgainstPolicy(this.password);\n if (errors.length)\n this.errorMsg = [\n this.t._('IDEA_AUTH.PASSWORD_REQUIREMENTS_FOLLOW'),\n ...errors.map(x =>\n this.t._('IDEA_AUTH.PASSWORD_REQUIREMENTS.'.concat(x), { n: this.passwordPolicy.minLength })\n )\n ].join(' ');\n }\n if (this.errorMsg) return this.message.error('IDEA_AUTH.REGISTRATION_FAILED');\n\n try {\n await this.loading.show();\n await this.auth.register(this.email, this.password);\n this.message.success('IDEA_AUTH.REGISTRATION_COMPLETED');\n this.goToAuth();\n } catch (err) {\n this.errorMsg = (err as any).message;\n this.message.error('IDEA_AUTH.REGISTRATION_FAILED');\n } finally {\n this.loading.hide();\n }\n }\n\n translationExists(key: string): boolean {\n return !!this.t._(key);\n }\n\n async openPasswordPolicy(event: Event): Promise<void> {\n const cssClass = 'passwordPolicyPopover';\n const popover = await this.popoverCtrl.create({ component: IDEAPasswordPolicyComponent, event, cssClass });\n await popover.present();\n }\n\n goToResendLink(): void {\n this.navCtrl.navigateForward(['auth/resend-link']);\n }\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.NEW_ACCOUNT' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.REGISTER_A_NEW_ACCOUNT_TO_THE_SYSTEM' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b> {{ 'IDEA_AUTH.ERROR' | translate }}. </b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n [placeholder]=\"'IDEA_AUTH.EMAIL' | translate\"\n [title]=\"'IDEA_AUTH.REGISTRATION_EMAIL_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"register()\"\n ></ion-input>\n </ion-item>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"password\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n [pattern]=\"auth.getPasswordPolicyPatternForInput()\"\n [clearOnEdit]=\"false\"\n [placeholder]=\"'IDEA_AUTH.PASSWORD' | translate\"\n [title]=\"'IDEA_AUTH.CHOOSE_A_PASSWORD' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"password\"\n (keyup.enter)=\"register()\"\n ></ion-input>\n <ion-button slot=\"end\" fill=\"clear\" color=\"dark\" (click)=\"openPasswordPolicy($event)\">\n <ion-icon icon=\"help-circle-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-item>\n <ion-row\n class=\"agreementsAcceptanceRow\"\n *ngIf=\"translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL')\"\n >\n <ion-col>\n <ion-checkbox\n size=\"small\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"agreementsCheck\"\n ></ion-checkbox>\n {{ 'IDEA_AUTH.AGREEMENTS_CHECK_REGISTRATION' | translate }}:\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\"\n [title]=\"'IDEA_AUTH.TERMS_AND_CONDITIONS_HINT' | translate\"\n [href]=\"'IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL' | translate\"\n >\n {{ 'IDEA_AUTH.TERMS_AND_CONDITIONS' | translate }}\n </a>\n <ion-text\n *ngIf=\"\n translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL') && translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\n \"\n >\n &\n </ion-text>\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL')\"\n [title]=\"'IDEA_AUTH.PRIVACY_POLICY_HINT' | translate\"\n [href]=\"'IDEA_VARIABLES.PRIVACY_POLICY_URL' | translate\"\n >\n {{ 'IDEA_AUTH.PRIVACY_POLICY' | translate }}\n </a>\n </ion-col>\n </ion-row>\n <ion-button\n expand=\"block\"\n [disabled]=\"!agreementsCheck\"\n [title]=\"'IDEA_AUTH.CREATE_AN_ACCOUNT_HINT' | translate\"\n (click)=\"register()\"\n >\n {{ 'IDEA_AUTH.CREATE_AN_ACCOUNT' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.HAVEN_T_RECEIVED_CONFIRMATION_LINK_HINT' | translate\"\n (click)=\"goToResendLink()\"\n >\n {{ 'IDEA_AUTH.HAVEN_T_RECEIVED_CONFIRMATION_LINK' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component, OnInit } from '@angular/core';\nimport { NavController, PopoverController } from '@ionic/angular';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAPasswordPolicyComponent } from './passwordPolicy.component';\n\nimport { IDEAAuthService } from './auth.service';\n\nimport { environment as env } from '@env';\n\n@Component({\n selector: 'idea-new-password',\n templateUrl: 'newPassword.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEANewPasswordPage implements OnInit {\n newPassword: string;\n passwordPolicy = env.idea.auth.passwordPolicy;\n errorMsg: string;\n\n constructor(\n private navCtrl: NavController,\n private popoverCtrl: PopoverController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private t: IDEATranslationsService,\n public auth: IDEAAuthService\n ) {}\n ngOnInit(): void {\n if (!this.auth.challengeUsername) this.goToAuth();\n }\n\n async confirmNewPassword(): Promise<void> {\n try {\n this.errorMsg = null;\n const errors = this.auth.validatePasswordAgainstPolicy(this.newPassword);\n if (errors.length)\n this.errorMsg = [\n this.t._('IDEA_AUTH.PASSWORD_REQUIREMENTS_FOLLOW'),\n ...errors.map(x =>\n this.t._('IDEA_AUTH.PASSWORD_REQUIREMENTS.'.concat(x), { n: this.passwordPolicy.minLength })\n )\n ].join(' ');\n if (this.errorMsg) return this.message.error('IDEA_AUTH.PASSWORD_REQUIREMENTS_FOLLOW');\n\n await this.loading.show();\n await this.auth.confirmNewPassword(this.newPassword);\n window.location.assign('');\n } catch (error) {\n this.errorMsg = (error as any).message;\n this.message.error('IDEA_AUTH.PASSWORD_REQUIREMENTS_FOLLOW');\n } finally {\n this.loading.hide();\n }\n }\n\n async openPasswordPolicy(event: Event): Promise<void> {\n const cssClass = 'passwordPolicyPopover';\n const popover = await this.popoverCtrl.create({ component: IDEAPasswordPolicyComponent, event, cssClass });\n await popover.present();\n }\n\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.CHOOSE_A_PASSWORD' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.YOU_NEED_TO_CHOOSE_A_NEW_PASSWORD' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b> {{ 'IDEA_AUTH.ERROR' | translate }}. </b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"password\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"new-password\"\n [pattern]=\"auth.getPasswordPolicyPatternForInput()\"\n [clearOnEdit]=\"false\"\n [placeholder]=\"'IDEA_AUTH.PASSWORD' | translate\"\n [title]=\"'IDEA_AUTH.CHOOSE_A_PASSWORD' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"newPassword\"\n (keyup.enter)=\"confirmNewPassword()\"\n ></ion-input>\n <ion-button slot=\"end\" fill=\"clear\" color=\"dark\" (click)=\"openPasswordPolicy($event)\">\n <ion-icon icon=\"help-circle-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-item>\n <ion-button\n expand=\"block\"\n [title]=\"'IDEA_AUTH.CONFIRM_NEW_PASSWORD_HINT' | translate\"\n (click)=\"confirmNewPassword()\"\n >\n {{ 'IDEA_AUTH.CONFIRM_NEW_PASSWORD' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\n@Component({\n selector: 'idea-resend-link',\n templateUrl: 'resendLink.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAResendLinkPage {\n email: string;\n errorMsg: string;\n\n constructor(\n private navCtrl: NavController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private auth: IDEAAuthService,\n private t: IDEATranslationsService\n ) {}\n\n async resendConfirmationLink(): Promise<void> {\n this.errorMsg = null;\n if (!this.email) {\n this.errorMsg = this.t._('IDEA_AUTH.VALID_EMAIL_OBLIGATORY');\n this.message.error('IDEA_AUTH.SENDING_FAILED');\n return;\n }\n try {\n await this.loading.show();\n await this.auth.resendConfirmationCode(this.email);\n this.message.success('IDEA_AUTH.CONFIRMATION_LINK_SENT');\n this.goToAuth();\n } catch (error) {\n this.errorMsg = this.t._('IDEA_AUTH.IS_THE_EMAIL_CORRECT');\n this.message.error('IDEA_AUTH.SENDING_FAILED');\n } finally {\n this.loading.hide();\n }\n }\n\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.CONFIRM_ACCOUNT' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.RESEND_CONFIRMATION_LINK_HINT' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b> {{ 'IDEA_AUTH.ERROR' | translate }}. </b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"email\"\n [placeholder]=\"'IDEA_AUTH.EMAIL' | translate\"\n [title]=\"'IDEA_AUTH.EMAIL_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"resendConfirmationLink()\"\n ></ion-input>\n </ion-item>\n <ion-button\n expand=\"block\"\n [title]=\"'IDEA_AUTH.RESEND_LINK_HINT' | translate\"\n (click)=\"resendConfirmationLink()\"\n >\n {{ 'IDEA_AUTH.RESEND_LINK' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { IDEAMessageService, IDEALoadingService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\n@Component({\n selector: 'idea-forgot-password',\n templateUrl: 'forgotPassword.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAForgotPasswordPage {\n email: string;\n\n constructor(\n private navCtrl: NavController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private auth: IDEAAuthService\n ) {}\n\n async forgotPassword(): Promise<void> {\n try {\n await this.loading.show();\n await this.auth.forgotPassword(this.email);\n this.message.success('IDEA_AUTH.PASSWORD_RESET_CODE_SENT');\n this.goToConfirmPassword();\n } catch (error) {\n this.message.error('IDEA_AUTH.USER_NOT_FOUND');\n } finally {\n this.loading.hide();\n }\n }\n\n goToConfirmPassword(): void {\n this.navCtrl.navigateForward(['auth/confirm-password'], { queryParams: { email: this.email ?? null } });\n }\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.PASSWORD_RESET' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.PASSWORD_RESET_HINT' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"email\"\n [placeholder]=\"'IDEA_AUTH.EMAIL' | translate\"\n [title]=\"'IDEA_AUTH.EMAIL_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"forgotPassword()\"\n ></ion-input>\n </ion-item>\n <ion-button expand=\"block\" [title]=\"'IDEA_AUTH.RESET_MY_PASSWORD_HINT' | translate\" (click)=\"forgotPassword()\">\n {{ 'IDEA_AUTH.RESET_MY_PASSWORD' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.ALREADY_HAVE_A_RESET_CODE_HINT' | translate\"\n (click)=\"goToConfirmPassword()\"\n >\n {{ 'IDEA_AUTH.ALREADY_HAVE_A_RESET_CODE' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component, OnInit } from '@angular/core';\nimport { NavController, PopoverController } from '@ionic/angular';\nimport { ActivatedRoute } from '@angular/router';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAPasswordPolicyComponent } from './passwordPolicy.component';\n\nimport { IDEAAuthService } from './auth.service';\n\nimport { environment as env } from '@env';\n\n@Component({\n selector: 'idea-confirm-password',\n templateUrl: 'confirmPassword.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAConfirmPasswordPage implements OnInit {\n email: string;\n newPassword: string;\n code: string;\n passwordPolicy = env.idea.auth.passwordPolicy;\n errorMsg: string;\n\n constructor(\n private navCtrl: NavController,\n private route: ActivatedRoute,\n private popoverCtrl: PopoverController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private t: IDEATranslationsService,\n public auth: IDEAAuthService\n ) {}\n ngOnInit(): void {\n this.email = this.route.snapshot.queryParamMap.get('email') ?? null;\n if (!this.email && this.route.snapshot.queryParams.user)\n this.email = decodeURIComponent(this.route.snapshot.queryParams.user);\n this.code = this.route.snapshot.queryParams.code;\n }\n\n async confirmPassword(): Promise<void> {\n try {\n this.errorMsg = null;\n const errors = this.auth.validatePasswordAgainstPolicy(this.newPassword);\n if (errors.length)\n this.errorMsg = [\n this.t._('IDEA_AUTH.PASSWORD_REQUIREMENTS_FOLLOW'),\n ...errors.map(x =>\n this.t._('IDEA_AUTH.PASSWORD_REQUIREMENTS.'.concat(x), { n: this.passwordPolicy.minLength })\n )\n ].join(' ');\n if (this.errorMsg) return this.message.error('IDEA_AUTH.PASSWORD_REQUIREMENTS_FOLLOW');\n\n await this.loading.show();\n await this.auth.confirmPassword(this.email, this.code, this.newPassword);\n this.message.success('IDEA_AUTH.PASSWORD_CHANGED');\n this.goToAuth();\n } catch (error) {\n this.errorMsg = (error as any).message;\n this.message.error('IDEA_AUTH.PASSWORD_REQUIREMENTS_FOLLOW');\n } finally {\n this.loading.hide();\n }\n }\n\n async openPasswordPolicy(event: Event): Promise<void> {\n const cssClass = 'passwordPolicyPopover';\n const popover = await this.popoverCtrl.create({ component: IDEAPasswordPolicyComponent, event, cssClass });\n await popover.present();\n }\n\n goToForgotPassword(): void {\n this.navCtrl.navigateBack(['auth/forgot-password']);\n }\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.CHANGE_THE_PASSWORD' | translate }}</ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b> {{ 'IDEA_AUTH.ERROR' | translate }}. </b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"email\"\n [placeholder]=\"'IDEA_AUTH.EMAIL' | translate\"\n [title]=\"'IDEA_AUTH.EMAIL_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"confirmPassword()\"\n ></ion-input>\n </ion-item>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"disc\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"text\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n [placeholder]=\"'IDEA_AUTH.RESET_CODE' | translate\"\n [title]=\"'IDEA_AUTH.RESET_CODE_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"code\"\n (keyup.enter)=\"confirmPassword()\"\n ></ion-input>\n </ion-item>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"password\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"new-password\"\n [pattern]=\"auth.getPasswordPolicyPatternForInput()\"\n [clearOnEdit]=\"false\"\n [placeholder]=\"'IDEA_AUTH.NEW_PASSWORD' | translate\"\n [title]=\"'IDEA_AUTH.CHOOSE_A_PASSWORD' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"newPassword\"\n (keyup.enter)=\"confirmPassword()\"\n ></ion-input>\n <ion-button slot=\"end\" fill=\"clear\" color=\"dark\" (click)=\"openPasswordPolicy($event)\">\n <ion-icon icon=\"help-circle-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-item>\n <ion-button\n expand=\"block\"\n [title]=\"'IDEA_AUTH.CHANGE_MY_PASSWORD_HINT' | translate\"\n (click)=\"confirmPassword()\"\n >\n {{ 'IDEA_AUTH.CHANGE_MY_PASSWORD' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.HAVEN_T_RECEIVED_A_RESET_CODE_HINT' | translate\"\n (click)=\"goToForgotPassword()\"\n >\n {{ 'IDEA_AUTH.HAVEN_T_RECEIVED_A_RESET_CODE' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component, OnInit } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\n@Component({\n selector: 'idea-mfa-challenge',\n templateUrl: 'mfaChallenge.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAMFAChallengePage implements OnInit {\n otpCode: string;\n errorMsg: string;\n\n constructor(\n private navCtrl: NavController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private auth: IDEAAuthService,\n private t: IDEATranslationsService\n ) {}\n ngOnInit(): void {\n if (!this.auth.challengeUsername) this.goToAuth();\n }\n\n async completeMFAChallenge(): Promise<void> {\n try {\n this.errorMsg = null;\n await this.loading.show();\n await this.auth.completeMFAChallenge(this.otpCode);\n window.location.assign('');\n } catch (error) {\n this.errorMsg = this.t._('IDEA_AUTH.INVALID_OTP_CODE');\n this.message.error(this.errorMsg, true);\n } finally {\n this.loading.hide();\n }\n }\n\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.ENTER_OTP_CODE' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.ENTER_OTP_CODE_I' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b>{{ 'IDEA_AUTH.ERROR' | translate }}.</b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n inputmode=\"numeric\"\n [placeholder]=\"'IDEA_AUTH.OTP_CODE' | translate\"\n [title]=\"'IDEA_AUTH.ENTER_OTP_CODE' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"otpCode\"\n (keyup.enter)=\"completeMFAChallenge()\"\n ></ion-input>\n </ion-item>\n <ion-button\n expand=\"block\"\n [title]=\"'IDEA_AUTH.CONFIRM_OTP_CODE_HINT' | translate\"\n (click)=\"completeMFAChallenge()\"\n >\n {{ 'IDEA_AUTH.CONFIRM_OTP_CODE' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component, OnInit } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\nimport { toCanvas } from 'qrcode';\n\nimport { IDEAAuthService } from '../auth.service';\nimport { IDEALoadingService, IDEAMessageService } from '@idea-ionic/common';\n\n@Component({\n selector: 'idea-setup-mfa-modal',\n templateUrl: 'setupMFAModal.component.html',\n styleUrls: ['setupMFAModal.component.scss']\n})\nexport class IDEASetupMFAModalComponent implements OnInit {\n otpCode: string;\n isMFAEnabled: boolean;\n\n constructor(\n private modalCtrl: ModalController,\n private loading: IDEALoadingService,\n private message: IDEAMessageService,\n private auth: IDEAAuthService\n ) {}\n async ngOnInit(): Promise<void> {\n try {\n await this.loading.show();\n this.isMFAEnabled = await this.auth.checkIfUserHasMFAEnabled(true);\n if (!this.isMFAEnabled) {\n const url = await this.auth.getURLForEnablingMFA();\n await this.generateQRCodeCanvasByURL(url);\n }\n } catch (error) {\n this.message.error('COMMON.OPERATION_FAILED');\n } finally {\n this.loading.hide();\n }\n }\n private generateQRCodeCanvasByURL(url: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n const container = document.getElementById('qrCodeContainer');\n container.innerHTML = '';\n toCanvas(url, { errorCorrectionLevel: 'L' }, (err: Error, canvas: HTMLCanvasElement): void => {\n if (err) return reject(err);\n canvas.style.width = '100%';\n canvas.style.height = '100%';\n canvas.style.borderRadius = '4px';\n container.appendChild(canvas);\n resolve();\n });\n });\n }\n\n async setMFA(enable: boolean): Promise<void> {\n if (!this.otpCode) return;\n try {\n await this.loading.show();\n if (enable) await this.auth.enableMFA(this.otpCode);\n else await this.auth.disableMFA(this.otpCode);\n this.isMFAEnabled = enable;\n this.message.success('COMMON.OPERATION_COMPLETED');\n this.modalCtrl.dismiss({ enabled: enable });\n } catch (error) {\n this.message.error('COMMON.OPERATION_FAILED');\n } finally {\n this.loading.hide();\n }\n }\n\n close(): void {\n this.modalCtrl.dismiss();\n }\n}\n","<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close-circle-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-title>{{ (isMFAEnabled ? 'IDEA_AUTH.DISABLE_MFA' : 'IDEA_AUTH.SETUP_MFA') | translate }}</ion-title>\n </ion-toolbar>\n</ion-header>\n<ion-content class=\"ion-padding\">\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label class=\"ion-text-center\">\n <h2>{{ (isMFAEnabled ? 'IDEA_AUTH.DISABLE_MFA_I' : 'IDEA_AUTH.SETUP_MFA_I') | translate }}</h2>\n <p>{{ (isMFAEnabled ? 'IDEA_AUTH.DISABLE_MFA_II' : 'IDEA_AUTH.SETUP_MFA_II') | translate }}</p>\n </ion-label>\n </ion-list-header>\n <ion-card color=\"white\">\n <ion-card-content>\n <div id=\"qrCodeContainer\" *ngIf=\"!isMFAEnabled\"></div>\n <ion-item color=\"light\">\n <ion-label position=\"floating\">{{ 'IDEA_AUTH.OTP_CODE' | translate }}</ion-label>\n <ion-input type=\"text\" inputmode=\"numeric\" [(ngModel)]=\"otpCode\"></ion-input>\n </ion-item>\n <ion-button expand=\"block\" class=\"ion-margin-top\" [disabled]=\"!otpCode\" (click)=\"setMFA(!isMFAEnabled)\">\n {{ (isMFAEnabled ? 'IDEA_AUTH.DISABLE_MFA' : 'IDEA_AUTH.ENABLE_MFA') | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </ion-list>\n</ion-content>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\n\nimport { IDEASetupMFAModalComponent } from './setupMFAModal.component';\n\nimport { IDEAAuthService } from '../auth.service';\n\n@Component({\n selector: 'idea-setup-mfa-button',\n templateUrl: 'setupMFAButton.component.html',\n styleUrls: ['setupMFAButton.component.scss']\n})\nexport class IDEASetupMFAButtonComponent implements OnInit {\n /**\n * The color of the button.\n */\n @Input() color: string;\n /**\n * The fill option for the button.\n */\n @Input() fill: string;\n /**\n * Trigger then the MFA setup changes.\n */\n @Output() change = new EventEmitter<boolean>();\n\n isMFAEnabled: boolean;\n\n constructor(private modalCtrl: ModalController, private auth: IDEAAuthService) {}\n async ngOnInit(): Promise<void> {\n this.isMFAEnabled = await this.auth.checkIfUserHasMFAEnabled(true);\n }\n\n async openMFAModal(): Promise<void> {\n const modal = await this.modalCtrl.create({ component: IDEASetupMFAModalComponent, backdropDismiss: false });\n modal.onDidDismiss().then(({ data }): void => {\n if (data) {\n this.isMFAEnabled = data.enabled;\n this.change.emit(data.enabled);\n }\n });\n await modal.present();\n }\n}\n","<ion-button *ngIf=\"isMFAEnabled !== undefined\" [color]=\"color\" [fill]=\"fill\" (click)=\"openMFAModal()\">\n {{ (isMFAEnabled ? 'IDEA_AUTH.DISABLE_MFA' : 'IDEA_AUTH.SETUP_MFA') | translate }}\n</ion-button>\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\n\n@Component({\n selector: 'idea-mfa-setup',\n templateUrl: 'setupMFA.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEASetupMFAPage {\n constructor(private navCtrl: NavController) {}\n\n reloadApp(): void {\n window.location.assign('');\n }\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.SETUP_MFA' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.MFA_IS_MANDATORY' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <idea-setup-mfa-button (change)=\"reloadApp()\"></idea-setup-mfa-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IonicModule } from '@ionic/angular';\nimport { FormsModule } from '@angular/forms';\nimport { IDEATranslationsModule } from '@idea-ionic/common';\n\nimport { IDEASetupMFAModalComponent } from './setupMFAModal.component';\nimport { IDEASetupMFAButtonComponent } from './setupMFAButton.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule, IonicModule, IDEATranslationsModule],\n declarations: [IDEASetupMFAModalComponent, IDEASetupMFAButtonComponent],\n exports: [IDEASetupMFAModalComponent, IDEASetupMFAButtonComponent]\n})\nexport class IDEASetupMFAModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\nimport { RouterModule } from '@angular/router';\n\nimport { IDEATranslationsModule } from '@idea-ionic/common';\n\nimport { IDEASignInPage } from './signIn.page';\nimport { IDEASignUpPage } from './signUp.page';\nimport { IDEANewPasswordPage } from './newPassword.page';\nimport { IDEAResendLinkPage } from './resendLink.page';\nimport { IDEAForgotPasswordPage } from './forgotPassword.page';\nimport { IDEAConfirmPasswordPage } from './confirmPassword.page';\nimport { IDEAMFAChallengePage } from './mfaChallenge.page';\nimport { IDEASetupMFAPage } from './setupMFA.page';\nimport { IDEAPasswordPolicyComponent } from './passwordPolicy.component';\n\nimport { IDEASetupMFAModule } from './setupMFA/setupMFA.module';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n IonicModule,\n IDEATranslationsModule,\n RouterModule.forChild([\n { path: '', redirectTo: 'sign-in', pathMatch: 'full' },\n { path: 'sign-in', component: IDEASignInPage },\n { path: 'sign-up', component: IDEASignUpPage },\n { path: 'new-password', component: IDEANewPasswordPage },\n { path: 'mfa-challenge', component: IDEAMFAChallengePage },\n { path: 'setup-mfa', component: IDEASetupMFAPage },\n { path: 'resend-link', component: IDEAResendLinkPage },\n { path: 'forgot-password', component: IDEAForgotPasswordPage },\n { path: 'confirm-password', component: IDEAConfirmPasswordPage }\n ]),\n IDEASetupMFAModule\n ],\n declarations: [\n IDEASignInPage,\n IDEASignUpPage,\n IDEANewPasswordPage,\n IDEAResendLinkPage,\n IDEAForgotPasswordPage,\n IDEAConfirmPasswordPage,\n IDEAMFAChallengePage,\n IDEASetupMFAPage,\n IDEAPasswordPolicyComponent\n ]\n})\nexport class IDEAAuthModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["env","i1","i3.IDEAAuthService","i2","i3","i4","i4.IDEAAuthService","i5","i6","i2.IDEAAuthService","i3.IDEASetupMFAButtonComponent"],"mappings":";;;;;;;;;;;;;;;;;;AAeA;;AAEG;AACH,MAAM,oBAAoB,GAAG,SAAS,CAAC,MAAM,CAACA,WAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEhE;;;;AAIG;MAEU,eAAe,CAAA;AAY1B,IAAA,WAAA,CAAoB,OAA2B,EAAA;QAA3B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;AAJvC,QAAA,IAAA,CAAA,cAAc,GAAGA,WAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAIA,WAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAExD,IAAc,CAAA,cAAA,GAAGA,WAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;AAGpD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAe,CAAC;AAClC,YAAA,UAAU,EAAEA,WAAG,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU;AACtC,YAAA,QAAQ,EAAEA,WAAG,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB;AAC3C,SAAA,CAAC,CAAC;KACJ;AAED;;AAEG;IACK,kBAAkB,CAAC,QAAgB,EAAE,GAAW,EAAA;AACtD,QAAA,OAAO,IAAI,qBAAqB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;KACzE;AACD;;AAEG;AACH,IAAA,kBAAkB,CAAC,QAAgB,EAAA;AACjC,QAAA,OAAO,IAAI,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;KACrE;AACD;;AAEG;IACK,oBAAoB,CAAC,IAAY,EAAE,KAAa,EAAA;AACtD,QAAA,OAAO,IAAI,oBAAoB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;KAC/D;AAED;;AAEG;IACH,KAAK,CAAC,QAAgB,EAAE,QAAgB,EAAA;QACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAU;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;gBACjE,SAAS,EAAE,MACT,OAAO,CAACA,WAAG,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,mBAAmB,CAAC,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC;gBACrG,SAAS,EAAE,CAAC,GAAU,KAAW,MAAM,CAAC,GAAG,CAAC;gBAC5C,mBAAmB,EAAE,MAAW;AAC9B,oBAAA,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;AAClC,oBAAA,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;AAClC,oBAAA,OAAO,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;iBAC3C;gBACD,YAAY,EAAE,MAAW;AACvB,oBAAA,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;AAClC,oBAAA,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;AAClC,oBAAA,OAAO,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;iBAC5C;AACF,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AACD;;AAEG;AACH,IAAA,kBAAkB,CAAC,WAAmB,EAAA;QACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAU;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC7D,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE;AAC7F,gBAAA,SAAS,EAAE,MAAY,OAAO,EAAE;gBAChC,SAAS,EAAE,CAAC,GAAU,KAAW,MAAM,CAAC,GAAG,CAAC;gBAC5C,mBAAmB,EAAE,MACnB,IAAI,CAAC,4BAA4B,CAC/B,WAAW,EACX,EAAE,EACF;oBACE,SAAS,EAAE,MAAW;AACpB,wBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9B,wBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9B,wBAAA,OAAO,EAAE,CAAC;qBACX;oBACD,SAAS,EAAE,CAAC,GAAU,KAAW,MAAM,CAAC,GAAG,CAAC;iBAC7C,CACF;AACJ,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AACD;;AAEG;AACH,IAAA,oBAAoB,CAAC,OAAe,EAAA;QAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAU;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC7D,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE;AAC7F,gBAAA,SAAS,EAAE,MAAY,OAAO,EAAE;gBAChC,SAAS,EAAE,CAAC,GAAU,KAAW,MAAM,CAAC,GAAG,CAAC;gBAC5C,YAAY,EAAE,CAAC,aAA4B,KACzC,IAAI,CAAC,WAAW,CACd,OAAO,EACP;oBACE,SAAS,EAAE,MAAW;AACpB,wBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9B,wBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9B,wBAAA,OAAO,EAAE,CAAC;qBACX;oBACD,SAAS,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC;AAC9B,iBAAA,EACD,aAAa,CACd;AACJ,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AACD;;AAEG;AACH,IAAA,QAAQ,CAAC,QAAgB,EAAE,QAAgB,EAAE,UAAgB,EAAA;AAC3D,QAAA,UAAU,GAAG,UAAU,IAAI,EAAE,CAAC;QAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAU;;YAE3C,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,KAAK,MAAM,IAAI,IAAI,UAAU;gBAC3B,IAAI,UAAU,CAAC,IAAI,CAAC;AAAE,oBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YAEtF,IAAI,CAAC,UAAU,CAAC,KAAK;AAAE,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;;AAEhF,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,GAAU,EAAE,GAAkB,KAAU;AAC7F,gBAAA,IAAI,GAAG;AAAE,oBAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5B,gBAAA,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC;AACzC,gBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AACD;;AAEG;IACH,2BAA2B,GAAA;QACzB,OAAO,IAAI,CAAC,wBAAwB,CAAC;KACtC;AACD;;AAEG;IACH,mBAAmB,CAAC,QAAgB,EAAE,IAAY,EAAA;QAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAU;AAC3C,YAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,GAAU,KAC3E,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,CAC9B,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;AACD;;AAEG;AACH,IAAA,sBAAsB,CAAC,QAAgB,EAAA;QACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAU;AAC3C,YAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,sBAAsB,CAAC,CAAC,GAAU,MAAY,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;AAClH,SAAC,CAAC,CAAC;KACJ;AACD;;AAEG;AACH,IAAA,MAAM,CAAC,OAA6B,EAAA;AAClC,QAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QACpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAU;;YAE3C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAC1C;;YAEE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,MAAW;;gBAErD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;AAC5C,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,GAAU,KAAmB;;AAElD,oBAAA,IAAI,GAAG;wBAAE,OAAO,OAAO,EAAE,CAAC;;AAE1B,oBAAA,IAAIA,WAAG,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB;AAAE,wBAAA,MAAM,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;;oBAEzF,IAAI,OAAO,CAAC,MAAM;wBAChB,IAAI,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,MAAY,OAAO,EAAE,EAAE,SAAS,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;yBACrF;wBACH,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,wBAAA,OAAO,EAAE,CAAC;qBACX;AACH,iBAAC,CAAC,CAAC;aACJ,CAAC,CACL,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;AACD;;AAEG;AACH,IAAA,cAAc,CAAC,QAAgB,EAAA;QAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAU;AAC3C,YAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC;AAC/C,gBAAA,SAAS,EAAE,MAAY,OAAO,EAAE;gBAChC,SAAS,EAAE,CAAC,GAAU,KAAW,MAAM,CAAC,GAAG,CAAC;AAC7C,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AACD;;AAEG;AACH,IAAA,eAAe,CAAC,QAAgB,EAAE,IAAY,EAAE,MAAc,EAAA;QAC5D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAU;YAC3C,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE;AAC9D,gBAAA,SAAS,EAAE,MAAY,OAAO,EAAE;gBAChC,SAAS,EAAE,CAAC,GAAU,KAAW,MAAM,CAAC,GAAG,CAAC;AAC7C,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AACD;;AAEG;IACH,oBAAoB,GAAA;QAClB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAU;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;AAC5C,YAAA,IAAI,CAAC,IAAI;gBAAE,OAAO,MAAM,EAAE,CAAC;AAC3B,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,GAAU,KAAU;AACnC,gBAAA,IAAI,GAAG;AAAE,oBAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,CAAC,sBAAsB,CAAC;AAC1B,oBAAA,mBAAmB,EAAE,CAAC,UAAkB,KACtC,OAAO,CAAC,CAAA,eAAA,EAAkB,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAW,QAAA,EAAA,UAAU,EAAE,CAAC;oBAClF,SAAS,EAAE,CAAC,GAAQ,KAAW,MAAM,CAAC,GAAG,CAAC;AAC3C,iBAAA,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AACD;;AAEG;IACH,wBAAwB,CAAC,WAAW,GAAG,KAAK,EAAA;QAC1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAU;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;AAC5C,YAAA,IAAI,CAAC,IAAI;gBAAE,OAAO,MAAM,EAAE,CAAC;AAC3B,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,GAAU,KAAU;AACnC,gBAAA,IAAI,GAAG;AAAE,oBAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,CAAC,WAAW,CACd,CAAC,GAAG,EAAE,IAAI,KAAU;AAClB,oBAAA,IAAI,GAAG;AAAE,wBAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5B,oBAAA,MAAM,YAAY,GAAG,CAAC,EAAE,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC;oBAC3G,OAAO,CAAC,YAAY,CAAC,CAAC;AACxB,iBAAC,EACD,EAAE,WAAW,EAAE,CAChB,CAAC;AACJ,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AACD;;AAEG;IACK,YAAY,CAAC,GAAW,EAAE,aAAqB,EAAE,OAAO,GAAG,IAAI,EAAE,SAAS,GAAG,IAAI,EAAA;QACvF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAU;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;AAC5C,YAAA,IAAI,CAAC,IAAI;gBAAE,OAAO,MAAM,EAAE,CAAC;AAC3B,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,GAAU,KAAU;AACnC,gBAAA,IAAI,GAAG;AAAE,oBAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5B,gBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,aAAa,EAAE;AAC3C,oBAAA,SAAS,EAAE,MACT,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,CAAC,GAAU,KACxF,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,CAC9B;oBACH,SAAS,EAAE,CAAC,GAAG,KAAW,MAAM,CAAC,GAAG,CAAC;AACtC,iBAAA,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AACD;;AAEG;AACH,IAAA,SAAS,CAAC,GAAW,EAAE,aAAa,GAAG,SAAS,EAAA;AAC9C,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;KAC1D;AACD;;AAEG;AACH,IAAA,UAAU,CAAC,GAAW,EAAE,aAAa,GAAG,SAAS,EAAA;AAC/C,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;KAC5D;AACD;;;;AAIG;IACH,eAAe,CAAC,cAAuB,EAAE,oBAAqD,EAAA;QAC5F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAU;AAC3C,YAAA,IAAI,cAAc,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;gBACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;;AAEjG,gBAAA,MAAM,CAAC,gBAAgB,CACrB,QAAQ,EACR,MACE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,oBAAoB,CAAC;;AAE7C,qBAAA,IAAI,CAAC,MAAM,IAAI,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAC1D,CAAC;aACH;iBAAM;gBACL,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;AAC5C,gBAAA,IAAI,CAAC,IAAI;oBAAE,OAAO,MAAM,EAAE,CAAC;gBAC3B,IAAI,CAAC,UAAU,CAAC,CAAC,GAAU,EAAE,OAA2B,KAAU;AAChE,oBAAA,IAAI,GAAG;AAAE,wBAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC5B,IAAI,CAAC,WAAW,CACd,CAAC,GAAG,EAAE,IAAI,KAAU;AAClB,wBAAA,IAAI,GAAG;AAAE,4BAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5B,wBAAA,MAAM,YAAY,GAAG,CAAC,EACpB,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAClF,CAAC;wBACF,IAAI,CAAC,YAAY,IAAIA,WAAG,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB;4BAClD,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;wBAC1D,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAQ,EAAE,UAAkC,KAAU;AAC5E,4BAAA,IAAI,CAAC;AAAE,gCAAA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;;4BAExB,MAAM,WAAW,GAAQ,EAAE,CAAC;4BAC5B,UAAU,CAAC,OAAO,CAAC,CAAC,CAAuB,MAAc,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;;4BAEnG,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,aAAa,EAAE,CAAC;4BAC7D,MAAM,MAAM,GAAa,WAAW,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;AAC7D,4BAAA,WAAW,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;;AAE/B,4BAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,GAAG,IAAG;;AAExC,gCAAA,IAAI,GAAG;AAAE,oCAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;;AAE5B,gCAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;;AAE3E,gCAAA,UAAU,CACR,MAAY,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,oBAAoB,CAAC,EACjG,EAAE,GAAG,EAAE,GAAG,IAAI,CACf,CAAC;;AAEF,gCAAA,IAAI,cAAc;oCAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;;AAErE,gCAAA,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;AACxE,6BAAC,CAAC,CAAC;AACL,yBAAC,CAAC,CAAC;AACL,qBAAC,EACD,EAAE,WAAW,EAAE,IAAI,EAAE,CACtB,CAAC;AACJ,iBAAC,CAAC,CAAC;aACJ;AACH,SAAC,CAAC,CAAC;KACJ;AACD;;AAEG;AACK,IAAA,cAAc,CAAC,IAAiB,EAAE,YAAoB,EAAE,QAAwC,EAAA;AACtG,QAAA,IAAI,CAAC,cAAc,CACjB,IAAI,mBAAmB,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,EACvD,CAAC,GAAU,EAAE,OAA2B,KAAU;YAChD,IAAI,GAAG,EAAE;;gBAEP,UAAU,CAAC,MAAY,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;aAC1F;iBAAM;;AAEL,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;;gBAE3E,UAAU,CACR,MAAY,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,EACrF,EAAE,GAAG,EAAE,GAAG,IAAI,CACf,CAAC;;AAEF,gBAAA,IAAI,QAAQ;oBAAE,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;aAC5D;AACH,SAAC,CACF,CAAC;KACH;AACD;;;;;AAKG;IACK,iBAAiB,CAAC,WAAgB,EAAE,QAA+B,EAAA;AACzE,QAAA,MAAM,MAAM,GAAa,WAAW,CAAC,QAAQ,CAAC,CAAC;;AAE/C,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC;AACjD,QAAA,IAAI,OAAO;YAAE,OAAO,QAAQ,EAAE,CAAC;;AAE/B,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC;AACjD,QAAA,IAAI,OAAO;YAAE,OAAO,QAAQ,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;;AAEtD,QAAA,IAAIA,WAAG,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB;YAAE,OAAO,IAAI,CAAC,4BAA4B,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;;AAE7G,QAAA,QAAQ,EAAE,CAAC;KACZ;AACD;;AAEG;AACK,IAAA,MAAM,4BAA4B,CAAC,WAAgB,EAAE,QAA+B,EAAA;;QAE1F,IAAI,gBAAgB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC/D,IAAI,CAAC,gBAAgB,EAAE;AACrB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC3D,YAAA,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACxD,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;SAC3D;;AAED,QAAA,MAAM,+BAA+B,GAAG,WAAW,CAAC,oBAAoB,CAAC,CAAC;;QAE1E,IAAI,CAAC,+BAA+B,EAAE;AACpC,YAAA,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,CAAC;AAC9C,iBAAA,IAAI,CAAC,MAAY,QAAQ,EAAE,CAAC;AAC5B,iBAAA,KAAK,CAAC,MAAY,QAAQ,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;;SAE9D;aAAM,IAAI,+BAA+B,KAAK,gBAAgB;AAAE,YAAA,QAAQ,EAAE,CAAC;;;AAEvE,YAAA,QAAQ,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;KAClD;AACD;;AAEG;AACK,IAAA,0BAA0B,CAAC,SAAkB,EAAA;QACnD,MAAM,UAAU,GAAQ,EAAE,CAAC;;AAE3B,QAAA,UAAU,CAAC,oBAAoB,CAAC,GAAG,SAAS,IAAI,EAAE,CAAC;AACnD,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;KAC9C;AACD;;AAEG;AACH,IAAA,oBAAoB,CAAC,UAAe,EAAA;QAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAU;;AAE3C,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAO,CAAC;YAC/B,KAAK,MAAM,IAAI,IAAI,UAAU;AAC3B,gBAAA,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,SAAS;AAAE,oBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpG,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;AAC5C,YAAA,IAAI,CAAC,IAAI;gBAAE,OAAO,MAAM,EAAE,CAAC;;AAE3B,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,GAAU,KAAU;AACnC,gBAAA,IAAI,GAAG;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;oBAChB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAQ,MAAY,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;AACrF,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AAED;;;AAGG;AACH,IAAA,6BAA6B,CAAC,QAAgB,EAAA;QAC5C,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,IAAI,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS;AAAE,YAAA,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACvF,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAE,YAAA,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC7F,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAE,YAAA,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACtG,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,cAAc,IAAI,CAAC,6CAA6C,CAAC,IAAI,CAAC,QAAQ,CAAC;AACrG,YAAA,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACjC,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAE,YAAA,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACtG,QAAA,OAAO,MAAM,CAAC;KACf;AACD;;;AAGG;IACH,gCAAgC,GAAA;QAC9B,IAAI,OAAO,GAAG,EAAE,CAAC;AACjB,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa;YAAE,OAAO,IAAI,aAAa,CAAC;AAChE,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,gBAAgB;YAAE,OAAO,IAAI,aAAa,CAAC;AACnE,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,cAAc;YAAE,OAAO,IAAI,mDAAmD,CAAC;AACvG,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,gBAAgB;YAAE,OAAO,IAAI,aAAa,CAAC;QACnE,OAAO,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,SAAS,IAAI,CAAC;AAClD,QAAA,OAAO,OAAO,CAAC;KAChB;8GA1cU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAf,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,eAAe,cADF,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;AA8clC;;AAEG;IACS,oBAKX;AALD,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,mBAAA,CAAA,cAAA,CAAA,GAAA,aAA4B,CAAA;AAC5B,IAAA,mBAAA,CAAA,eAAA,CAAA,GAAA,cAA8B,CAAA;AAC9B,IAAA,mBAAA,CAAA,WAAA,CAAA,GAAA,UAAsB,CAAA;AACxB,CAAC,EALW,mBAAmB,KAAnB,mBAAmB,GAK9B,EAAA,CAAA,CAAA;;MCjeY,cAAc,CAAA;IAazB,WACU,CAAA,OAAsB,EACtB,OAA2B,EAC3B,OAA2B,EAC3B,CAA0B,EAC1B,IAAqB,EAAA;QAJrB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAe;QACtB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;QAC3B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;QAC3B,IAAC,CAAA,CAAA,GAAD,CAAC,CAAyB;QAC1B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAiB;QAjB/B,IAAK,CAAA,KAAA,GAAGD,WAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B,IAAoB,CAAA,oBAAA,GAAGA,WAAG,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC;QAC5D,IAAY,CAAA,YAAA,GAAGA,WAAG,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;AACzC,QAAA,IAAA,CAAA,OAAO,GAAGA,WAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAI3B,IAAe,CAAA,eAAA,GAAG,IAAI,CAAC;QACvB,IAAoB,CAAA,oBAAA,GAAG,KAAK,CAAC;QAE7B,IAAQ,CAAA,QAAA,GAAG,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,OAAO,CAAC;KAQjE;IACJ,eAAe,GAAA;;QAEb,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACtE,IAAI,IAAI,CAAC,oBAAoB;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC;KACrF;AAED,IAAA,MAAM,KAAK,GAAA;QACT,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;AAClC,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAC1B,YAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrE,YAAA,IAAI,WAAW,KAAK,mBAAmB,CAAC,YAAY;gBAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;AACxG,iBAAA,IAAI,WAAW,KAAK,mBAAmB,CAAC,aAAa;gBACxD,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;AACrD,iBAAA,IAAI,WAAW,KAAK,mBAAmB,CAAC,SAAS;gBAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;;AACvG,gBAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACjC;QAAC,OAAO,GAAG,EAAE;AACZ,YAAA,IAAK,GAAW,CAAC,IAAI,KAAK,2BAA2B;gBACnD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC;AAC/D,iBAAA,IACF,GAAW,CAAC,IAAI,KAAK,+BAA+B;AACpD,gBAAA,GAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,0BAA0B,CAAC;gBAE1D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC;AACtE,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;SACvD;gBAAS;AACR,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACrB;KACF;IAED,SAAS,GAAA;QACP,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;KACtC;IACD,kBAAkB,GAAA;QAChB,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC;KACxD;IACD,gBAAgB,GAAA;QACd,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;KACnD;AAED,IAAA,iBAAiB,CAAC,GAAW,EAAA;QAC3B,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;KACxB;IAED,MAAM,QAAQ,CAAC,GAAW,EAAA;QACxB,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;KAC7B;8GAnEU,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,oDCd3B,o7LAsJA,EAAA,MAAA,EAAA,CAAA,mjDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,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,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,MAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,WAAA,EAAA,KAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,mEAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDxIa,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;+BACE,cAAc,EAAA,QAAA,EAAA,o7LAAA,EAAA,MAAA,EAAA,CAAA,mjDAAA,CAAA,EAAA,CAAA;;;MEoCb,2BAA2B,CAAA;AAGtC,IAAA,WAAA,GAAA;QAFA,IAAc,CAAA,cAAA,GAAGF,WAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;KAE9B;8GAHL,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAxC5B,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,iBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAiBU,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBA1CvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EACtB,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,0KAAA,CAAA,EAAA,CAAA;;;MCbU,cAAc,CAAA;IAOzB,WACU,CAAA,OAAsB,EACtB,WAA8B,EAC9B,OAA2B,EAC3B,OAA2B,EAC3B,CAA0B,EAC3B,IAAqB,EAAA;QALpB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAe;QACtB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAmB;QAC9B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;QAC3B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;QAC3B,IAAC,CAAA,CAAA,GAAD,CAAC,CAAyB;QAC3B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAiB;QAV9B,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;QACxB,IAAc,CAAA,cAAA,GAAGJ,WAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;KAU1C;IACJ,QAAQ,GAAA;AACN,QAAA,IAAI,CAACA,WAAG,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB;AAAE,YAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClE,QAAA,IAAI,CAAC,eAAe;AAClB,YAAA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,yCAAyC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAmC,CAAC;kBAChG,IAAI,CAAC,eAAe;kBACpB,IAAI,CAAC;KACZ;AAED,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC;aAC1F;AACH,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtE,IAAI,MAAM,CAAC,MAAM;gBACf,IAAI,CAAC,QAAQ,GAAG;AACd,oBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,wCAAwC,CAAC;AAClD,oBAAA,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IACb,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,kCAAkC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,CAC7F;AACF,iBAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACf;QACD,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;AAE9E,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAC1B,YAAA,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpD,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;YACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;QAAC,OAAO,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,QAAQ,GAAI,GAAW,CAAC,OAAO,CAAC;AACrC,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;SACrD;gBAAS;AACR,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACrB;KACF;AAED,IAAA,iBAAiB,CAAC,GAAW,EAAA;QAC3B,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;KACxB;IAED,MAAM,kBAAkB,CAAC,KAAY,EAAA;QACnC,MAAM,QAAQ,GAAG,uBAAuB,CAAC;AACzC,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,2BAA2B,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC3G,QAAA,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;KACzB;IAED,cAAc,GAAA;QACZ,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;KACpD;IACD,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;KACrC;8GAlEU,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,oDChB3B,01JA2HA,EAAA,MAAA,EAAA,CAAA,mjDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,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,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,MAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,WAAA,EAAA,KAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,mEAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FD3Ga,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;+BACE,cAAc,EAAA,QAAA,EAAA,01JAAA,EAAA,MAAA,EAAA,CAAA,mjDAAA,CAAA,EAAA,CAAA;;;MEGb,mBAAmB,CAAA;IAK9B,WACU,CAAA,OAAsB,EACtB,WAA8B,EAC9B,OAA2B,EAC3B,OAA2B,EAC3B,CAA0B,EAC3B,IAAqB,EAAA;QALpB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAe;QACtB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAmB;QAC9B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;QAC3B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;QAC3B,IAAC,CAAA,CAAA,GAAD,CAAC,CAAyB;QAC3B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAiB;QAT9B,IAAc,CAAA,cAAA,GAAGF,WAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;KAU1C;IACJ,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;KACnD;AAED,IAAA,MAAM,kBAAkB,GAAA;AACtB,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzE,IAAI,MAAM,CAAC,MAAM;gBACf,IAAI,CAAC,QAAQ,GAAG;AACd,oBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,wCAAwC,CAAC;AAClD,oBAAA,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IACb,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,kCAAkC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,CAC7F;AACF,iBAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACd,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;AAEvF,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACrD,YAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAC5B;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,QAAQ,GAAI,KAAa,CAAC,OAAO,CAAC;AACvC,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;SAC9D;gBAAS;AACR,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACrB;KACF;IAED,MAAM,kBAAkB,CAAC,KAAY,EAAA;QACnC,MAAM,QAAQ,GAAG,uBAAuB,CAAC;AACzC,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,2BAA2B,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC3G,QAAA,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;KACzB;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;KACrC;8GAjDU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,eAAA,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,yDCfhC,8mEAsDA,EAAA,MAAA,EAAA,CAAA,mjDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,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,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,MAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,WAAA,EAAA,KAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,mEAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDvCa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,mBAAmB,EAAA,QAAA,EAAA,8mEAAA,EAAA,MAAA,EAAA,CAAA,mjDAAA,CAAA,EAAA,CAAA;;;MEAlB,kBAAkB,CAAA;IAI7B,WACU,CAAA,OAAsB,EACtB,OAA2B,EAC3B,OAA2B,EAC3B,IAAqB,EACrB,CAA0B,EAAA;QAJ1B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAe;QACtB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;QAC3B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;QAC3B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAiB;QACrB,IAAC,CAAA,CAAA,GAAD,CAAC,CAAyB;KAChC;AAEJ,IAAA,MAAM,sBAAsB,GAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC;AAC7D,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC/C,OAAO;SACR;AACD,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnD,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;YACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC;AAC3D,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;SAChD;gBAAS;AACR,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACrB;KACF;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;KACrC;8GAlCU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,wDCX/B,i4DAmDA,EAAA,MAAA,EAAA,CAAA,mjDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,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,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,MAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,WAAA,EAAA,KAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,mEAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDxCa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACE,kBAAkB,EAAA,QAAA,EAAA,i4DAAA,EAAA,MAAA,EAAA,CAAA,mjDAAA,CAAA,EAAA,CAAA;;;MEIjB,sBAAsB,CAAA;AAGjC,IAAA,WAAA,CACU,OAAsB,EACtB,OAA2B,EAC3B,OAA2B,EAC3B,IAAqB,EAAA;QAHrB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAe;QACtB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;QAC3B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;QAC3B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAiB;KAC3B;AAEJ,IAAA,MAAM,cAAc,GAAA;AAClB,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;YAC3D,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC5B;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;SAChD;gBAAS;AACR,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACrB;KACF;IAED,mBAAmB,GAAA;QACjB,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,uBAAuB,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;KACzG;IACD,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;KACrC;8GA5BU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,4DCXnC,mgEAoDA,EAAA,MAAA,EAAA,CAAA,mjDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,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,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,MAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,WAAA,EAAA,KAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,mEAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDzCa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,mgEAAA,EAAA,MAAA,EAAA,CAAA,mjDAAA,CAAA,EAAA,CAAA;;;MESrB,uBAAuB,CAAA;AAOlC,IAAA,WAAA,CACU,OAAsB,EACtB,KAAqB,EACrB,WAA8B,EAC9B,OAA2B,EAC3B,OAA2B,EAC3B,CAA0B,EAC3B,IAAqB,EAAA;QANpB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAe;QACtB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;QACrB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAmB;QAC9B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;QAC3B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;QAC3B,IAAC,CAAA,CAAA,GAAD,CAAC,CAAyB;QAC3B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAiB;QAV9B,IAAc,CAAA,cAAA,GAAGL,WAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;KAW1C;IACJ,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;AACpE,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI;AACrD,YAAA,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACxE,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;KAClD;AAED,IAAA,MAAM,eAAe,GAAA;AACnB,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzE,IAAI,MAAM,CAAC,MAAM;gBACf,IAAI,CAAC,QAAQ,GAAG;AACd,oBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,wCAAwC,CAAC;AAClD,oBAAA,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IACb,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,kCAAkC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,CAC7F;AACF,iBAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACd,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;AAEvF,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAC1B,YAAA,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACzE,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;YACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,QAAQ,GAAI,KAAa,CAAC,OAAO,CAAC;AACvC,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;SAC9D;gBAAS;AACR,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACrB;KACF;IAED,MAAM,kBAAkB,CAAC,KAAY,EAAA;QACnC,MAAM,QAAQ,GAAG,uBAAuB,CAAC;AACzC,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,2BAA2B,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC3G,QAAA,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;KACzB;IAED,kBAAkB,GAAA;QAChB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC;KACrD;IACD,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;KACrC;8GA3DU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,6DChBpC,muHAkGA,EAAA,MAAA,EAAA,CAAA,mjDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,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,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,MAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,WAAA,EAAA,KAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,mEAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAJ,EAAA,CAAA,iBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDlFa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;+BACE,uBAAuB,EAAA,QAAA,EAAA,muHAAA,EAAA,MAAA,EAAA,CAAA,mjDAAA,CAAA,EAAA,CAAA;;;MEDtB,oBAAoB,CAAA;IAI/B,WACU,CAAA,OAAsB,EACtB,OAA2B,EAC3B,OAA2B,EAC3B,IAAqB,EACrB,CAA0B,EAAA;QAJ1B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAe;QACtB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;QAC3B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;QAC3B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAiB;QACrB,IAAC,CAAA,CAAA,GAAD,CAAC,CAAyB;KAChC;IACJ,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;KACnD;AAED,IAAA,MAAM,oBAAoB,GAAA;AACxB,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnD,YAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAC5B;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC;YACvD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SACzC;gBAAS;AACR,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACrB;KACF;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;KACrC;8GA/BU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,0DCXjC,ioDA6CA,EAAA,MAAA,EAAA,CAAA,mjDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,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,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,MAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,WAAA,EAAA,KAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,mEAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDlCa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;+BACE,oBAAoB,EAAA,QAAA,EAAA,ioDAAA,EAAA,MAAA,EAAA,CAAA,mjDAAA,CAAA,EAAA,CAAA;;;MEKnB,0BAA0B,CAAA;AAIrC,IAAA,WAAA,CACU,SAA0B,EAC1B,OAA2B,EAC3B,OAA2B,EAC3B,IAAqB,EAAA;QAHrB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAiB;QAC1B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;QAC3B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;QAC3B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAiB;KAC3B;AACJ,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;AACnE,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACnD,gBAAA,MAAM,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC;aAC3C;SACF;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC/C;gBAAS;AACR,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACrB;KACF;AACO,IAAA,yBAAyB,CAAC,GAAW,EAAA;QAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAU;YAC3C,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;AAC7D,YAAA,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;AACzB,YAAA,QAAQ,CAAC,GAAG,EAAE,EAAE,oBAAoB,EAAE,GAAG,EAAE,EAAE,CAAC,GAAU,EAAE,MAAyB,KAAU;AAC3F,gBAAA,IAAI,GAAG;AAAE,oBAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5B,gBAAA,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;AAC5B,gBAAA,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,gBAAA,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;AAClC,gBAAA,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC9B,gBAAA,OAAO,EAAE,CAAC;AACZ,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;IAED,MAAM,MAAM,CAAC,MAAe,EAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;AAC1B,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAC1B,YAAA,IAAI,MAAM;gBAAE,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;gBAC/C,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;YACnD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;SAC7C;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC/C;gBAAS;AACR,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACrB;KACF;IAED,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;KAC1B;8GAzDU,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,4DCZvC,s+CAgCA,EAAA,MAAA,EAAA,CAAA,uJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,MAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,WAAA,EAAA,KAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,mEAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDpBa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBALtC,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,s+CAAA,EAAA,MAAA,EAAA,CAAA,uJAAA,CAAA,EAAA,CAAA;;;MEIrB,2BAA2B,CAAA;IAgBtC,WAAoB,CAAA,SAA0B,EAAU,IAAqB,EAAA;QAAzD,IAAS,CAAA,SAAA,GAAT,SAAS,CAAiB;QAAU,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAiB;AAP7E;;AAEG;AACO,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAW,CAAC;KAIkC;AACjF,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;KACpE;AAED,IAAA,MAAM,YAAY,GAAA;AAChB,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7G,KAAK,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAU;YAC3C,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAChC;AACH,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;KACvB;8GA9BU,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAO,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,sICZxC,uNAGA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,iBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDSa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;+BACE,uBAAuB,EAAA,QAAA,EAAA,uNAAA,EAAA,CAAA;+GAQxB,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAIG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAII,MAAM,EAAA,CAAA;sBAAf,MAAM;;;MEhBI,gBAAgB,CAAA;AAC3B,IAAA,WAAA,CAAoB,OAAsB,EAAA;QAAtB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAe;KAAI;IAE9C,SAAS,GAAA;AACP,QAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;KAC5B;IACD,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;KACrC;8GARU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,sDCR7B,0yBAsBA,EAAA,MAAA,EAAA,CAAA,mjDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,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,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,2BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAL,EAAA,CAAA,iBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDda,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,SAAS;+BACE,gBAAgB,EAAA,QAAA,EAAA,0yBAAA,EAAA,MAAA,EAAA,CAAA,mjDAAA,CAAA,EAAA,CAAA;;;MEUf,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,EAHd,YAAA,EAAA,CAAA,0BAA0B,EAAE,2BAA2B,aAD5D,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,sBAAsB,CAE9D,EAAA,OAAA,EAAA,CAAA,0BAA0B,EAAE,2BAA2B,CAAA,EAAA,CAAA,CAAA,EAAA;AAEtD,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,YAJnB,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAI7D,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,sBAAsB,CAAC;AACzE,oBAAA,YAAY,EAAE,CAAC,0BAA0B,EAAE,2BAA2B,CAAC;AACvE,oBAAA,OAAO,EAAE,CAAC,0BAA0B,EAAE,2BAA2B,CAAC;AACnE,iBAAA,CAAA;;;MCsCY,cAAc,CAAA;8GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAd,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,cAAc,iBAXvB,cAAc;YACd,cAAc;YACd,mBAAmB;YACnB,kBAAkB;YAClB,sBAAsB;YACtB,uBAAuB;YACvB,oBAAoB;YACpB,gBAAgB;AAChB,YAAA,2BAA2B,aA1B3B,YAAY;YACZ,WAAW;YACX,WAAW;AACX,YAAA,sBAAsB,qBAYtB,kBAAkB,CAAA,EAAA,CAAA,CAAA,EAAA;AAcT,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,cAAc,YA7BvB,YAAY;YACZ,WAAW;YACX,WAAW;YACX,sBAAsB;YACtB,YAAY,CAAC,QAAQ,CAAC;gBACpB,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE;AACtD,gBAAA,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE;AAC9C,gBAAA,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE;AAC9C,gBAAA,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,mBAAmB,EAAE;AACxD,gBAAA,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,oBAAoB,EAAE;AAC1D,gBAAA,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE;AAClD,gBAAA,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,kBAAkB,EAAE;AACtD,gBAAA,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,sBAAsB,EAAE;AAC9D,gBAAA,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,uBAAuB,EAAE;aACjE,CAAC;YACF,kBAAkB,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAcT,cAAc,EAAA,UAAA,EAAA,CAAA;kBA/B1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,WAAW;wBACX,sBAAsB;wBACtB,YAAY,CAAC,QAAQ,CAAC;4BACpB,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE;AACtD,4BAAA,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE;AAC9C,4BAAA,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE;AAC9C,4BAAA,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,mBAAmB,EAAE;AACxD,4BAAA,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,oBAAoB,EAAE;AAC1D,4BAAA,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE;AAClD,4BAAA,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,kBAAkB,EAAE;AACtD,4BAAA,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,sBAAsB,EAAE;AAC9D,4BAAA,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,uBAAuB,EAAE;yBACjE,CAAC;wBACF,kBAAkB;AACnB,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACZ,cAAc;wBACd,cAAc;wBACd,mBAAmB;wBACnB,kBAAkB;wBAClB,sBAAsB;wBACtB,uBAAuB;wBACvB,oBAAoB;wBACpB,gBAAgB;wBAChB,2BAA2B;AAC5B,qBAAA;AACF,iBAAA,CAAA;;;AClDD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"idea-ionic-auth.mjs","sources":["../../../modules/auth/src/auth.service.ts","../../../modules/auth/src/signIn.page.ts","../../../modules/auth/src/signIn.page.html","../../../modules/auth/src/passwordPolicy.component.ts","../../../modules/auth/src/signUp.page.ts","../../../modules/auth/src/signUp.page.html","../../../modules/auth/src/newPassword.page.ts","../../../modules/auth/src/newPassword.page.html","../../../modules/auth/src/resendLink.page.ts","../../../modules/auth/src/resendLink.page.html","../../../modules/auth/src/forgotPassword.page.ts","../../../modules/auth/src/forgotPassword.page.html","../../../modules/auth/src/confirmPassword.page.ts","../../../modules/auth/src/confirmPassword.page.html","../../../modules/auth/src/mfaChallenge.page.ts","../../../modules/auth/src/mfaChallenge.page.html","../../../modules/auth/src/setupMFA/setupMFAModal.component.ts","../../../modules/auth/src/setupMFA/setupMFAModal.component.html","../../../modules/auth/src/setupMFA/setupMFAButton.component.ts","../../../modules/auth/src/setupMFA/setupMFAButton.component.html","../../../modules/auth/src/setupMFA.page.ts","../../../modules/auth/src/setupMFA.page.html","../../../modules/auth/src/setupMFA/setupMFA.module.ts","../../../modules/auth/src/auth.module.ts","../../../modules/auth/idea-ionic-auth.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport {\n AuthenticationDetails,\n CognitoUser,\n CognitoUserAttribute,\n CognitoUserPool,\n CognitoRefreshToken,\n CognitoUserSession,\n ISignUpResult,\n ChallengeName\n} from 'amazon-cognito-identity-js';\nimport { IDEAStorageService } from '@idea-ionic/common';\n\nimport { environment as env } from '@env/environment';\n\n/**\n * The name of the Cognito's user attribute which contains the key of the last device to login in this project.\n */\nconst DEVICE_KEY_ATTRIBUTE = 'custom:'.concat(env.idea.project);\n\n/**\n * Cognito wrapper to manage the authentication flow.\n *\n * Note: in IDEA's Cognito users pools, the email is an alias of the username.\n */\n@Injectable({ providedIn: 'root' })\nexport class IDEAAuthService {\n private userPool: CognitoUserPool;\n\n challengeUsername: string;\n private challengePassword: string;\n\n private newAccountJustRegistered: string;\n\n private mfaProjectName = env.idea.app.title ?? env.idea.project;\n\n private passwordPolicy = env.idea.auth.passwordPolicy;\n\n constructor(private storage: IDEAStorageService) {\n this.userPool = new CognitoUserPool({\n UserPoolId: env.aws.cognito.userPoolId,\n ClientId: env.aws.cognito.userPoolClientId\n });\n }\n\n /**\n * Prepare the necessary structure to get authorized in Cognito.\n */\n private prepareAuthDetails(username: string, pwd: string): AuthenticationDetails {\n return new AuthenticationDetails({ Username: username, Password: pwd });\n }\n /**\n * Prepare the necessary structure to identify a Cognito user.\n */\n prepareCognitoUser(username: string): CognitoUser {\n return new CognitoUser({ Username: username, Pool: this.userPool });\n }\n /**\n * Prepare a user attribute (they are all strings) in Cognito's format.\n */\n private prepareUserAttribute(name: string, value: string): CognitoUserAttribute {\n return new CognitoUserAttribute({ Name: name, Value: value });\n }\n\n /**\n * Perform a login through username and password.\n */\n login(username: string, password: string): Promise<LoginOutcomeActions> {\n return new Promise((resolve, reject): void => {\n const user = this.prepareCognitoUser(username);\n user.authenticateUser(this.prepareAuthDetails(username, password), {\n onSuccess: (): void =>\n resolve(env.idea.auth.forceLoginWithMFA ? LoginOutcomeActions.MFA_SETUP : LoginOutcomeActions.NONE),\n onFailure: (err: Error): void => reject(err),\n newPasswordRequired: (): void => {\n this.challengeUsername = username;\n this.challengePassword = password;\n resolve(LoginOutcomeActions.NEW_PASSWORD);\n },\n totpRequired: (): void => {\n this.challengeUsername = username;\n this.challengePassword = password;\n resolve(LoginOutcomeActions.MFA_CHALLENGE);\n }\n });\n });\n }\n /**\n * Complete the new password flow in the authentication.\n */\n confirmNewPassword(newPassword: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n const user = this.prepareCognitoUser(this.challengeUsername);\n user.authenticateUser(this.prepareAuthDetails(this.challengeUsername, this.challengePassword), {\n onSuccess: (): void => resolve(),\n onFailure: (err: Error): void => reject(err),\n newPasswordRequired: (): void =>\n user.completeNewPasswordChallenge(\n newPassword,\n {},\n {\n onSuccess: (): void => {\n this.challengeUsername = null;\n this.challengePassword = null;\n resolve();\n },\n onFailure: (err: Error): void => reject(err)\n }\n )\n });\n });\n }\n /**\n * Complete the MFA challenge flow in the authentication.\n */\n completeMFAChallenge(otpCode: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n const user = this.prepareCognitoUser(this.challengeUsername);\n user.authenticateUser(this.prepareAuthDetails(this.challengeUsername, this.challengePassword), {\n onSuccess: (): void => resolve(),\n onFailure: (err: Error): void => reject(err),\n totpRequired: (challengeName: ChallengeName): void =>\n user.sendMFACode(\n otpCode,\n {\n onSuccess: (): void => {\n this.challengeUsername = null;\n this.challengePassword = null;\n resolve();\n },\n onFailure: err => reject(err)\n },\n challengeName\n )\n });\n });\n }\n /**\n * Register a new user a set its default attributes.\n */\n register(username: string, password: string, attributes?: any): Promise<CognitoUser> {\n attributes = attributes || {};\n return new Promise((resolve, reject): void => {\n // add attributes like the email address and the fullname\n const attrs = [];\n for (const prop in attributes)\n if (attributes[prop]) attrs.push(this.prepareUserAttribute(prop, attributes[prop]));\n // add the email, which is equal to the username for most of our Pools\n if (!attributes.email) attrs.push(this.prepareUserAttribute('email', username));\n // register the new user to the pool\n this.userPool.signUp(username, password, attrs, null, (err: Error, res: ISignUpResult): void => {\n if (err) return reject(err);\n this.newAccountJustRegistered = username;\n resolve(res.user);\n });\n });\n }\n /**\n * In case new account has just been registered, return the username.\n */\n getNewAccountJustRegistered(): string {\n return this.newAccountJustRegistered;\n }\n /**\n * Confirm a new registration through the confirmation code sent by Cognito.\n */\n confirmRegistration(username: string, code: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n this.prepareCognitoUser(username).confirmRegistration(code, true, (err: Error): void =>\n err ? reject(err) : resolve()\n );\n });\n }\n /**\n * Send again a confirmation code for a new registration.\n */\n resendConfirmationCode(username: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n this.prepareCognitoUser(username).resendConfirmationCode((err: Error): void => (err ? reject(err) : resolve()));\n });\n }\n /**\n * Logout the currently signed-in user.\n */\n logout(options?: { global: boolean }): Promise<void> {\n options = Object.assign({ global: false }, options);\n return new Promise((resolve, reject): void => {\n // remove the refresh token previosly saved\n this.storage.remove('AuthRefreshToken').then(\n (): Promise<void> =>\n // remove the optional auth details\n this.storage.remove('AuthUserDetails').then((): void => {\n // get the user and the session\n const user = this.userPool.getCurrentUser();\n user.getSession(async (err: Error): Promise<void> => {\n // if the session is active, run the online sign-out; otherwise, only the local data has been deleted\n if (err) return resolve();\n // if a reference to the device was saved, forget it\n if (env.idea.auth.singleSimultaneousSession) await this.setCurrentDeviceForProject(null);\n // sign-out from the pool (terminate the current session or all the sessions)\n if (options.global)\n user.globalSignOut({ onSuccess: (): void => resolve(), onFailure: err => reject(err) });\n else {\n user.signOut();\n resolve();\n }\n });\n })\n );\n });\n }\n /**\n * Send a password reset request.\n */\n forgotPassword(username: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n this.prepareCognitoUser(username).forgotPassword({\n onSuccess: (): void => resolve(),\n onFailure: (err: Error): void => reject(err)\n });\n });\n }\n /**\n * Confirm a new password after a password reset request.\n */\n confirmPassword(username: string, code: string, newPwd: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n this.prepareCognitoUser(username).confirmPassword(code, newPwd, {\n onSuccess: (): void => resolve(),\n onFailure: (err: Error): void => reject(err)\n });\n });\n }\n /**\n * Gets the URL for enabling MFA. This URL can be used to generate a QR Code to read with an authenticator app.\n */\n getURLForEnablingMFA(): Promise<string> {\n return new Promise((resolve, reject): void => {\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n user.getSession((err: Error): void => {\n if (err) return reject(err);\n user.associateSoftwareToken({\n associateSecretCode: (secretCode: string): void =>\n resolve(`otpauth://totp/${encodeURI(this.mfaProjectName)}?secret=${secretCode}`),\n onFailure: (err: any): void => reject(err)\n });\n });\n });\n }\n /**\n * Check whether the user has MFA enabled.\n */\n checkIfUserHasMFAEnabled(bypassCache = false): Promise<boolean> {\n return new Promise((resolve, reject): void => {\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n user.getSession((err: Error): void => {\n if (err) return reject(err);\n user.getUserData(\n (err, data): void => {\n if (err) return reject(err);\n const isMFAEnabled = !!(data.UserMFASettingList && data.UserMFASettingList.includes('SOFTWARE_TOKEN_MFA'));\n resolve(isMFAEnabled);\n },\n { bypassCache }\n );\n });\n });\n }\n /**\n * Configure a MFA device for the user.\n */\n private setMFADevice(otp: string, mfaDeviceName: string, enabled = true, preferred = true): Promise<void> {\n return new Promise((resolve, reject): void => {\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n user.getSession((err: Error): void => {\n if (err) return reject(err);\n user.verifySoftwareToken(otp, mfaDeviceName, {\n onSuccess: (): void =>\n user.setUserMfaPreference(null, { Enabled: enabled, PreferredMfa: preferred }, (err: Error): void =>\n err ? reject(err) : resolve()\n ),\n onFailure: (err): void => reject(err)\n });\n });\n });\n }\n /**\n * Enable a new MFA device for the user by inserting an OTP code generated by it.\n */\n enableMFA(otp: string, mfaDeviceName = 'default'): Promise<void> {\n return this.setMFADevice(otp, mfaDeviceName, true, true);\n }\n /**\n * Disable MFA for a user by inserting an OTP code generated by it.\n */\n disableMFA(otp: string, mfaDeviceName = 'default'): Promise<void> {\n return this.setMFADevice(otp, mfaDeviceName, false, false);\n }\n /**\n * Check if a user is currently authenticated.\n * @param offlineAllowed if set and if offline, skip authentication and retrieve data locally\n * @param getFreshIdTokenOnExp cb function to execute when the idToken is refreshed\n */\n isAuthenticated(offlineAllowed: boolean, getFreshIdTokenOnExp?: (freshIdToken: string) => void): Promise<any> {\n return new Promise((resolve, reject): void => {\n if (offlineAllowed && !navigator.onLine) {\n this.storage.get('AuthUserDetails').then(userDetails => resolve({ idToken: null, userDetails }));\n // re-execute the method when back online, so that you can retrieve a token to make requests\n window.addEventListener(\n 'online',\n (): Promise<void> =>\n this.isAuthenticated(true, getFreshIdTokenOnExp)\n // set the new token as if it was refreshed\n .then(result => getFreshIdTokenOnExp(result.idToken))\n );\n } else {\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n user.getSession((err: Error, session: CognitoUserSession): void => {\n if (err) return reject(err);\n user.getUserData(\n (err, data): void => {\n if (err) return reject(err);\n const isMFAEnabled = !!(\n data.UserMFASettingList && data.UserMFASettingList.includes('SOFTWARE_TOKEN_MFA')\n );\n if (!isMFAEnabled && env.idea.auth.forceLoginWithMFA)\n return reject(new Error(LoginOutcomeActions.MFA_SETUP));\n user.getUserAttributes((e: Error, attributes: CognitoUserAttribute[]): void => {\n if (e) return reject(e);\n // remap user attributes\n const userDetails: any = {};\n attributes.forEach((a: CognitoUserAttribute): string => (userDetails[a.getName()] = a.getValue()));\n // add the user's groups to the attributes\n const sessionInfo = session.getAccessToken().decodePayload();\n const groups: string[] = sessionInfo['cognito:groups'] || [];\n userDetails['groups'] = groups;\n // run some checks considering the user's groups and devices (based on the project's configuration)\n this.runPostAuthChecks(userDetails, err => {\n // in case some check failed, reject the authorisation flow\n if (err) return reject(err);\n // (async) save the refresh token so it can be accessed by other procedures\n this.storage.set('AuthRefreshToken', session.getRefreshToken().getToken());\n // set a timer to manage the autorefresh of the idToken (through the refreshToken)\n setTimeout(\n (): void => this.refreshSession(user, session.getRefreshToken().getToken(), getFreshIdTokenOnExp),\n 15 * 60 * 1000\n ); // every 15 minutes\n // (async) if offlineAllowed, save data locally, to use it next time we'll be offline\n if (offlineAllowed) this.storage.set('AuthUserDetails', userDetails);\n // return the idToken (to use with API)\n resolve({ idToken: session.getIdToken().getJwtToken(), userDetails });\n });\n });\n },\n { bypassCache: true }\n );\n });\n }\n });\n }\n /**\n * Helper to refresh the session every N minutes.\n */\n private refreshSession(user: CognitoUser, refreshToken: string, callback: (freshIdToken: string) => void): void {\n user.refreshSession(\n new CognitoRefreshToken({ RefreshToken: refreshToken }),\n (err: Error, session: CognitoUserSession): void => {\n if (err) {\n // try again in 1 minute\n setTimeout((): void => this.refreshSession(user, refreshToken, callback), 1 * 60 * 1000);\n } else {\n // (async) save the refresh token so it can be accessed by other procedures\n this.storage.set('AuthRefreshToken', session.getRefreshToken().getToken());\n // repeat every 15 minutes\n setTimeout(\n (): void => this.refreshSession(user, session.getRefreshToken().getToken(), callback),\n 15 * 60 * 1000\n );\n // run the callback action, if set\n if (callback) callback(session.getIdToken().getJwtToken());\n }\n }\n );\n }\n /**\n * Run some post-auth checks, based on the users groups and on the app's configuration:\n * - users in the Cognito's \"admins\" grup skip all the following rules.\n * - users in the Cognito's \"robots\" group can't sign-into front-ends (they serve only back-end purposes).\n * - if `env.idea.auth.singleSimultaneousSession` is on, make sure there is only one active session per user.\n */\n private runPostAuthChecks(userDetails: any, callback: (err?: Error) => void): void | Promise<void> {\n const groups: string[] = userDetails['groups'];\n // skip checks if the user is in the \"admins\" group\n const isAdmin = groups.some(x => x === 'admins');\n if (isAdmin) return callback();\n // users in the \"robots\" group can't sign-into front-ends (they serve only back-end purposes)\n const isRobot = groups.some(x => x === 'robots');\n if (isRobot) return callback(new Error('ROBOT_USER'));\n // in case the project limits each account to only one simultaneous session, run a check\n if (env.idea.auth.singleSimultaneousSession) return this.checkForSimultaneousSessions(userDetails, callback);\n // otherwise, we're done\n callback();\n }\n /**\n * Check whether the user signed-into multiple devices.\n */\n private async checkForSimultaneousSessions(userDetails: any, callback: (err?: Error) => void): Promise<void> {\n // get or create a key for the current device (~random)\n let currentDeviceKey = await this.storage.get('AuthDeviceKey');\n if (!currentDeviceKey) {\n const randomKey = Math.random().toString(36).substring(10);\n currentDeviceKey = randomKey.concat(String(Date.now()));\n await this.storage.set('AuthDeviceKey', currentDeviceKey);\n }\n // check whether the last device to sign-into this project (if any) is the current one\n const lastDeviceToSignIntoThisProject = userDetails[DEVICE_KEY_ATTRIBUTE];\n // if it's the first user's device to sign-in, save the reference in Cognito and resolve\n if (!lastDeviceToSignIntoThisProject) {\n this.setCurrentDeviceForProject(currentDeviceKey)\n .then((): void => callback())\n .catch((): void => callback(new Error('CANT_SET_DEVICE')));\n // if the device didn't change, resolve\n } else if (lastDeviceToSignIntoThisProject === currentDeviceKey) callback();\n // othwerwise, report there is more than one simultaneous session\n else callback(new Error('SIMULTANEOUS_SESSION'));\n }\n /**\n * Set (or reset) the current user's device (by key) in the current project (stored in Cognito).\n */\n private setCurrentDeviceForProject(deviceKey?: string): Promise<void> {\n const attributes: any = {};\n // note: an empty string will remove the attribute from Cognito\n attributes[DEVICE_KEY_ATTRIBUTE] = deviceKey || '';\n return this.updateUserAttributes(attributes);\n }\n /**\n * Update the currently logged in user's attributes.\n */\n updateUserAttributes(attributes: any): Promise<void> {\n return new Promise((resolve, reject): void => {\n // prepare the attributes we want to change\n const attrs = new Array<any>();\n for (const prop in attributes)\n if (attributes[prop] !== undefined) attrs.push(this.prepareUserAttribute(prop, attributes[prop]));\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n // we need to get the session before to make changes\n user.getSession((err: Error): void => {\n if (err) reject(err);\n else user.updateAttributes(attrs, (e: Error): void => (e ? reject(e) : resolve()));\n });\n });\n }\n\n /**\n * Validate the password against the policy set in the environments configuration.\n * In case there are errors, they are returned as an array of strings.\n */\n validatePasswordAgainstPolicy(password: string): string[] {\n const errors = [];\n if (password?.trim().length < this.passwordPolicy.minLength) errors.push('MIN_LENGTH');\n if (this.passwordPolicy.requireDigits && !/\\d/.test(password)) errors.push('REQUIRE_DIGITS');\n if (this.passwordPolicy.requireLowercase && !/[a-z]/.test(password)) errors.push('REQUIRE_LOWERCASE');\n if (this.passwordPolicy.requireSymbols && !/[\\^\\$\\*\\.\\_\\~\\`\\+\\=@\\!\\?\\>\\<\\:\\;\\\\\\,\\#\\%\\&]/.test(password))\n errors.push('REQUIRE_SYMBOLS');\n if (this.passwordPolicy.requireUppercase && !/[A-Z]/.test(password)) errors.push('REQUIRE_UPPERCASE');\n return errors;\n }\n /**\n * Get a complete password policy pattern, based on the environments configuration, to use on password input fields.\n * Note: some of the symbols couldn't be included because unsupported by the input[pattern] attribute.\n */\n getPasswordPolicyPatternForInput(): string {\n let pattern = '';\n if (this.passwordPolicy.requireDigits) pattern += `(?=.*[0-9])`;\n if (this.passwordPolicy.requireLowercase) pattern += `(?=.*[a-z])`;\n if (this.passwordPolicy.requireSymbols) pattern += `(?=.*[\\^\\$\\*\\.\\_\\~\\`\\+\\=@\\!\\?\\>\\<\\:\\;\\\\\\,\\#\\%\\&])`;\n if (this.passwordPolicy.requireUppercase) pattern += `(?=.*[A-Z])`;\n pattern += `.{${this.passwordPolicy.minLength},}`;\n return pattern;\n }\n}\n\n/**\n * The possible actions following a successful login.\n */\nexport enum LoginOutcomeActions {\n NONE = 'none',\n NEW_PASSWORD = 'newPassword',\n MFA_CHALLENGE = 'mfaChallenge',\n MFA_SETUP = 'mfaSetup'\n}\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { Browser } from '@capacitor/browser';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService, LoginOutcomeActions } from './auth.service';\n\nimport { environment as env } from '@env/environment';\n\n@Component({\n selector: 'idea-sign-in',\n templateUrl: 'signIn.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEASignInPage {\n title = env.idea.app.title;\n registrationPossible = env.idea.auth.registrationIsPossible;\n hasIntroPage = env.idea.app.hasIntroPage;\n website = env.idea.website;\n\n email: string;\n password: string;\n agreementsCheck = true;\n newAccountRegistered = false;\n errorMsg: string;\n darkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;\n\n constructor(\n private navCtrl: NavController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private t: IDEATranslationsService,\n private auth: IDEAAuthService\n ) {}\n ionViewDidEnter(): void {\n // manage the scenario in which we just created a new account (show a explanatory message: email must be confirmed)\n this.newAccountRegistered = !!this.auth.getNewAccountJustRegistered();\n if (this.newAccountRegistered) this.email = this.auth.getNewAccountJustRegistered();\n }\n\n async login(): Promise<void> {\n if (!this.agreementsCheck) return;\n try {\n this.errorMsg = null;\n await this.loading.show();\n const loginAction = await this.auth.login(this.email, this.password);\n if (loginAction === LoginOutcomeActions.NEW_PASSWORD) this.navCtrl.navigateForward(['auth', 'new-password']);\n else if (loginAction === LoginOutcomeActions.MFA_CHALLENGE)\n this.navCtrl.navigateForward(['auth', 'mfa-challenge']);\n else if (loginAction === LoginOutcomeActions.MFA_SETUP) this.navCtrl.navigateForward(['auth', 'setup-mfa']);\n else window.location.assign('');\n } catch (err) {\n if ((err as any).name === 'UserNotConfirmedException')\n this.errorMsg = this.t._('IDEA_AUTH.CONFIRM_YOUR_EMAIL_TO_LOGIN');\n else if (\n (err as any).name === 'UserLambdaValidationException' &&\n (err as any).message?.includes('@IDEA_COGNITO_TRANSITION')\n )\n this.errorMsg = this.t._('IDEA_AUTH.CHANGE_YOUR_PASSWORD_TO_LOGIN');\n this.message.error('IDEA_AUTH.AUTHENTICATION_FAILED');\n } finally {\n this.loading.hide();\n }\n }\n\n goToIntro(): void {\n this.navCtrl.navigateBack(['intro']);\n }\n goToForgotPassword(): void {\n this.navCtrl.navigateForward(['auth/forgot-password']);\n }\n goToRegistration(): void {\n this.navCtrl.navigateForward(['auth', 'sign-up']);\n }\n\n translationExists(key: string): boolean {\n return !!this.t._(key);\n }\n\n async openLink(url: string): Promise<void> {\n await Browser.open({ url });\n }\n}\n","<ion-content>\n <ion-card color=\"warning\" *ngIf=\"newAccountRegistered\">\n <ion-card-content>{{ 'IDEA_AUTH.CONFIRM_YOUR_EMAIL_TO_LOGIN' | translate }}</ion-card-content>\n </ion-card>\n <form class=\"flexBox\">\n <div>\n <ion-card class=\"authCard\">\n <ion-img\n [title]=\"'IDEA_AUTH.SERVICE_LOGO' | translate\"\n [src]=\"darkMode ? 'assets/icons/icon-auth-alt.svg' : 'assets/icons/icon-auth.svg'\"\n ></ion-img>\n <ion-card-header>\n <ion-card-title color=\"primary\" *ngIf=\"title\">{{ title }}</ion-card-title>\n <ion-card-subtitle *ngIf=\"translationExists('IDEA_VARIABLES.TAGLINE')\">\n {{ 'IDEA_VARIABLES.TAGLINE' | translate }}\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\"><b>{{ 'IDEA_AUTH.WARNING' | translate }}.</b> {{ errorMsg }}</p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"email\"\n [placeholder]=\"'IDEA_AUTH.EMAIL' | translate\"\n [title]=\"'IDEA_AUTH.EMAIL_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"login()\"\n ></ion-input>\n </ion-item>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n id=\"current-password\"\n type=\"password\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"current-password\"\n [clearOnEdit]=\"false\"\n [placeholder]=\"'IDEA_AUTH.PASSWORD' | translate\"\n [title]=\"'IDEA_AUTH.PASSWORD_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"password\"\n (keyup.enter)=\"login()\"\n ></ion-input>\n </ion-item>\n <ion-row\n class=\"agreementsAcceptanceRow\"\n *ngIf=\"\n !registrationPossible &&\n (translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL'))\n \"\n >\n <ion-col>\n <ion-checkbox\n size=\"small\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"agreementsCheck\"\n ></ion-checkbox>\n {{ 'IDEA_AUTH.AGREEMENTS_CHECK_LOGIN' | translate }}:\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\"\n [title]=\"'IDEA_AUTH.TERMS_AND_CONDITIONS_HINT' | translate\"\n [href]=\"'IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL' | translate\"\n >\n {{ 'IDEA_AUTH.TERMS_AND_CONDITIONS' | translate }}\n </a>\n <ion-text\n *ngIf=\"\n translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL') && translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\n \"\n >\n &\n </ion-text>\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL')\"\n [title]=\"'IDEA_AUTH.PRIVACY_POLICY_HINT' | translate\"\n [href]=\"'IDEA_VARIABLES.PRIVACY_POLICY_URL' | translate\"\n >\n {{ 'IDEA_AUTH.PRIVACY_POLICY' | translate }}\n </a>\n </ion-col>\n </ion-row>\n <ion-button\n expand=\"block\"\n [disabled]=\"!agreementsCheck\"\n [title]=\"'IDEA_AUTH.SIGN_IN_HINT' | translate\"\n (click)=\"login()\"\n >\n {{ 'IDEA_AUTH.SIGN_IN' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n *ngIf=\"registrationPossible\"\n [title]=\"'IDEA_AUTH.CREATE_AN_ACCOUNT_HINT' | translate\"\n (click)=\"goToRegistration()\"\n >\n {{ 'IDEA_AUTH.CREATE_AN_ACCOUNT' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.I_FORGOT_MY_PASSWORD_HINT' | translate\"\n (click)=\"goToForgotPassword()\"\n >\n {{ 'IDEA_AUTH.I_FORGOT_MY_PASSWORD' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n color=\"medium\"\n class=\"smallCaseButton\"\n *ngIf=\"hasIntroPage\"\n [title]=\"'IDEA_AUTH.BACK_TO_INTRO_HINT' | translate\"\n (click)=\"goToIntro()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_INTRO' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n <ion-img\n class=\"ideaLogo\"\n *ngIf=\"website\"\n [src]=\"darkMode ? './assets/icons/idea-alt.png' : './assets/icons/idea.png'\"\n [title]=\"'IDEA_AUTH.IDEA_TAGLINE' | translate\"\n (click)=\"openLink(website)\"\n ></ion-img>\n </div>\n </form>\n</ion-content>\n","import { Component } from '@angular/core';\n\nimport { environment as env } from '@env/environment';\n\n@Component({\n selector: 'idea-password-policy',\n template: `\n <ion-card class=\"passwordPolicyCard\">\n <ion-card-header>\n <ion-card-title>{{ 'IDEA_AUTH.PASSWORD_REQUIREMENTS_TITLE' | translate }}</ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <ul>\n <li>{{ 'IDEA_AUTH.PASSWORD_REQUIREMENTS.MIN_LENGTH' | translate: { n: passwordPolicy.minLength } }}</li>\n <li *ngIf=\"passwordPolicy.requireDigits\">\n {{ 'IDEA_AUTH.PASSWORD_REQUIREMENTS.REQUIRE_DIGITS' | translate }}\n </li>\n <li *ngIf=\"passwordPolicy.requireSymbols\">\n {{ 'IDEA_AUTH.PASSWORD_REQUIREMENTS.REQUIRE_SYMBOLS' | translate }}\n </li>\n <li *ngIf=\"passwordPolicy.requireUppercase\">\n {{ 'IDEA_AUTH.PASSWORD_REQUIREMENTS.REQUIRE_UPPERCASE' | translate }}\n </li>\n <li *ngIf=\"passwordPolicy.requireLowercase\">\n {{ 'IDEA_AUTH.PASSWORD_REQUIREMENTS.REQUIRE_LOWERCASE' | translate }}\n </li>\n </ul>\n </ion-card-content>\n </ion-card>\n `,\n styles: [\n `\n ion-card.passwordPolicyCard {\n box-shadow: none;\n border: none;\n padding: 6px;\n }\n ion-card.passwordPolicyCard ion-card-title {\n font-size: 1rem;\n }\n ion-card.passwordPolicyCard ul {\n margin: 0;\n }\n `\n ]\n})\nexport class IDEAPasswordPolicyComponent {\n passwordPolicy = env.idea.auth.passwordPolicy;\n\n constructor() {}\n}\n","import { Component, OnInit } from '@angular/core';\nimport { NavController, PopoverController } from '@ionic/angular';\nimport { isEmpty } from 'idea-toolbox';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAPasswordPolicyComponent } from './passwordPolicy.component';\n\nimport { IDEAAuthService } from './auth.service';\n\nimport { environment as env } from '@env/environment';\n\n@Component({\n selector: 'idea-sign-up',\n templateUrl: 'signUp.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEASignUpPage implements OnInit {\n email: string;\n password: string;\n agreementsCheck = false;\n passwordPolicy = env.idea.auth.passwordPolicy;\n errorMsg: string;\n\n constructor(\n private navCtrl: NavController,\n private popoverCtrl: PopoverController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private t: IDEATranslationsService,\n public auth: IDEAAuthService\n ) {}\n ngOnInit(): void {\n if (!env.idea.auth.registrationIsPossible) return this.goToAuth();\n this.agreementsCheck =\n this.t._('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || this.t._('IDEA_VARIABLES.PRIVACY_POLICY_URL')\n ? this.agreementsCheck\n : true;\n }\n\n async register(): Promise<void> {\n this.errorMsg = null;\n if (isEmpty(this.email, 'email')) this.errorMsg = this.t._('IDEA_AUTH.VALID_EMAIL_OBLIGATORY');\n else {\n const errors = this.auth.validatePasswordAgainstPolicy(this.password);\n if (errors.length)\n this.errorMsg = [\n this.t._('IDEA_AUTH.PASSWORD_REQUIREMENTS_FOLLOW'),\n ...errors.map(x =>\n this.t._('IDEA_AUTH.PASSWORD_REQUIREMENTS.'.concat(x), { n: this.passwordPolicy.minLength })\n )\n ].join(' ');\n }\n if (this.errorMsg) return this.message.error('IDEA_AUTH.REGISTRATION_FAILED');\n\n try {\n await this.loading.show();\n await this.auth.register(this.email, this.password);\n this.message.success('IDEA_AUTH.REGISTRATION_COMPLETED');\n this.goToAuth();\n } catch (err) {\n this.errorMsg = (err as any).message;\n this.message.error('IDEA_AUTH.REGISTRATION_FAILED');\n } finally {\n this.loading.hide();\n }\n }\n\n translationExists(key: string): boolean {\n return !!this.t._(key);\n }\n\n async openPasswordPolicy(event: Event): Promise<void> {\n const cssClass = 'passwordPolicyPopover';\n const popover = await this.popoverCtrl.create({ component: IDEAPasswordPolicyComponent, event, cssClass });\n await popover.present();\n }\n\n goToResendLink(): void {\n this.navCtrl.navigateForward(['auth/resend-link']);\n }\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.NEW_ACCOUNT' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.REGISTER_A_NEW_ACCOUNT_TO_THE_SYSTEM' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b> {{ 'IDEA_AUTH.ERROR' | translate }}. </b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n [placeholder]=\"'IDEA_AUTH.EMAIL' | translate\"\n [title]=\"'IDEA_AUTH.REGISTRATION_EMAIL_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"register()\"\n ></ion-input>\n </ion-item>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"password\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n [pattern]=\"auth.getPasswordPolicyPatternForInput()\"\n [clearOnEdit]=\"false\"\n [placeholder]=\"'IDEA_AUTH.PASSWORD' | translate\"\n [title]=\"'IDEA_AUTH.CHOOSE_A_PASSWORD' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"password\"\n (keyup.enter)=\"register()\"\n ></ion-input>\n <ion-button slot=\"end\" fill=\"clear\" color=\"dark\" (click)=\"openPasswordPolicy($event)\">\n <ion-icon icon=\"help-circle-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-item>\n <ion-row\n class=\"agreementsAcceptanceRow\"\n *ngIf=\"translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL')\"\n >\n <ion-col>\n <ion-checkbox\n size=\"small\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"agreementsCheck\"\n ></ion-checkbox>\n {{ 'IDEA_AUTH.AGREEMENTS_CHECK_REGISTRATION' | translate }}:\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\"\n [title]=\"'IDEA_AUTH.TERMS_AND_CONDITIONS_HINT' | translate\"\n [href]=\"'IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL' | translate\"\n >\n {{ 'IDEA_AUTH.TERMS_AND_CONDITIONS' | translate }}\n </a>\n <ion-text\n *ngIf=\"\n translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL') && translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\n \"\n >\n &\n </ion-text>\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL')\"\n [title]=\"'IDEA_AUTH.PRIVACY_POLICY_HINT' | translate\"\n [href]=\"'IDEA_VARIABLES.PRIVACY_POLICY_URL' | translate\"\n >\n {{ 'IDEA_AUTH.PRIVACY_POLICY' | translate }}\n </a>\n </ion-col>\n </ion-row>\n <ion-button\n expand=\"block\"\n [disabled]=\"!agreementsCheck\"\n [title]=\"'IDEA_AUTH.CREATE_AN_ACCOUNT_HINT' | translate\"\n (click)=\"register()\"\n >\n {{ 'IDEA_AUTH.CREATE_AN_ACCOUNT' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.HAVEN_T_RECEIVED_CONFIRMATION_LINK_HINT' | translate\"\n (click)=\"goToResendLink()\"\n >\n {{ 'IDEA_AUTH.HAVEN_T_RECEIVED_CONFIRMATION_LINK' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component, OnInit } from '@angular/core';\nimport { NavController, PopoverController } from '@ionic/angular';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAPasswordPolicyComponent } from './passwordPolicy.component';\n\nimport { IDEAAuthService } from './auth.service';\n\nimport { environment as env } from '@env/environment';\n\n@Component({\n selector: 'idea-new-password',\n templateUrl: 'newPassword.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEANewPasswordPage implements OnInit {\n newPassword: string;\n passwordPolicy = env.idea.auth.passwordPolicy;\n errorMsg: string;\n\n constructor(\n private navCtrl: NavController,\n private popoverCtrl: PopoverController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private t: IDEATranslationsService,\n public auth: IDEAAuthService\n ) {}\n ngOnInit(): void {\n if (!this.auth.challengeUsername) this.goToAuth();\n }\n\n async confirmNewPassword(): Promise<void> {\n try {\n this.errorMsg = null;\n const errors = this.auth.validatePasswordAgainstPolicy(this.newPassword);\n if (errors.length)\n this.errorMsg = [\n this.t._('IDEA_AUTH.PASSWORD_REQUIREMENTS_FOLLOW'),\n ...errors.map(x =>\n this.t._('IDEA_AUTH.PASSWORD_REQUIREMENTS.'.concat(x), { n: this.passwordPolicy.minLength })\n )\n ].join(' ');\n if (this.errorMsg) return this.message.error('IDEA_AUTH.PASSWORD_REQUIREMENTS_FOLLOW');\n\n await this.loading.show();\n await this.auth.confirmNewPassword(this.newPassword);\n window.location.assign('');\n } catch (error) {\n this.errorMsg = (error as any).message;\n this.message.error('IDEA_AUTH.PASSWORD_REQUIREMENTS_FOLLOW');\n } finally {\n this.loading.hide();\n }\n }\n\n async openPasswordPolicy(event: Event): Promise<void> {\n const cssClass = 'passwordPolicyPopover';\n const popover = await this.popoverCtrl.create({ component: IDEAPasswordPolicyComponent, event, cssClass });\n await popover.present();\n }\n\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.CHOOSE_A_PASSWORD' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.YOU_NEED_TO_CHOOSE_A_NEW_PASSWORD' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b> {{ 'IDEA_AUTH.ERROR' | translate }}. </b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"password\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"new-password\"\n [pattern]=\"auth.getPasswordPolicyPatternForInput()\"\n [clearOnEdit]=\"false\"\n [placeholder]=\"'IDEA_AUTH.PASSWORD' | translate\"\n [title]=\"'IDEA_AUTH.CHOOSE_A_PASSWORD' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"newPassword\"\n (keyup.enter)=\"confirmNewPassword()\"\n ></ion-input>\n <ion-button slot=\"end\" fill=\"clear\" color=\"dark\" (click)=\"openPasswordPolicy($event)\">\n <ion-icon icon=\"help-circle-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-item>\n <ion-button\n expand=\"block\"\n [title]=\"'IDEA_AUTH.CONFIRM_NEW_PASSWORD_HINT' | translate\"\n (click)=\"confirmNewPassword()\"\n >\n {{ 'IDEA_AUTH.CONFIRM_NEW_PASSWORD' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\n@Component({\n selector: 'idea-resend-link',\n templateUrl: 'resendLink.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAResendLinkPage {\n email: string;\n errorMsg: string;\n\n constructor(\n private navCtrl: NavController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private auth: IDEAAuthService,\n private t: IDEATranslationsService\n ) {}\n\n async resendConfirmationLink(): Promise<void> {\n this.errorMsg = null;\n if (!this.email) {\n this.errorMsg = this.t._('IDEA_AUTH.VALID_EMAIL_OBLIGATORY');\n this.message.error('IDEA_AUTH.SENDING_FAILED');\n return;\n }\n try {\n await this.loading.show();\n await this.auth.resendConfirmationCode(this.email);\n this.message.success('IDEA_AUTH.CONFIRMATION_LINK_SENT');\n this.goToAuth();\n } catch (error) {\n this.errorMsg = this.t._('IDEA_AUTH.IS_THE_EMAIL_CORRECT');\n this.message.error('IDEA_AUTH.SENDING_FAILED');\n } finally {\n this.loading.hide();\n }\n }\n\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.CONFIRM_ACCOUNT' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.RESEND_CONFIRMATION_LINK_HINT' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b> {{ 'IDEA_AUTH.ERROR' | translate }}. </b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"email\"\n [placeholder]=\"'IDEA_AUTH.EMAIL' | translate\"\n [title]=\"'IDEA_AUTH.EMAIL_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"resendConfirmationLink()\"\n ></ion-input>\n </ion-item>\n <ion-button\n expand=\"block\"\n [title]=\"'IDEA_AUTH.RESEND_LINK_HINT' | translate\"\n (click)=\"resendConfirmationLink()\"\n >\n {{ 'IDEA_AUTH.RESEND_LINK' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { IDEAMessageService, IDEALoadingService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\n@Component({\n selector: 'idea-forgot-password',\n templateUrl: 'forgotPassword.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAForgotPasswordPage {\n email: string;\n\n constructor(\n private navCtrl: NavController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private auth: IDEAAuthService\n ) {}\n\n async forgotPassword(): Promise<void> {\n try {\n await this.loading.show();\n await this.auth.forgotPassword(this.email);\n this.message.success('IDEA_AUTH.PASSWORD_RESET_CODE_SENT');\n this.goToConfirmPassword();\n } catch (error) {\n this.message.error('IDEA_AUTH.USER_NOT_FOUND');\n } finally {\n this.loading.hide();\n }\n }\n\n goToConfirmPassword(): void {\n this.navCtrl.navigateForward(['auth/confirm-password'], { queryParams: { email: this.email ?? null } });\n }\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.PASSWORD_RESET' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.PASSWORD_RESET_HINT' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"email\"\n [placeholder]=\"'IDEA_AUTH.EMAIL' | translate\"\n [title]=\"'IDEA_AUTH.EMAIL_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"forgotPassword()\"\n ></ion-input>\n </ion-item>\n <ion-button expand=\"block\" [title]=\"'IDEA_AUTH.RESET_MY_PASSWORD_HINT' | translate\" (click)=\"forgotPassword()\">\n {{ 'IDEA_AUTH.RESET_MY_PASSWORD' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.ALREADY_HAVE_A_RESET_CODE_HINT' | translate\"\n (click)=\"goToConfirmPassword()\"\n >\n {{ 'IDEA_AUTH.ALREADY_HAVE_A_RESET_CODE' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component, OnInit } from '@angular/core';\nimport { NavController, PopoverController } from '@ionic/angular';\nimport { ActivatedRoute } from '@angular/router';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAPasswordPolicyComponent } from './passwordPolicy.component';\n\nimport { IDEAAuthService } from './auth.service';\n\nimport { environment as env } from '@env/environment';\n\n@Component({\n selector: 'idea-confirm-password',\n templateUrl: 'confirmPassword.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAConfirmPasswordPage implements OnInit {\n email: string;\n newPassword: string;\n code: string;\n passwordPolicy = env.idea.auth.passwordPolicy;\n errorMsg: string;\n\n constructor(\n private navCtrl: NavController,\n private route: ActivatedRoute,\n private popoverCtrl: PopoverController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private t: IDEATranslationsService,\n public auth: IDEAAuthService\n ) {}\n ngOnInit(): void {\n this.email = this.route.snapshot.queryParamMap.get('email') ?? null;\n if (!this.email && this.route.snapshot.queryParams.user)\n this.email = decodeURIComponent(this.route.snapshot.queryParams.user);\n this.code = this.route.snapshot.queryParams.code;\n }\n\n async confirmPassword(): Promise<void> {\n try {\n this.errorMsg = null;\n const errors = this.auth.validatePasswordAgainstPolicy(this.newPassword);\n if (errors.length)\n this.errorMsg = [\n this.t._('IDEA_AUTH.PASSWORD_REQUIREMENTS_FOLLOW'),\n ...errors.map(x =>\n this.t._('IDEA_AUTH.PASSWORD_REQUIREMENTS.'.concat(x), { n: this.passwordPolicy.minLength })\n )\n ].join(' ');\n if (this.errorMsg) return this.message.error('IDEA_AUTH.PASSWORD_REQUIREMENTS_FOLLOW');\n\n await this.loading.show();\n await this.auth.confirmPassword(this.email, this.code, this.newPassword);\n this.message.success('IDEA_AUTH.PASSWORD_CHANGED');\n this.goToAuth();\n } catch (error) {\n this.errorMsg = (error as any).message;\n this.message.error('IDEA_AUTH.PASSWORD_REQUIREMENTS_FOLLOW');\n } finally {\n this.loading.hide();\n }\n }\n\n async openPasswordPolicy(event: Event): Promise<void> {\n const cssClass = 'passwordPolicyPopover';\n const popover = await this.popoverCtrl.create({ component: IDEAPasswordPolicyComponent, event, cssClass });\n await popover.present();\n }\n\n goToForgotPassword(): void {\n this.navCtrl.navigateBack(['auth/forgot-password']);\n }\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.CHANGE_THE_PASSWORD' | translate }}</ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b> {{ 'IDEA_AUTH.ERROR' | translate }}. </b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"email\"\n [placeholder]=\"'IDEA_AUTH.EMAIL' | translate\"\n [title]=\"'IDEA_AUTH.EMAIL_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"confirmPassword()\"\n ></ion-input>\n </ion-item>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"disc\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"text\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n [placeholder]=\"'IDEA_AUTH.RESET_CODE' | translate\"\n [title]=\"'IDEA_AUTH.RESET_CODE_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"code\"\n (keyup.enter)=\"confirmPassword()\"\n ></ion-input>\n </ion-item>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"password\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"new-password\"\n [pattern]=\"auth.getPasswordPolicyPatternForInput()\"\n [clearOnEdit]=\"false\"\n [placeholder]=\"'IDEA_AUTH.NEW_PASSWORD' | translate\"\n [title]=\"'IDEA_AUTH.CHOOSE_A_PASSWORD' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"newPassword\"\n (keyup.enter)=\"confirmPassword()\"\n ></ion-input>\n <ion-button slot=\"end\" fill=\"clear\" color=\"dark\" (click)=\"openPasswordPolicy($event)\">\n <ion-icon icon=\"help-circle-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-item>\n <ion-button\n expand=\"block\"\n [title]=\"'IDEA_AUTH.CHANGE_MY_PASSWORD_HINT' | translate\"\n (click)=\"confirmPassword()\"\n >\n {{ 'IDEA_AUTH.CHANGE_MY_PASSWORD' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.HAVEN_T_RECEIVED_A_RESET_CODE_HINT' | translate\"\n (click)=\"goToForgotPassword()\"\n >\n {{ 'IDEA_AUTH.HAVEN_T_RECEIVED_A_RESET_CODE' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component, OnInit } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\n@Component({\n selector: 'idea-mfa-challenge',\n templateUrl: 'mfaChallenge.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAMFAChallengePage implements OnInit {\n otpCode: string;\n errorMsg: string;\n\n constructor(\n private navCtrl: NavController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private auth: IDEAAuthService,\n private t: IDEATranslationsService\n ) {}\n ngOnInit(): void {\n if (!this.auth.challengeUsername) this.goToAuth();\n }\n\n async completeMFAChallenge(): Promise<void> {\n try {\n this.errorMsg = null;\n await this.loading.show();\n await this.auth.completeMFAChallenge(this.otpCode);\n window.location.assign('');\n } catch (error) {\n this.errorMsg = this.t._('IDEA_AUTH.INVALID_OTP_CODE');\n this.message.error(this.errorMsg, true);\n } finally {\n this.loading.hide();\n }\n }\n\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.ENTER_OTP_CODE' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.ENTER_OTP_CODE_I' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b>{{ 'IDEA_AUTH.ERROR' | translate }}.</b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n inputmode=\"numeric\"\n [placeholder]=\"'IDEA_AUTH.OTP_CODE' | translate\"\n [title]=\"'IDEA_AUTH.ENTER_OTP_CODE' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"otpCode\"\n (keyup.enter)=\"completeMFAChallenge()\"\n ></ion-input>\n </ion-item>\n <ion-button\n expand=\"block\"\n [title]=\"'IDEA_AUTH.CONFIRM_OTP_CODE_HINT' | translate\"\n (click)=\"completeMFAChallenge()\"\n >\n {{ 'IDEA_AUTH.CONFIRM_OTP_CODE' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component, OnInit } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\nimport { toCanvas } from 'qrcode';\n\nimport { IDEAAuthService } from '../auth.service';\nimport { IDEALoadingService, IDEAMessageService } from '@idea-ionic/common';\n\n@Component({\n selector: 'idea-setup-mfa-modal',\n templateUrl: 'setupMFAModal.component.html',\n styleUrls: ['setupMFAModal.component.scss']\n})\nexport class IDEASetupMFAModalComponent implements OnInit {\n otpCode: string;\n isMFAEnabled: boolean;\n\n constructor(\n private modalCtrl: ModalController,\n private loading: IDEALoadingService,\n private message: IDEAMessageService,\n private auth: IDEAAuthService\n ) {}\n async ngOnInit(): Promise<void> {\n try {\n await this.loading.show();\n this.isMFAEnabled = await this.auth.checkIfUserHasMFAEnabled(true);\n if (!this.isMFAEnabled) {\n const url = await this.auth.getURLForEnablingMFA();\n await this.generateQRCodeCanvasByURL(url);\n }\n } catch (error) {\n this.message.error('COMMON.OPERATION_FAILED');\n } finally {\n this.loading.hide();\n }\n }\n private generateQRCodeCanvasByURL(url: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n const container = document.getElementById('qrCodeContainer');\n container.innerHTML = '';\n toCanvas(url, { errorCorrectionLevel: 'L' }, (err: Error, canvas: HTMLCanvasElement): void => {\n if (err) return reject(err);\n canvas.style.width = '100%';\n canvas.style.height = '100%';\n canvas.style.borderRadius = '4px';\n container.appendChild(canvas);\n resolve();\n });\n });\n }\n\n async setMFA(enable: boolean): Promise<void> {\n if (!this.otpCode) return;\n try {\n await this.loading.show();\n if (enable) await this.auth.enableMFA(this.otpCode);\n else await this.auth.disableMFA(this.otpCode);\n this.isMFAEnabled = enable;\n this.message.success('COMMON.OPERATION_COMPLETED');\n this.modalCtrl.dismiss({ enabled: enable });\n } catch (error) {\n this.message.error('COMMON.OPERATION_FAILED');\n } finally {\n this.loading.hide();\n }\n }\n\n close(): void {\n this.modalCtrl.dismiss();\n }\n}\n","<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close-circle-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-title>{{ (isMFAEnabled ? 'IDEA_AUTH.DISABLE_MFA' : 'IDEA_AUTH.SETUP_MFA') | translate }}</ion-title>\n </ion-toolbar>\n</ion-header>\n<ion-content class=\"ion-padding\">\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label class=\"ion-text-center\">\n <h2>{{ (isMFAEnabled ? 'IDEA_AUTH.DISABLE_MFA_I' : 'IDEA_AUTH.SETUP_MFA_I') | translate }}</h2>\n <p>{{ (isMFAEnabled ? 'IDEA_AUTH.DISABLE_MFA_II' : 'IDEA_AUTH.SETUP_MFA_II') | translate }}</p>\n </ion-label>\n </ion-list-header>\n <ion-card color=\"white\">\n <ion-card-content>\n <div id=\"qrCodeContainer\" *ngIf=\"!isMFAEnabled\"></div>\n <ion-item color=\"light\">\n <ion-label position=\"floating\">{{ 'IDEA_AUTH.OTP_CODE' | translate }}</ion-label>\n <ion-input type=\"text\" inputmode=\"numeric\" [(ngModel)]=\"otpCode\"></ion-input>\n </ion-item>\n <ion-button expand=\"block\" class=\"ion-margin-top\" [disabled]=\"!otpCode\" (click)=\"setMFA(!isMFAEnabled)\">\n {{ (isMFAEnabled ? 'IDEA_AUTH.DISABLE_MFA' : 'IDEA_AUTH.ENABLE_MFA') | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </ion-list>\n</ion-content>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\n\nimport { IDEASetupMFAModalComponent } from './setupMFAModal.component';\n\nimport { IDEAAuthService } from '../auth.service';\n\n@Component({\n selector: 'idea-setup-mfa-button',\n templateUrl: 'setupMFAButton.component.html',\n styleUrls: ['setupMFAButton.component.scss']\n})\nexport class IDEASetupMFAButtonComponent implements OnInit {\n /**\n * The color of the button.\n */\n @Input() color: string;\n /**\n * The fill option for the button.\n */\n @Input() fill: string;\n /**\n * Trigger then the MFA setup changes.\n */\n @Output() change = new EventEmitter<boolean>();\n\n isMFAEnabled: boolean;\n\n constructor(private modalCtrl: ModalController, private auth: IDEAAuthService) {}\n async ngOnInit(): Promise<void> {\n this.isMFAEnabled = await this.auth.checkIfUserHasMFAEnabled(true);\n }\n\n async openMFAModal(): Promise<void> {\n const modal = await this.modalCtrl.create({ component: IDEASetupMFAModalComponent, backdropDismiss: false });\n modal.onDidDismiss().then(({ data }): void => {\n if (data) {\n this.isMFAEnabled = data.enabled;\n this.change.emit(data.enabled);\n }\n });\n await modal.present();\n }\n}\n","<ion-button *ngIf=\"isMFAEnabled !== undefined\" [color]=\"color\" [fill]=\"fill\" (click)=\"openMFAModal()\">\n {{ (isMFAEnabled ? 'IDEA_AUTH.DISABLE_MFA' : 'IDEA_AUTH.SETUP_MFA') | translate }}\n</ion-button>\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\n\n@Component({\n selector: 'idea-mfa-setup',\n templateUrl: 'setupMFA.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEASetupMFAPage {\n constructor(private navCtrl: NavController) {}\n\n reloadApp(): void {\n window.location.assign('');\n }\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.SETUP_MFA' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.MFA_IS_MANDATORY' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <idea-setup-mfa-button (change)=\"reloadApp()\"></idea-setup-mfa-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IonicModule } from '@ionic/angular';\nimport { FormsModule } from '@angular/forms';\nimport { IDEATranslationsModule } from '@idea-ionic/common';\n\nimport { IDEASetupMFAModalComponent } from './setupMFAModal.component';\nimport { IDEASetupMFAButtonComponent } from './setupMFAButton.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule, IonicModule, IDEATranslationsModule],\n declarations: [IDEASetupMFAModalComponent, IDEASetupMFAButtonComponent],\n exports: [IDEASetupMFAModalComponent, IDEASetupMFAButtonComponent]\n})\nexport class IDEASetupMFAModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\nimport { RouterModule } from '@angular/router';\n\nimport { IDEATranslationsModule } from '@idea-ionic/common';\n\nimport { IDEASignInPage } from './signIn.page';\nimport { IDEASignUpPage } from './signUp.page';\nimport { IDEANewPasswordPage } from './newPassword.page';\nimport { IDEAResendLinkPage } from './resendLink.page';\nimport { IDEAForgotPasswordPage } from './forgotPassword.page';\nimport { IDEAConfirmPasswordPage } from './confirmPassword.page';\nimport { IDEAMFAChallengePage } from './mfaChallenge.page';\nimport { IDEASetupMFAPage } from './setupMFA.page';\nimport { IDEAPasswordPolicyComponent } from './passwordPolicy.component';\n\nimport { IDEASetupMFAModule } from './setupMFA/setupMFA.module';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n IonicModule,\n IDEATranslationsModule,\n RouterModule.forChild([\n { path: '', redirectTo: 'sign-in', pathMatch: 'full' },\n { path: 'sign-in', component: IDEASignInPage },\n { path: 'sign-up', component: IDEASignUpPage },\n { path: 'new-password', component: IDEANewPasswordPage },\n { path: 'mfa-challenge', component: IDEAMFAChallengePage },\n { path: 'setup-mfa', component: IDEASetupMFAPage },\n { path: 'resend-link', component: IDEAResendLinkPage },\n { path: 'forgot-password', component: IDEAForgotPasswordPage },\n { path: 'confirm-password', component: IDEAConfirmPasswordPage }\n ]),\n IDEASetupMFAModule\n ],\n declarations: [\n IDEASignInPage,\n IDEASignUpPage,\n IDEANewPasswordPage,\n IDEAResendLinkPage,\n IDEAForgotPasswordPage,\n IDEAConfirmPasswordPage,\n IDEAMFAChallengePage,\n IDEASetupMFAPage,\n IDEAPasswordPolicyComponent\n ]\n})\nexport class IDEAAuthModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["env","i1","i3.IDEAAuthService","i2","i3","i4","i4.IDEAAuthService","i5","i6","i2.IDEAAuthService","i3.IDEASetupMFAButtonComponent"],"mappings":"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"}
|