{"version":3,"file":"abp-ng.oauth.mjs","sources":["../../../../packages/oauth/src/lib/providers/navigate-to-manage-profile.provider.ts","../../../../packages/oauth/src/lib/guards/oauth.guard.ts","../../../../packages/oauth/src/lib/handlers/oauth-configuration.handler.ts","../../../../packages/oauth/src/lib/interceptors/api.interceptor.ts","../../../../packages/oauth/src/lib/utils/clear-o-auth-storage.ts","../../../../packages/oauth/src/lib/tokens/cookies.ts","../../../../packages/oauth/src/lib/services/server-token-storage.service.ts","../../../../packages/oauth/src/lib/utils/storage.factory.ts","../../../../packages/oauth/src/lib/services/remember-me.service.ts","../../../../packages/oauth/src/lib/utils/auth-utils.ts","../../../../packages/oauth/src/lib/utils/check-access-token.ts","../../../../packages/oauth/src/lib/strategies/auth-flow-strategy.ts","../../../../packages/oauth/src/lib/strategies/auth-code-flow-strategy.ts","../../../../packages/oauth/src/lib/strategies/auth-password-flow-strategy.ts","../../../../packages/oauth/src/lib/tokens/auth-flow-strategy.ts","../../../../packages/oauth/src/lib/services/oauth.service.ts","../../../../packages/oauth/src/lib/services/oauth-error-filter.service.ts","../../../../packages/oauth/src/lib/services/browser-token-storage.service.ts","../../../../packages/oauth/src/lib/services/memory-token-storage.service.ts","../../../../packages/oauth/src/lib/providers/oauth-module-config.provider.ts","../../../../packages/oauth/src/lib/oauth.module.ts","../../../../packages/oauth/src/abp-ng.oauth.ts"],"sourcesContent":["import { inject, Provider } from '@angular/core';\r\nimport { EnvironmentService, NAVIGATE_TO_MANAGE_PROFILE } from '@abp/ng.core';\r\n\r\nexport const NavigateToManageProfileProvider: Provider = {\r\n  provide: NAVIGATE_TO_MANAGE_PROFILE,\r\n  useFactory: () => {\r\n    const environment = inject(EnvironmentService);\r\n\r\n    return () => {\r\n      const env = environment.getEnvironment();\r\n      if (!env.oAuthConfig) {\r\n        console.warn('The oAuthConfig env is missing on environment.ts');\r\n        return;\r\n      }\r\n\r\n      const { issuer } = env.oAuthConfig;\r\n      const path = issuer.endsWith('/') ? issuer : `${issuer}/`;\r\n      window.open(`${path}Account/Manage?returnUrl=${window.location.href}`, '_self');\r\n    };\r\n  },\r\n};\r\n","import { Injectable, inject, PLATFORM_ID, RESPONSE_INIT } from '@angular/core';\r\nimport {\r\n  UrlTree,\r\n  ActivatedRouteSnapshot,\r\n  RouterStateSnapshot,\r\n  CanActivateFn, Params,\r\n} from '@angular/router';\r\n\r\nimport { Observable, timer, filter, take, map, firstValueFrom, timeout, catchError, of } from 'rxjs';\r\nimport { OAuthService } from 'angular-oauth2-oidc';\r\n\r\nimport { AuthService, IAbpGuard, EnvironmentService } from '@abp/ng.core';\r\nimport { isPlatformServer } from '@angular/common';\r\n\r\n/**\r\n * @deprecated Use `abpOAuthGuard` *function* instead.\r\n */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AbpOAuthGuard implements IAbpGuard {\r\n  protected readonly oAuthService = inject(OAuthService);\r\n  protected readonly authService = inject(AuthService);\r\n\r\n  canActivate(\r\n    route: ActivatedRouteSnapshot,\r\n    state: RouterStateSnapshot,\r\n  ): Observable<boolean> | boolean | UrlTree {\r\n    const hasValidAccessToken = this.oAuthService.hasValidAccessToken();\r\n    if (hasValidAccessToken) {\r\n      return true;\r\n    }\r\n\r\n    const params = { returnUrl: state.url };\r\n    this.authService.navigateToLogin(params);\r\n    return false;\r\n  }\r\n}\r\n\r\nexport const abpOAuthGuard: CanActivateFn = (\r\n  route: ActivatedRouteSnapshot,\r\n  state: RouterStateSnapshot,\r\n) => {\r\n  const oAuthService = inject(OAuthService);\r\n  const authService = inject(AuthService);\r\n  const platformId = inject(PLATFORM_ID);\r\n  const resInit = inject(RESPONSE_INIT);\r\n  const environmentService = inject(EnvironmentService);\r\n\r\n  const hasValidAccessToken = oAuthService.hasValidAccessToken();\r\n\r\n  if (hasValidAccessToken) {\r\n    return true;\r\n  }\r\n\r\n  const params = { returnUrl: state.url };\r\n  if (isPlatformServer(platformId) && resInit) {\r\n    const ssrAuthorizationUrl = environmentService.getEnvironment().oAuthConfig.ssrAuthorizationUrl;\r\n    const url = buildLoginUrl(ssrAuthorizationUrl, params);\r\n    const headers = new Headers(resInit.headers);\r\n    headers.set('Location', url);\r\n    resInit.status = 302;\r\n    resInit.statusText = 'Found';\r\n    resInit.headers = headers;\r\n    return;\r\n  }\r\n  authService.navigateToLogin(params);\r\n  return false;\r\n};\r\n\r\nexport const buildLoginUrl = (path: string, params?: Params): string => {\r\n  if (!params || Object.keys(params).length === 0) return path;\r\n  const usp = new URLSearchParams();\r\n  for (const [k, v] of Object.entries(params)) {\r\n    if (v == null) continue;\r\n    Array.isArray(v) ? v.forEach(x => usp.append(k, String(x))) : usp.set(k, String(v));\r\n  }\r\n  return `${path}?${usp.toString()}`;\r\n}\r\n\r\nexport const asyncAbpOAuthGuard: CanActivateFn = (\r\n  route: ActivatedRouteSnapshot,\r\n  state: RouterStateSnapshot,\r\n) => {\r\n  const oAuthService = inject(OAuthService);\r\n  const authService = inject(AuthService);\r\n  const environmentService = inject(EnvironmentService);\r\n  const platformId = inject(PLATFORM_ID);\r\n  const resInit = inject(RESPONSE_INIT);\r\n\r\n  const { oAuthConfig } = environmentService.getEnvironment();\r\n\r\n  if (oAuthConfig?.responseType === 'code') {\r\n    return firstValueFrom(\r\n      timer(0, 100).pipe(\r\n        map(() => oAuthService.hasValidAccessToken()),\r\n        filter(Boolean),\r\n        take(1),\r\n        timeout(3000),\r\n        catchError(() => {\r\n          if (isPlatformServer(platformId) && resInit) {\r\n            const ssrAuthorizationUrl = environmentService.getEnvironment().oAuthConfig.ssrAuthorizationUrl;\r\n            const url = buildLoginUrl(ssrAuthorizationUrl, { returnUrl: state.url });\r\n            const headers = new Headers(resInit.headers);\r\n            headers.set('Location', url);\r\n            resInit.status = 302;\r\n            resInit.statusText = 'Found';\r\n            resInit.headers = headers;\r\n            return;\r\n          }\r\n          authService.navigateToLogin({ returnUrl: state.url });\r\n          return of(false);\r\n        })\r\n      )\r\n    );\r\n  }\r\n\r\n  if (oAuthService.hasValidAccessToken()) {\r\n    return true;\r\n  }\r\n\r\n  authService.navigateToLogin({ returnUrl: state.url });\r\n  return false;\r\n};\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { AuthConfig, OAuthService } from \"angular-oauth2-oidc\";\r\nimport compare from 'just-compare';\r\nimport { filter, map } from 'rxjs/operators';\r\nimport { ABP, EnvironmentService, CORE_OPTIONS } from '@abp/ng.core';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class OAuthConfigurationHandler {\r\n  private oAuthService = inject(OAuthService);\r\n  private environmentService = inject(EnvironmentService);\r\n  private options = inject<ABP.Root>(CORE_OPTIONS);\r\n\r\n  constructor() {\r\n    this.listenToSetEnvironment();\r\n  }\r\n\r\n  private listenToSetEnvironment() {\r\n    this.environmentService\r\n      .createOnUpdateStream(state => state)\r\n      .pipe(\r\n        map(environment => environment.oAuthConfig as AuthConfig),\r\n        filter(config => !compare(config, this.options.environment.oAuthConfig)),\r\n      )\r\n      .subscribe((config) => {\r\n        this.oAuthService.configure(config);\r\n      });\r\n  }\r\n}\r\n","import { HttpEvent, HttpHandler, HttpHeaders, HttpRequest } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { OAuthService } from 'angular-oauth2-oidc';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n  HttpWaitService,\r\n  IApiInterceptor,\r\n  IS_EXTERNAL_REQUEST,\r\n  SessionStateService,\r\n  TENANT_KEY,\r\n} from '@abp/ng.core';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class OAuthApiInterceptor implements IApiInterceptor {\r\n  private oAuthService = inject(OAuthService);\r\n  private sessionState = inject(SessionStateService);\r\n  private httpWaitService = inject(HttpWaitService);\r\n  private tenantKey = inject(TENANT_KEY);\r\n\r\n  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n    this.httpWaitService.addRequest(request);\r\n    const isExternalRequest = request.context?.get(IS_EXTERNAL_REQUEST);\r\n    const newRequest = isExternalRequest\r\n      ? request\r\n      : request.clone({\r\n          setHeaders: this.getAdditionalHeaders(request.headers),\r\n        });\r\n\r\n    return next\r\n      .handle(newRequest)\r\n      .pipe(finalize(() => this.httpWaitService.deleteRequest(request)));\r\n  }\r\n\r\n  getAdditionalHeaders(existingHeaders?: HttpHeaders) {\r\n    const headers = {} as any;\r\n\r\n    const token = this.oAuthService.getAccessToken();\r\n    if (!existingHeaders?.has('Authorization') && token) {\r\n      headers['Authorization'] = `Bearer ${token}`;\r\n    }\r\n\r\n    const lang = this.sessionState.getLanguage();\r\n    if (!existingHeaders?.has('Accept-Language') && lang) {\r\n      headers['Accept-Language'] = lang;\r\n    }\r\n\r\n    const tenant = this.sessionState.getTenant();\r\n    if (!existingHeaders?.has(this.tenantKey) && tenant?.id) {\r\n      headers[this.tenantKey] = tenant.id;\r\n    }\r\n\r\n    headers['X-Requested-With'] = 'XMLHttpRequest';\r\n\r\n    return headers;\r\n  }\r\n}\r\n","import { OAuthStorage } from 'angular-oauth2-oidc';\r\nimport { Injector } from '@angular/core';\r\n\r\nexport function clearOAuthStorage(injector: Injector) {\r\n  const storage = injector.get(OAuthStorage);\r\n  const keys = [\r\n    'access_token',\r\n    'id_token',\r\n    'refresh_token',\r\n    'nonce',\r\n    'PKCE_verifier',\r\n    'expires_at',\r\n    'id_token_claims_obj',\r\n    'id_token_expires_at',\r\n    'id_token_stored_at',\r\n    'access_token_stored_at',\r\n    'granted_scopes',\r\n    'session_state',\r\n  ];\r\n\r\n  keys.forEach(key => storage.removeItem(key));\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport const COOKIES = new InjectionToken<string>('COOKIES');\r\n","import { inject, Inject, Injectable, Optional } from '@angular/core';\r\nimport { OAuthStorage } from 'angular-oauth2-oidc';\r\nimport { REQUEST } from '@angular/core';\r\nimport { COOKIES } from '../tokens';\r\n\r\n@Injectable({ providedIn: null })\r\nexport class ServerTokenStorageService implements OAuthStorage {\r\n  private cookies = new Map<string, string>();\r\n  // For server builders where REQUEST injection is not possible, cookies can be provided via COOKIES token\r\n  private cookiesStr = inject<string>(COOKIES, { optional: true });\r\n\r\n  constructor(@Optional() @Inject(REQUEST) private req: Request | null) {\r\n    const cookieHeader = this.req?.headers.get('cookie') ?? this.cookiesStr ?? '';\r\n    for (const part of cookieHeader.split(';')) {\r\n      const i = part.indexOf('=');\r\n      if (i > -1) {\r\n        const k = part.slice(0, i).trim();\r\n        const v = decodeURIComponent(part.slice(i + 1).trim());\r\n        this.cookies.set(k, v);\r\n      }\r\n    }\r\n  }\r\n\r\n  getItem(key: string): string {\r\n    const fromCookie = this.cookies.get(key);\r\n    if (fromCookie) {\r\n      return fromCookie;\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  setItem(_k: string, _v: string): void {}\r\n  removeItem(_k: string): void {}\r\n}\r\n","import { inject, PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { ServerTokenStorageService } from '../services/server-token-storage.service';\r\nimport { BrowserTokenStorageService, MemoryTokenStorageService } from '../services';\r\nimport { OAuthStorage } from 'angular-oauth2-oidc';\r\nimport { APP_STARTED_WITH_SSR } from '@abp/ng.core';\r\n\r\nexport class MockStorage implements Storage {\r\n  private data = new Map<string, string>();\r\n  get length() {\r\n    return this.data.size;\r\n  }\r\n  clear() {\r\n    this.data.clear();\r\n  }\r\n  getItem(key: string) {\r\n    return this.data.get(key) || null;\r\n  }\r\n  key(index: number) {\r\n    return Array.from(this.data.keys())[index] || null;\r\n  }\r\n  removeItem(key: string) {\r\n    this.data.delete(key);\r\n  }\r\n  setItem(key: string, value: string) {\r\n    this.data.set(key, value);\r\n  }\r\n}\r\n\r\nexport function oAuthStorageFactory(): OAuthStorage {\r\n  const platformId = inject(PLATFORM_ID);\r\n  const appStartedWithSSR = inject(APP_STARTED_WITH_SSR);\r\n  if (appStartedWithSSR) {\r\n    return isPlatformBrowser(platformId)\r\n      ? inject(BrowserTokenStorageService)\r\n      : inject(ServerTokenStorageService);\r\n  }\r\n  return inject(MemoryTokenStorageService);\r\n}\r\n","import {\r\n  AbpCookieStorageService,\r\n  AbpLocalStorageService,\r\n  APP_STARTED_WITH_SSR,\r\n} from '@abp/ng.core';\r\nimport { Injectable, inject } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class RememberMeService {\r\n  readonly #rememberMe = 'remember_me';\r\n  protected readonly localStorageService = inject(AbpLocalStorageService);\r\n  protected readonly cookieStorageService = inject(AbpCookieStorageService);\r\n  private appStartedWithSsr = inject(APP_STARTED_WITH_SSR, { optional: true });\r\n\r\n  set(remember: boolean) {\r\n    if (this.appStartedWithSsr) {\r\n      this.cookieStorageService.setItem(this.#rememberMe, JSON.stringify(remember));\r\n      return;\r\n    }\r\n    this.localStorageService.setItem(this.#rememberMe, JSON.stringify(remember));\r\n  }\r\n\r\n  remove() {\r\n    if (this.appStartedWithSsr) {\r\n      this.cookieStorageService.removeItem(this.#rememberMe);\r\n      return;\r\n    }\r\n    this.localStorageService.removeItem(this.#rememberMe);\r\n  }\r\n\r\n  get() {\r\n    if (this.appStartedWithSsr) {\r\n      return Boolean(JSON.parse(this.cookieStorageService.getItem(this.#rememberMe) || 'false'));\r\n    }\r\n    return Boolean(JSON.parse(this.localStorageService.getItem(this.#rememberMe) || 'false'));\r\n  }\r\n\r\n  getFromToken(accessToken: string) {\r\n    let tokenBody = accessToken.split('.')[1].replace(/-/g, '+').replace(/_/g, '/');\r\n    while (tokenBody.length % 4 !== 0) {\r\n      tokenBody += '=';\r\n    }\r\n    try {\r\n      const parsedToken = JSON.parse(atob(tokenBody));\r\n      return Boolean(parsedToken[this.#rememberMe]);\r\n    } catch {\r\n      return false;\r\n    }\r\n  }\r\n}\r\n","import { Injector } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { pipe } from 'rxjs';\r\nimport { switchMap, tap } from 'rxjs/operators';\r\nimport {\r\n  AuthService,\r\n  ConfigStateService,\r\n  LoginParams,\r\n  PipeToLoginFn,\r\n} from '@abp/ng.core';\r\nimport { RememberMeService } from '../services/remember-me.service';\r\n\r\nexport const pipeToLogin: PipeToLoginFn = function (\r\n  params: Pick<LoginParams, 'redirectUrl' | 'rememberMe'>,\r\n  injector: Injector,\r\n) {\r\n  const configState = injector.get(ConfigStateService);\r\n  const router = injector.get(Router);\r\n  const rememberMeService = injector.get(RememberMeService);\r\n  const authService = injector.get(AuthService);\r\n  return pipe(\r\n    switchMap(() => configState.refreshAppState()),\r\n    tap(() => {\r\n      rememberMeService.set(\r\n        params.rememberMe ||\r\n        rememberMeService.get() ||\r\n        rememberMeService.getFromToken(authService.getAccessToken())\r\n      );\r\n      if (params.redirectUrl) router.navigate([params.redirectUrl]);\r\n    }),\r\n  );\r\n};\r\n\r\n//Ref: https://github.com/manfredsteyer/angular-oauth2-oidc/issues/1214\r\nexport function isTokenExpired(expireDate: number): boolean {\r\n  const currentDate = new Date().getTime();\r\n  return expireDate < currentDate;\r\n}\r\n","import { Injector } from '@angular/core';\r\nimport { CheckAuthenticationStateFn, ConfigStateService } from '@abp/ng.core';\r\nimport { OAuthService } from 'angular-oauth2-oidc';\r\nimport { clearOAuthStorage } from './clear-o-auth-storage';\r\n\r\nexport const checkAccessToken: CheckAuthenticationStateFn = function (injector: Injector) {\r\n  const configState = injector.get(ConfigStateService);\r\n  const oAuth = injector.get(OAuthService);\r\n  if (oAuth.hasValidAccessToken() && !configState.getDeep('currentUser.id')) {\r\n    clearOAuthStorage(injector);\r\n  }\r\n};\r\n","import { Injector } from '@angular/core';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { Params, Router } from '@angular/router';\r\n\r\nimport { Observable, of } from 'rxjs';\r\nimport { filter, map, switchMap, take, tap } from 'rxjs/operators';\r\nimport {\r\n  AuthConfig,\r\n  OAuthErrorEvent,\r\n  OAuthService as OAuthService2,\r\n  OAuthStorage,\r\n} from 'angular-oauth2-oidc';\r\n\r\nimport {\r\n  AbpLocalStorageService,\r\n  AbpWindowService,\r\n  ConfigStateService,\r\n  EnvironmentService,\r\n  HttpErrorReporterService,\r\n  LoginParams,\r\n  SessionStateService,\r\n  TENANT_KEY,\r\n} from '@abp/ng.core';\r\n\r\nimport { clearOAuthStorage } from '../utils/clear-o-auth-storage';\r\nimport { OAuthErrorFilterService } from '../services';\r\nimport { isTokenExpired } from '../utils';\r\nimport { RememberMeService } from '../services/remember-me.service';\r\n\r\nexport abstract class AuthFlowStrategy {\r\n  abstract readonly isInternalAuth: boolean;\r\n\r\n  protected httpErrorReporter: HttpErrorReporterService;\r\n  protected environment: EnvironmentService;\r\n  protected configState: ConfigStateService;\r\n  protected oAuthService: OAuthService2;\r\n  protected oAuthConfig!: AuthConfig;\r\n  protected sessionState: SessionStateService;\r\n  protected localStorageService: AbpLocalStorageService;\r\n  protected rememberMeService: RememberMeService;\r\n  protected windowService: AbpWindowService;\r\n  protected tenantKey: string;\r\n  protected router: Router;\r\n\r\n  protected readonly oAuthErrorFilterService: OAuthErrorFilterService;\r\n\r\n  abstract checkIfInternalAuth(queryParams?: Params): boolean;\r\n  abstract navigateToLogin(queryParams?: Params): void;\r\n  abstract logout(queryParams?: Params): Observable<any>;\r\n  abstract login(params?: LoginParams | Params): Observable<any>;\r\n\r\n  private catchError = (err: HttpErrorResponse) => {\r\n    this.httpErrorReporter.reportError(err);\r\n    return of(null);\r\n  };\r\n\r\n  constructor(protected injector: Injector) {\r\n    this.httpErrorReporter = injector.get(HttpErrorReporterService);\r\n    this.environment = injector.get(EnvironmentService);\r\n    this.configState = injector.get(ConfigStateService);\r\n    this.oAuthService = injector.get(OAuthService2);\r\n    this.sessionState = injector.get(SessionStateService);\r\n    this.localStorageService = injector.get(AbpLocalStorageService);\r\n    this.oAuthConfig = this.environment.getEnvironment().oAuthConfig || {};\r\n    this.tenantKey = injector.get(TENANT_KEY);\r\n    this.router = injector.get(Router);\r\n    this.oAuthErrorFilterService = injector.get(OAuthErrorFilterService);\r\n    this.rememberMeService = injector.get(RememberMeService);\r\n    this.windowService = injector.get(AbpWindowService);\r\n\r\n    this.listenToOauthErrors();\r\n  }\r\n\r\n  async init(): Promise<any> {\r\n    if (this.oAuthConfig.clientId) {\r\n      const shouldClear = shouldStorageClear(this.oAuthConfig.clientId, this.injector);\r\n      if (shouldClear) clearOAuthStorage(this.injector);\r\n    }\r\n    this.oAuthService.configure(this.oAuthConfig);\r\n    this.oAuthService.events\r\n      .pipe(filter(event => event.type === 'token_refresh_error'))\r\n      .subscribe(() => this.navigateToLogin());\r\n    this.navigateToPreviousUrl();\r\n    return this.oAuthService\r\n      .loadDiscoveryDocument()\r\n      .then(() => {\r\n        const isTokenExpire = isTokenExpired(this.oAuthService.getAccessTokenExpiration());\r\n        if (isTokenExpire && this.oAuthService.getRefreshToken()) {\r\n          return this.refreshToken();\r\n        }\r\n\r\n        return Promise.resolve();\r\n      })\r\n      .catch(this.catchError);\r\n  }\r\n\r\n  protected navigateToPreviousUrl(): void {\r\n    const { responseType } = this.oAuthConfig;\r\n    if (responseType === 'code') {\r\n      this.oAuthService.events\r\n        .pipe(\r\n          filter(event => event.type === 'token_received' && !!this.oAuthService.state),\r\n          take(1),\r\n          map(() => {\r\n            const redirectUri = decodeURIComponent(this.oAuthService.state);\r\n\r\n            if (redirectUri && redirectUri !== '/') {\r\n              return redirectUri;\r\n            }\r\n\r\n            return '/';\r\n          }),\r\n          switchMap(redirectUri =>\r\n            this.configState.getOne$('currentUser').pipe(\r\n              filter(user => !!user?.isAuthenticated),\r\n              tap(() => this.router.navigateByUrl(redirectUri)),\r\n            ),\r\n          ),\r\n        )\r\n        .subscribe();\r\n    }\r\n  }\r\n\r\n  protected refreshToken() {\r\n    return this.oAuthService.refreshToken().catch(() => clearOAuthStorage(this.injector));\r\n  }\r\n\r\n  protected listenToOauthErrors() {\r\n    this.oAuthService.events\r\n      .pipe(\r\n        filter(event => event instanceof OAuthErrorEvent),\r\n        tap((err: OAuthErrorEvent) => {\r\n          const shouldSkip = this.oAuthErrorFilterService.run(err);\r\n          if (!shouldSkip) {\r\n            clearOAuthStorage(this.injector);\r\n          }\r\n        }),\r\n        switchMap(() => this.configState.refreshAppState()),\r\n      )\r\n      .subscribe();\r\n  }\r\n}\r\n\r\nfunction shouldStorageClear(clientId: string, injector: Injector): boolean {\r\n  const storage = injector.get(OAuthStorage);\r\n  const key = 'abpOAuthClientId';\r\n  if (!storage.getItem(key)) {\r\n    storage.setItem(key, clientId);\r\n    return false;\r\n  }\r\n\r\n  const shouldClear = storage.getItem(key) !== clientId;\r\n  if (shouldClear) storage.setItem(key, clientId);\r\n  return shouldClear;\r\n}\r\n","import { DOCUMENT, Injector, PLATFORM_ID } from '@angular/core';\r\nimport { APP_STARTED_WITH_SSR, noop } from '@abp/ng.core';\r\nimport { Params } from '@angular/router';\r\nimport { filter, from, of, take, tap } from 'rxjs';\r\nimport { AuthFlowStrategy } from './auth-flow-strategy';\r\nimport { isTokenExpired } from '../utils';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\nexport class AuthCodeFlowStrategy extends AuthFlowStrategy {\r\n  readonly isInternalAuth = false;\r\n  private platformId: object;\r\n  protected appStartedWithSSR: boolean;\r\n  protected document: Document;\r\n\r\n  constructor(protected injector: Injector) {\r\n    super(injector);\r\n    this.platformId = injector.get(PLATFORM_ID);\r\n    this.appStartedWithSSR = injector.get(APP_STARTED_WITH_SSR);\r\n    this.document = injector.get(DOCUMENT);\r\n  }\r\n\r\n  async init() {\r\n    this.checkRememberMeOption();\r\n    this.listenToTokenReceived();\r\n    if (!this.appStartedWithSSR && isPlatformBrowser(this.platformId)) {\r\n      return super\r\n        .init()\r\n        .then(() => this.oAuthService.tryLogin().catch(noop))\r\n        .then(() => {\r\n          this.oAuthService.setupAutomaticSilentRefresh();\r\n        });\r\n    }\r\n  }\r\n\r\n  private checkRememberMeOption() {\r\n    const accessToken = this.oAuthService.getAccessToken();\r\n    const isTokenExpire = isTokenExpired(this.oAuthService.getAccessTokenExpiration());\r\n    let rememberMe = this.rememberMeService.get();\r\n    if (accessToken && !rememberMe) {\r\n      const rememberMeValue = this.rememberMeService.getFromToken(accessToken);\r\n\r\n      this.rememberMeService.set(!!rememberMeValue);\r\n    }\r\n\r\n    rememberMe = this.rememberMeService.get();\r\n    if (accessToken && isTokenExpire && !rememberMe) {\r\n      this.rememberMeService.remove();\r\n      this.oAuthService.logOut();\r\n    }\r\n  }\r\n\r\n  private getCultureParams(queryParams?: Params) {\r\n    const lang = this.sessionState.getLanguage();\r\n    const culture = { culture: lang, 'ui-culture': lang };\r\n    return { ...(lang && culture), ...queryParams };\r\n  }\r\n\r\n  protected setUICulture() {\r\n    if (isPlatformBrowser(this.platformId)) {\r\n      const urlParams = new URLSearchParams(window.location.search);\r\n      this.configState.uiCultureFromAuthCodeFlow = urlParams.get('ui-culture');\r\n    }\r\n  }\r\n\r\n  protected replaceURLParams() {\r\n    if (isPlatformBrowser(this.platformId)) {\r\n      const location = this.windowService.window.location;\r\n      const history = this.windowService.window.history;\r\n\r\n      const query = location.search\r\n        .replace(/([?&])iss=[^&]*&?/, '$1')\r\n        .replace(/([?&])culture=[^&]*&?/, '$1')\r\n        .replace(/([?&])ui-culture=[^&]*&?/, '$1')\r\n        .replace(/[?&]+$/, '');\r\n\r\n      const href = location.origin + location.pathname + query + location.hash;\r\n\r\n      history.replaceState(null, '', href);\r\n    }\r\n  }\r\n\r\n  protected listenToTokenReceived() {\r\n    if (isPlatformBrowser(this.platformId) && !this.appStartedWithSSR) {\r\n      this.oAuthService.events\r\n        .pipe(\r\n          filter(event => event.type === 'token_received'),\r\n          tap(() => {\r\n            //TODO: Investigate how to handle with ssr\r\n            this.setUICulture();\r\n            this.replaceURLParams();\r\n          }),\r\n          take(1),\r\n        )\r\n        .subscribe();\r\n    }\r\n  }\r\n\r\n  navigateToLogin(queryParams?: Params) {\r\n    if (isPlatformBrowser(this.platformId)) {\r\n      if (this.appStartedWithSSR) {\r\n        if (this.document.defaultView) {\r\n          this.document.defaultView.location.replace('/authorize');\r\n        }\r\n      } else {\r\n        let additionalState = '';\r\n        if (queryParams?.returnUrl) {\r\n          additionalState = queryParams.returnUrl;\r\n        }\r\n\r\n        const cultureParams = this.getCultureParams(queryParams);\r\n        this.oAuthService.initCodeFlow(additionalState, cultureParams);\r\n      }\r\n    }\r\n  }\r\n\r\n  checkIfInternalAuth(queryParams?: Params) {\r\n    if (isPlatformBrowser(this.platformId)) {\r\n      this.oAuthService.initCodeFlow('', this.getCultureParams(queryParams));\r\n      return false;\r\n    }\r\n  }\r\n\r\n  logout(queryParams?: Params) {\r\n    this.rememberMeService.remove();\r\n\r\n    if (this.appStartedWithSSR) {\r\n      if (this.document.defaultView) {\r\n        this.document.defaultView.location.replace('/logout');\r\n      }\r\n    } else {\r\n      if (queryParams?.noRedirectToLogoutUrl) {\r\n        this.router.navigate(['/']);\r\n        return from(this.oAuthService.revokeTokenAndLogout(true));\r\n      }\r\n      return from(this.oAuthService.revokeTokenAndLogout(this.getCultureParams(queryParams)));\r\n    }\r\n  }\r\n\r\n  login(queryParams?: Params) {\r\n    if (isPlatformBrowser(this.platformId)) {\r\n      this.oAuthService.initCodeFlow('', this.getCultureParams(queryParams));\r\n      return of(null);\r\n    }\r\n  }\r\n}\r\n","import { filter, switchMap, tap } from 'rxjs/operators';\r\nimport { OAuthInfoEvent } from 'angular-oauth2-oidc';\r\nimport { Params, Router } from '@angular/router';\r\nimport { from, Observable } from 'rxjs';\r\nimport { HttpHeaders } from '@angular/common/http';\r\nimport { AuthFlowStrategy } from './auth-flow-strategy';\r\nimport { isTokenExpired, pipeToLogin } from '../utils/auth-utils';\r\nimport { LoginParams } from '@abp/ng.core';\r\nimport { clearOAuthStorage } from '../utils/clear-o-auth-storage';\r\n\r\nexport class AuthPasswordFlowStrategy extends AuthFlowStrategy {\r\n  readonly isInternalAuth = true;\r\n\r\n  private listenToTokenExpiration() {\r\n    this.oAuthService.events\r\n      .pipe(\r\n        filter(\r\n          event =>\r\n            event instanceof OAuthInfoEvent &&\r\n            event.type === 'token_expires' &&\r\n            event.info === 'access_token',\r\n        ),\r\n      )\r\n      .subscribe(() => {\r\n        if (this.oAuthService.getRefreshToken()) {\r\n          this.refreshToken();\r\n        } else {\r\n          this.oAuthService.logOut();\r\n          this.rememberMeService.remove();\r\n          this.configState.refreshAppState().subscribe();\r\n        }\r\n      });\r\n  }\r\n\r\n  async init() {\r\n    this.checkRememberMeOption();\r\n\r\n    return super.init().then(() => this.listenToTokenExpiration());\r\n  }\r\n\r\n  private checkRememberMeOption() {\r\n    const accessToken = this.oAuthService.getAccessToken();\r\n    const isTokenExpire = isTokenExpired(this.oAuthService.getAccessTokenExpiration());\r\n    const rememberMe = this.rememberMeService.get();\r\n    if (accessToken && isTokenExpire && !rememberMe) {\r\n      this.rememberMeService.remove();\r\n      this.oAuthService.logOut();\r\n    }\r\n  }\r\n\r\n  navigateToLogin(queryParams?: Params) {\r\n    const router = this.injector.get(Router);\r\n    return router.navigate(['/account/login'], { queryParams });\r\n  }\r\n\r\n  checkIfInternalAuth() {\r\n    return true;\r\n  }\r\n\r\n  login(params: LoginParams): Observable<any> {\r\n    const tenant = this.sessionState.getTenant();\r\n\r\n    return from(\r\n      this.oAuthService.fetchTokenUsingPasswordFlow(\r\n        params.username,\r\n        params.password,\r\n        new HttpHeaders({ ...(tenant && tenant.id && { [this.tenantKey]: tenant.id }) }),\r\n      ),\r\n    ).pipe(pipeToLogin(params, this.injector));\r\n  }\r\n\r\n  logout() {\r\n    const router = this.injector.get(Router);\r\n    const noRedirectToLogoutUrl = true;\r\n    return from(this.oAuthService.revokeTokenAndLogout(noRedirectToLogoutUrl)).pipe(\r\n      switchMap(() => this.configState.refreshAppState()),\r\n      tap(() => {\r\n        this.rememberMeService.remove();\r\n        router.navigateByUrl('/');\r\n      }),\r\n    );\r\n  }\r\n\r\n  protected refreshToken() {\r\n    return this.oAuthService.refreshToken().catch(() => {\r\n      clearOAuthStorage(this.injector);\r\n      this.rememberMeService.remove();\r\n    });\r\n  }\r\n}\r\n","import { Injector } from '@angular/core';\r\nimport { AuthCodeFlowStrategy } from '../strategies/auth-code-flow-strategy';\r\nimport { AuthPasswordFlowStrategy } from '../strategies/auth-password-flow-strategy';\r\n\r\nexport const AUTH_FLOW_STRATEGY = {\r\n  Code(injector: Injector) {\r\n    return new AuthCodeFlowStrategy(injector);\r\n  },\r\n  Password(injector: Injector) {\r\n    return new AuthPasswordFlowStrategy(injector);\r\n  },\r\n};\r\n","import { Injectable, Injector, inject, PLATFORM_ID, DOCUMENT } from '@angular/core';\r\nimport { Params } from '@angular/router';\r\nimport { from, Observable, lastValueFrom, EMPTY } from 'rxjs';\r\nimport { filter, map, switchMap, take, tap } from 'rxjs/operators';\r\nimport { AbpAuthResponse, APP_STARTED_WITH_SSR, IAuthService, LoginParams } from '@abp/ng.core';\r\nimport { AuthFlowStrategy } from '../strategies';\r\nimport { EnvironmentService } from '@abp/ng.core';\r\nimport { AUTH_FLOW_STRATEGY } from '../tokens/auth-flow-strategy';\r\nimport { OAuthService } from 'angular-oauth2-oidc';\r\nimport { HttpHeaders } from '@angular/common/http';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AbpOAuthService implements IAuthService {\r\n  protected injector = inject(Injector);\r\n  private appStartedWithSsr = this.injector.get(APP_STARTED_WITH_SSR);\r\n  private platformId = this.injector.get(PLATFORM_ID);\r\n  private document = this.injector.get(DOCUMENT);\r\n\r\n  private strategy!: AuthFlowStrategy;\r\n  private readonly oAuthService: OAuthService;\r\n\r\n  get oidc() {\r\n    return this.oAuthService.oidc;\r\n  }\r\n\r\n  set oidc(value) {\r\n    this.oAuthService.oidc = value;\r\n  }\r\n\r\n  get isInternalAuth() {\r\n    return this.strategy.isInternalAuth;\r\n  }\r\n\r\n  constructor() {\r\n    this.oAuthService = this.injector.get(OAuthService);\r\n  }\r\n\r\n  async init() {\r\n    const environmentService = this.injector.get(EnvironmentService);\r\n\r\n    const result$ = environmentService.getEnvironment$().pipe(\r\n      map(env => env?.oAuthConfig),\r\n      filter(Boolean),\r\n      tap(oAuthConfig => {\r\n        this.strategy =\r\n          oAuthConfig.responseType === 'code'\r\n            ? AUTH_FLOW_STRATEGY.Code(this.injector)\r\n            : AUTH_FLOW_STRATEGY.Password(this.injector);\r\n      }),\r\n      switchMap(() => from(this.strategy.init())),\r\n      take(1),\r\n    );\r\n\r\n    return await lastValueFrom(result$);\r\n  }\r\n\r\n  logout(queryParams?: Params): Observable<any> {\r\n    if (!this.strategy) {\r\n      return EMPTY;\r\n    }\r\n    return this.strategy.logout(queryParams);\r\n  }\r\n\r\n  navigateToLogin(queryParams?: Params) {\r\n    this.strategy.navigateToLogin(queryParams);\r\n  }\r\n\r\n  login(params: LoginParams) {\r\n    return this.strategy.login(params);\r\n  }\r\n\r\n  get isAuthenticated(): boolean {\r\n    return this.oAuthService.hasValidAccessToken();\r\n  }\r\n\r\n  loginUsingGrant(\r\n    grantType: string,\r\n    parameters: object,\r\n    headers?: HttpHeaders,\r\n  ): Promise<AbpAuthResponse> {\r\n    const { clientId: client_id, dummyClientSecret: client_secret } = this.oAuthService;\r\n    const access_token = this.oAuthService.getAccessToken();\r\n    const p = {\r\n      access_token,\r\n      grant_type: grantType,\r\n      client_id,\r\n      ...parameters,\r\n    };\r\n\r\n    if (client_secret) {\r\n      p['client_secret'] = client_secret;\r\n    }\r\n\r\n    return this.oAuthService.fetchTokenUsingGrant(grantType, p, headers);\r\n  }\r\n\r\n  getRefreshToken(): string {\r\n    return this.oAuthService.getRefreshToken();\r\n  }\r\n\r\n  getAccessToken(): string {\r\n    return this.oAuthService.getAccessToken();\r\n  }\r\n\r\n  refreshToken(): Promise<AbpAuthResponse | void> {\r\n    if (isPlatformBrowser(this.platformId) && this.appStartedWithSsr) {\r\n      this.document.defaultView?.location.replace('/authorize');\r\n      return Promise.resolve();\r\n    }\r\n    try {\r\n      return this.oAuthService.refreshToken();\r\n    } catch (error) {\r\n      console.log(\"Error while refreshing token: \", error);\r\n      return Promise.reject();\r\n    }\r\n  }\r\n\r\n  getAccessTokenExpiration(): number {\r\n    return this.oAuthService.getAccessTokenExpiration();\r\n  }\r\n}\r\n","import { Injectable, signal } from '@angular/core';\r\nimport { OAuthErrorEvent } from 'angular-oauth2-oidc';\r\nimport { AbstractAuthErrorFilter, AuthErrorFilter } from '@abp/ng.core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class OAuthErrorFilterService extends AbstractAuthErrorFilter<\r\n  AuthErrorFilter<OAuthErrorEvent>,\r\n  OAuthErrorEvent\r\n> {\r\n  protected readonly _filters = signal<Array<AuthErrorFilter<OAuthErrorEvent>>>([]);\r\n  readonly filters = this._filters.asReadonly();\r\n\r\n  get(id: string): AuthErrorFilter<OAuthErrorEvent> {\r\n    return this._filters().find(({ id: _id }) => _id === id);\r\n  }\r\n\r\n  add(filter: AuthErrorFilter<OAuthErrorEvent>): void {\r\n    this._filters.update(items => [...items, filter]);\r\n  }\r\n\r\n  patch(item: Partial<AuthErrorFilter<OAuthErrorEvent>>): void {\r\n    const _item = this.filters().find(({ id }) => id === item.id);\r\n    if (!_item) {\r\n      return;\r\n    }\r\n\r\n    Object.assign(_item, item);\r\n  }\r\n\r\n  remove(id: string): void {\r\n    const item = this.filters().find(({ id: _id }) => _id === id);\r\n    if (!item) {\r\n      return;\r\n    }\r\n\r\n    this._filters.update(items => items.filter(({ id: _id }) => _id !== id));\r\n  }\r\n\r\n  run(event: OAuthErrorEvent): boolean {\r\n    return this.filters()\r\n      .filter(({ executable }) => !!executable)\r\n      .map(({ execute }) => execute(event))\r\n      .some(item => item);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { OAuthStorage } from 'angular-oauth2-oidc';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class BrowserTokenStorageService implements OAuthStorage {\r\n  getItem(key: string): string {\r\n    return this.readCookie(key);\r\n  }\r\n\r\n  removeItem(key: string): void {\r\n    this.removeCookie(key);\r\n  }\r\n\r\n  setItem(key: string, data: string): void {\r\n    this.writeCookie(key, data);\r\n  }\r\n\r\n  readCookie(name: string): string | null {\r\n    if (typeof document === 'undefined') return null;\r\n    const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));\r\n    return match ? decodeURIComponent(match[2]) : null;\r\n  }\r\n\r\n  writeCookie(name: string, value: string, days = 7): void {\r\n    if (typeof document === 'undefined') return;\r\n    const expires = new Date(Date.now() + days * 86400000).toUTCString();\r\n    document.cookie = `${name}=${encodeURIComponent(value)}; expires=${expires}; path=/; Secure; SameSite=Lax`;\r\n  }\r\n\r\n  removeCookie(name: string): void {\r\n    if (typeof document === 'undefined') return;\r\n    document.cookie = `${name}=; Max-Age=0; path=/;`;\r\n  }\r\n}\r\n","import { DestroyRef, DOCUMENT, inject, Injectable } from '@angular/core';\r\nimport { OAuthStorage } from 'angular-oauth2-oidc';\r\nimport { AbpLocalStorageService } from '@abp/ng.core';\r\nimport { fromEvent } from 'rxjs';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class MemoryTokenStorageService implements OAuthStorage {\r\n  private static workerUrl: string | null = null;\r\n\r\n  private keysShouldStoreInMemory = [\r\n    'access_token',\r\n    'id_token',\r\n    'expires_at',\r\n    'id_token_claims_obj',\r\n    'id_token_expires_at',\r\n    'id_token_stored_at',\r\n    'access_token_stored_at',\r\n    'abpOAuthClientId',\r\n    'granted_scopes',\r\n  ];\r\n\r\n  private keysShouldStoreInSession = ['nonce', 'PKCE_verifier', 'session_state'];\r\n\r\n  private worker?: any;\r\n  private port?: MessagePort;\r\n  private cache = new Map<string, string>();\r\n  private localStorageService = inject(AbpLocalStorageService);\r\n  private _document = inject(DOCUMENT);\r\n  private destroyRef = inject(DestroyRef);\r\n  private useSharedWorker = false;\r\n\r\n  constructor() {\r\n    this.initializeStorage();\r\n    this.setupCleanup();\r\n  }\r\n\r\n  private initializeStorage(): void {\r\n    // @ts-ignore\r\n    if (typeof SharedWorker !== 'undefined') {\r\n      try {\r\n        // Create worker from data URL to avoid path resolution issues in consuming apps\r\n        // Data URLs are deterministic - same content produces same URL across all tabs\r\n        if (!MemoryTokenStorageService.workerUrl) {\r\n          MemoryTokenStorageService.workerUrl = this.createWorkerDataUrl();\r\n        }\r\n        // @ts-ignore\r\n        this.worker = new SharedWorker(MemoryTokenStorageService.workerUrl, {\r\n          name: 'oauth-token-storage',\r\n        });\r\n        this.port = this.worker.port;\r\n        this.port.start();\r\n        this.useSharedWorker = true;\r\n\r\n        this.port.onmessage = event => {\r\n          const { action, key, value } = event.data;\r\n\r\n          switch (action) {\r\n            case 'set':\r\n              this.checkAuthStateChanges(key);\r\n              this.cache.set(key, value);\r\n              break;\r\n            case 'remove':\r\n              this.cache.delete(key);\r\n              this.refreshDocument();\r\n              break;\r\n            case 'clear':\r\n              this.cache.clear();\r\n              this.refreshDocument();\r\n              break;\r\n            case 'get':\r\n              if (value !== null) {\r\n                this.cache.set(key, value);\r\n              }\r\n              break;\r\n          }\r\n        };\r\n\r\n        // Load all tokens from SharedWorker on initialization\r\n        this.keysShouldStoreInMemory.forEach(key => {\r\n          this.port?.postMessage({ action: 'get', key });\r\n        });\r\n      } catch (error) {\r\n        this.useSharedWorker = false;\r\n      }\r\n    } else {\r\n      this.useSharedWorker = false;\r\n    }\r\n  }\r\n\r\n  getItem(key: string): string | null {\r\n    if (this.keysShouldStoreInMemory.includes(key)) {\r\n      return this.cache.get(key) || null;\r\n    }\r\n\r\n    if (this.keysShouldStoreInSession.includes(key)) {\r\n      return this.getSessionItem(key);\r\n    }\r\n\r\n    return this.localStorageService.getItem(key);\r\n  }\r\n\r\n  setItem(key: string, value: string): void {\r\n    if (this.keysShouldStoreInMemory.includes(key)) {\r\n      if (this.useSharedWorker && this.port) {\r\n        this.cache.set(key, value);\r\n        this.port.postMessage({ action: 'set', key, value });\r\n      } else {\r\n        this.cache.set(key, value);\r\n      }\r\n\r\n      return;\r\n    }\r\n\r\n    if (this.keysShouldStoreInSession.includes(key)) {\r\n      this.setSessionItem(key, value);\r\n      return;\r\n    }\r\n\r\n    this.localStorageService.setItem(key, value);\r\n  }\r\n\r\n  removeItem(key: string): void {\r\n    if (this.keysShouldStoreInMemory.includes(key)) {\r\n      if (this.useSharedWorker && this.port) {\r\n        this.cache.delete(key);\r\n        this.port.postMessage({ action: 'remove', key });\r\n      } else {\r\n        this.cache.delete(key);\r\n      }\r\n\r\n      return;\r\n    }\r\n\r\n    if (this.keysShouldStoreInSession.includes(key)) {\r\n      this.removeSessionItem(key);\r\n      return;\r\n    }\r\n\r\n    this.localStorageService.removeItem(key);\r\n  }\r\n\r\n  clear(): void {\r\n    if (this.useSharedWorker && this.port) {\r\n      this.port.postMessage({ action: 'clear' });\r\n    }\r\n    this.cache.clear();\r\n  }\r\n\r\n  private cleanupPort(): void {\r\n    if (this.useSharedWorker && this.port) {\r\n      try {\r\n        this.port.postMessage({ action: 'disconnect' });\r\n      } catch (error) {\r\n        //\r\n      }\r\n    }\r\n  }\r\n\r\n  private setupCleanup(): void {\r\n    if (this._document.defaultView) {\r\n      fromEvent(this._document.defaultView, 'beforeunload')\r\n        .pipe(takeUntilDestroyed(this.destroyRef))\r\n        .subscribe(() => this.cleanupPort());\r\n\r\n      fromEvent(this._document.defaultView, 'pagehide')\r\n        .pipe(takeUntilDestroyed(this.destroyRef))\r\n        .subscribe(() => this.cleanupPort());\r\n    }\r\n  }\r\n\r\n  private checkAuthStateChanges = (key: string) => {\r\n    if (key === 'access_token' && !this.cache.get('access_token')) {\r\n      this.refreshDocument();\r\n    }\r\n  };\r\n\r\n  private refreshDocument(): void {\r\n    this.cleanupPort();\r\n    setTimeout(() => {\r\n      this._document.defaultView?.location.reload();\r\n    }, 100);\r\n  }\r\n\r\n  private getSessionStorage(): Storage | null {\r\n    try {\r\n      return this._document.defaultView?.sessionStorage ?? null;\r\n    } catch {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  private getSessionItem(key: string): string | null {\r\n    const storage = this.getSessionStorage();\r\n    return storage ? storage.getItem(key) : this.localStorageService.getItem(key);\r\n  }\r\n\r\n  private setSessionItem(key: string, value: string): void {\r\n    const storage = this.getSessionStorage();\r\n    if (storage) {\r\n      storage.setItem(key, value);\r\n    } else {\r\n      this.localStorageService.setItem(key, value);\r\n    }\r\n  }\r\n\r\n  private removeSessionItem(key: string): void {\r\n    const storage = this.getSessionStorage();\r\n    if (storage) {\r\n      storage.removeItem(key);\r\n    } else {\r\n      this.localStorageService.removeItem(key);\r\n    }\r\n  }\r\n\r\n  private createWorkerDataUrl(): string {\r\n    const workerScript = `const tokenStore = new Map();\r\nconst ports = new Set();\r\n\r\nfunction broadcastToOtherPorts(senderPort, message) {\r\n  const deadPorts = [];\r\n  ports.forEach(p => {\r\n    if (p !== senderPort) {\r\n      try {\r\n        p.postMessage(message);\r\n      } catch (error) {\r\n        deadPorts.push(p);\r\n      }\r\n    }\r\n  });\r\n  deadPorts.forEach(p => ports.delete(p));\r\n}\r\n\r\nfunction removePort(port) {\r\n  if (ports.has(port)) {\r\n    ports.delete(port);\r\n  }\r\n}\r\n\r\nself.onconnect = (event) => {\r\n  const port = event.ports[0];\r\n  ports.add(port);\r\n\r\n  port.addEventListener('messageerror', () => {\r\n    removePort(port);\r\n  });\r\n\r\n  port.onmessage = (e) => {\r\n    const { action, key, value } = e.data;\r\n\r\n    switch (action) {\r\n      case 'set':\r\n        if (key && value !== undefined) {\r\n          tokenStore.set(key, value);\r\n          broadcastToOtherPorts(port, { action: 'set', key, value });\r\n        }\r\n        break;\r\n\r\n      case 'remove':\r\n        if (key) {\r\n          tokenStore.delete(key);\r\n          broadcastToOtherPorts(port, { action: 'remove', key });\r\n        }\r\n        break;\r\n\r\n      case 'clear':\r\n        tokenStore.clear();\r\n        broadcastToOtherPorts(port, { action: 'clear' });\r\n        break;\r\n\r\n      case 'get':\r\n        if (key) {\r\n          const value = tokenStore.get(key) ?? null;\r\n          port.postMessage({ action: 'get', key, value });\r\n        }\r\n        break;\r\n\r\n      case 'disconnect':\r\n        removePort(port);\r\n        break;\r\n\r\n      default:\r\n        //\r\n    }\r\n  };\r\n\r\n  port.start();\r\n};`;\r\n    return 'data:application/javascript;base64,' + btoa(workerScript);\r\n  }\r\n}\r\n","import {\r\n  AuthService,\r\n  AuthGuard,\r\n  authGuard,\r\n  asyncAuthGuard,\r\n  ApiInterceptor,\r\n  PIPE_TO_LOGIN_FN_KEY,\r\n  CHECK_AUTHENTICATION_STATE_FN_KEY,\r\n  AuthErrorFilterService,\r\n} from '@abp/ng.core';\r\nimport { Provider, makeEnvironmentProviders, inject, provideAppInitializer } from '@angular/core';\r\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { OAuthModule, OAuthStorage } from 'angular-oauth2-oidc';\r\nimport { AbpOAuthGuard, abpOAuthGuard, asyncAbpOAuthGuard,  } from '../guards';\r\nimport { OAuthConfigurationHandler } from '../handlers';\r\nimport { OAuthApiInterceptor } from '../interceptors';\r\nimport { AbpOAuthService, BrowserTokenStorageService, OAuthErrorFilterService } from '../services';\r\nimport { pipeToLogin, checkAccessToken, oAuthStorageFactory } from '../utils';\r\nimport { NavigateToManageProfileProvider } from './navigate-to-manage-profile.provider';\r\nimport { ServerTokenStorageService } from '../services/server-token-storage.service';\r\n\r\nexport function provideAbpOAuth() {\r\n  const providers = [\r\n    {\r\n      provide: AuthService,\r\n      useClass: AbpOAuthService,\r\n    },\r\n    {\r\n      provide: AuthGuard,\r\n      useClass: AbpOAuthGuard,\r\n    },\r\n    {\r\n      provide: authGuard,\r\n      useValue: abpOAuthGuard,\r\n    },\r\n    {\r\n      provide: asyncAuthGuard,\r\n      useValue: asyncAbpOAuthGuard,\r\n    },\r\n    {\r\n      provide: ApiInterceptor,\r\n      useClass: OAuthApiInterceptor,\r\n    },\r\n    {\r\n      provide: PIPE_TO_LOGIN_FN_KEY,\r\n      useValue: pipeToLogin,\r\n    },\r\n    {\r\n      provide: CHECK_AUTHENTICATION_STATE_FN_KEY,\r\n      useValue: checkAccessToken,\r\n    },\r\n    {\r\n      provide: HTTP_INTERCEPTORS,\r\n      useExisting: ApiInterceptor,\r\n      multi: true,\r\n    },\r\n    NavigateToManageProfileProvider,\r\n    provideAppInitializer(() => {\r\n      inject(OAuthConfigurationHandler);\r\n    }),\r\n    OAuthModule.forRoot().providers as Provider[],\r\n    ServerTokenStorageService,\r\n    BrowserTokenStorageService,\r\n    {\r\n      provide: OAuthStorage,\r\n      useFactory: oAuthStorageFactory,\r\n    },\r\n    { provide: AuthErrorFilterService, useExisting: OAuthErrorFilterService },\r\n  ];\r\n\r\n  return makeEnvironmentProviders(providers);\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { provideAbpOAuth } from './providers';\r\n\r\n/**\r\n * @deprecated AbpOAuthModule is deprecated use `provideAbpOAuth` *function* instead.\r\n */\r\n@NgModule()\r\nexport class AbpOAuthModule {\r\n  static forRoot(): ModuleWithProviders<AbpOAuthModule> {\r\n    return {\r\n      ngModule: AbpOAuthModule,\r\n      providers: [provideAbpOAuth()],\r\n    };\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["map","filter","OAuthService2","take","tap"],"mappings":";;;;;;;;;;;;AAGO,MAAM,+BAA+B,GAAa;AACvD,IAAA,OAAO,EAAE,0BAA0B;IACnC,UAAU,EAAE,MAAK;AACf,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAE9C,QAAA,OAAO,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,WAAW,CAAC,cAAc,EAAE;AACxC,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;AACpB,gBAAA,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC;gBAChE;YACF;AAEA,YAAA,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW;AAClC,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAA,EAAG,MAAM,GAAG;AACzD,YAAA,MAAM,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAA,yBAAA,EAA4B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,EAAE,OAAO,CAAC;AACjF,QAAA,CAAC;IACH,CAAC;;;ACLH;;AAEG;MAIU,aAAa,CAAA;AAH1B,IAAA,WAAA,GAAA;AAIqB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAerD,IAAA;IAbC,WAAW,CACT,KAA6B,EAC7B,KAA0B,EAAA;QAE1B,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE;QACnE,IAAI,mBAAmB,EAAE;AACvB,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,MAAM,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE;AACvC,QAAA,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC;AACxC,QAAA,OAAO,KAAK;IACd;+GAhBW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA;;4FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;MAoBY,aAAa,GAAkB,CAC1C,KAA6B,EAC7B,KAA0B,KACxB;AACF,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACzC,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACvC,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AACtC,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAErD,IAAA,MAAM,mBAAmB,GAAG,YAAY,CAAC,mBAAmB,EAAE;IAE9D,IAAI,mBAAmB,EAAE;AACvB,QAAA,OAAO,IAAI;IACb;IAEA,MAAM,MAAM,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE;AACvC,IAAA,IAAI,gBAAgB,CAAC,UAAU,CAAC,IAAI,OAAO,EAAE;QAC3C,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,mBAAmB;QAC/F,MAAM,GAAG,GAAG,aAAa,CAAC,mBAAmB,EAAE,MAAM,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;AAC5C,QAAA,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC;AAC5B,QAAA,OAAO,CAAC,MAAM,GAAG,GAAG;AACpB,QAAA,OAAO,CAAC,UAAU,GAAG,OAAO;AAC5B,QAAA,OAAO,CAAC,OAAO,GAAG,OAAO;QACzB;IACF;AACA,IAAA,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC;AACnC,IAAA,OAAO,KAAK;AACd;MAEa,aAAa,GAAG,CAAC,IAAY,EAAE,MAAe,KAAY;AACrE,IAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI;AAC5D,IAAA,MAAM,GAAG,GAAG,IAAI,eAAe,EAAE;AACjC,IAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAC3C,IAAI,CAAC,IAAI,IAAI;YAAE;AACf,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACrF;IACA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAC,QAAQ,EAAE,EAAE;AACpC;MAEa,kBAAkB,GAAkB,CAC/C,KAA6B,EAC7B,KAA0B,KACxB;AACF,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACzC,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACvC,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACrD,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AACtC,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;IAErC,MAAM,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAAC,cAAc,EAAE;AAE3D,IAAA,IAAI,WAAW,EAAE,YAAY,KAAK,MAAM,EAAE;AACxC,QAAA,OAAO,cAAc,CACnB,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAChB,GAAG,CAAC,MAAM,YAAY,CAAC,mBAAmB,EAAE,CAAC,EAC7C,MAAM,CAAC,OAAO,CAAC,EACf,IAAI,CAAC,CAAC,CAAC,EACP,OAAO,CAAC,IAAI,CAAC,EACb,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,gBAAgB,CAAC,UAAU,CAAC,IAAI,OAAO,EAAE;gBAC3C,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,mBAAmB;AAC/F,gBAAA,MAAM,GAAG,GAAG,aAAa,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;gBACxE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;AAC5C,gBAAA,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC;AAC5B,gBAAA,OAAO,CAAC,MAAM,GAAG,GAAG;AACpB,gBAAA,OAAO,CAAC,UAAU,GAAG,OAAO;AAC5B,gBAAA,OAAO,CAAC,OAAO,GAAG,OAAO;gBACzB;YACF;YACA,WAAW,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;AACrD,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;QAClB,CAAC,CAAC,CACH,CACF;IACH;AAEA,IAAA,IAAI,YAAY,CAAC,mBAAmB,EAAE,EAAE;AACtC,QAAA,OAAO,IAAI;IACb;IAEA,WAAW,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;AACrD,IAAA,OAAO,KAAK;AACd;;MClHa,yBAAyB,CAAA;AAKpC,IAAA,WAAA,GAAA;AAJQ,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAW,YAAY,CAAC;QAG9C,IAAI,CAAC,sBAAsB,EAAE;IAC/B;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,IAAI,CAAC;AACF,aAAA,oBAAoB,CAAC,KAAK,IAAI,KAAK;AACnC,aAAA,IAAI,CACHA,KAAG,CAAC,WAAW,IAAI,WAAW,CAAC,WAAyB,CAAC,EACzDC,QAAM,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAEzE,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;AACpB,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC;AACrC,QAAA,CAAC,CAAC;IACN;+GAnBW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFxB,MAAM,EAAA,CAAA,CAAA;;4FAEP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCQY,mBAAmB,CAAA;AAHhC,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC1C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC;AAsCvC,IAAA;IApCC,SAAS,CAAC,OAAyB,EAAE,IAAiB,EAAA;AACpD,QAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;QACxC,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,mBAAmB,CAAC;QACnE,MAAM,UAAU,GAAG;AACjB,cAAE;AACF,cAAE,OAAO,CAAC,KAAK,CAAC;gBACZ,UAAU,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC;AACvD,aAAA,CAAC;AAEN,QAAA,OAAO;aACJ,MAAM,CAAC,UAAU;AACjB,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IACtE;AAEA,IAAA,oBAAoB,CAAC,eAA6B,EAAA;QAChD,MAAM,OAAO,GAAG,EAAS;QAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;QAChD,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,IAAI,KAAK,EAAE;AACnD,YAAA,OAAO,CAAC,eAAe,CAAC,GAAG,CAAA,OAAA,EAAU,KAAK,EAAE;QAC9C;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;QAC5C,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,iBAAiB,CAAC,IAAI,IAAI,EAAE;AACpD,YAAA,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;QACnC;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;AAC5C,QAAA,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,MAAM,EAAE,EAAE,EAAE;YACvD,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,EAAE;QACrC;AAEA,QAAA,OAAO,CAAC,kBAAkB,CAAC,GAAG,gBAAgB;AAE9C,QAAA,OAAO,OAAO;IAChB;+GAzCW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACZK,SAAU,iBAAiB,CAAC,QAAkB,EAAA;IAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;AAC1C,IAAA,MAAM,IAAI,GAAG;QACX,cAAc;QACd,UAAU;QACV,eAAe;QACf,OAAO;QACP,eAAe;QACf,YAAY;QACZ,qBAAqB;QACrB,qBAAqB;QACrB,oBAAoB;QACpB,wBAAwB;QACxB,gBAAgB;QAChB,eAAe;KAChB;AAED,IAAA,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC9C;;MCnBa,OAAO,GAAG,IAAI,cAAc,CAAS,SAAS;;MCI9C,yBAAyB,CAAA;AAKpC,IAAA,WAAA,CAAiD,GAAmB,EAAA;QAAnB,IAAA,CAAA,GAAG,GAAH,GAAG;AAJ5C,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAkB;;QAEnC,IAAA,CAAA,UAAU,GAAG,MAAM,CAAS,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAG9D,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE;QAC7E,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAC3B,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;AACV,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;AACjC,gBAAA,MAAM,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YACxB;QACF;IACF;AAEA,IAAA,OAAO,CAAC,GAAW,EAAA;QACjB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QACxC,IAAI,UAAU,EAAE;AACd,YAAA,OAAO,UAAU;QACnB;AAEA,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,OAAO,CAAC,EAAU,EAAE,EAAU,IAAS;IACvC,UAAU,CAAC,EAAU,EAAA,EAAS;AA3BnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,kBAKJ,OAAO,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAL5B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cADZ,IAAI,EAAA,CAAA,CAAA;;4FACjB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;mBAAC,EAAE,UAAU,EAAE,IAAI,EAAE;;0BAMjB;;0BAAY,MAAM;2BAAC,OAAO;;;MCJ5B,WAAW,CAAA;AAAxB,IAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,GAAG,EAAkB;IAmB1C;AAlBE,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI;IACvB;IACA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;IACnB;AACA,IAAA,OAAO,CAAC,GAAW,EAAA;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI;IACnC;AACA,IAAA,GAAG,CAAC,KAAa,EAAA;AACf,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI;IACpD;AACA,IAAA,UAAU,CAAC,GAAW,EAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IACvB;IACA,OAAO,CAAC,GAAW,EAAE,KAAa,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;IAC3B;AACD;SAEe,mBAAmB,GAAA;AACjC,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AACtC,IAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,oBAAoB,CAAC;IACtD,IAAI,iBAAiB,EAAE;QACrB,OAAO,iBAAiB,CAAC,UAAU;AACjC,cAAE,MAAM,CAAC,0BAA0B;AACnC,cAAE,MAAM,CAAC,yBAAyB,CAAC;IACvC;AACA,IAAA,OAAO,MAAM,CAAC,yBAAyB,CAAC;AAC1C;;MC5Ba,iBAAiB,CAAA;AAH9B,IAAA,WAAA,GAAA;QAIW,IAAA,CAAA,WAAW,GAAG,aAAa;AACjB,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACpD,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,uBAAuB,CAAC;QACjE,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAqC7E,IAAA;AAxCU,IAAA,WAAW;AAKpB,IAAA,GAAG,CAAC,QAAiB,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC7E;QACF;AACA,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC9E;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;YACtD;QACF;QACA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;IACvD;IAEA,GAAG,GAAA;AACD,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,CAAC;QAC5F;QACA,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,CAAC;IAC3F;AAEA,IAAA,YAAY,CAAC,WAAmB,EAAA;QAC9B,IAAI,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;QAC/E,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;YACjC,SAAS,IAAI,GAAG;QAClB;AACA,QAAA,IAAI;YACF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/C;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,KAAK;QACd;IACF;+GAxCW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA,CAAA;;4FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACGM,MAAM,WAAW,GAAkB,UACxC,MAAuD,EACvD,QAAkB,EAAA;IAElB,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;IACnC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACzD,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;AAC7C,IAAA,OAAO,IAAI,CACT,SAAS,CAAC,MAAM,WAAW,CAAC,eAAe,EAAE,CAAC,EAC9C,GAAG,CAAC,MAAK;AACP,QAAA,iBAAiB,CAAC,GAAG,CACnB,MAAM,CAAC,UAAU;YACjB,iBAAiB,CAAC,GAAG,EAAE;YACvB,iBAAiB,CAAC,YAAY,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,CAC7D;QACD,IAAI,MAAM,CAAC,WAAW;YAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/D,CAAC,CAAC,CACH;AACH;AAEA;AACM,SAAU,cAAc,CAAC,UAAkB,EAAA;IAC/C,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;IACxC,OAAO,UAAU,GAAG,WAAW;AACjC;;AChCO,MAAM,gBAAgB,GAA+B,UAAU,QAAkB,EAAA;IACtF,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;AACxC,IAAA,IAAI,KAAK,CAAC,mBAAmB,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;QACzE,iBAAiB,CAAC,QAAQ,CAAC;IAC7B;AACF;;MCkBsB,gBAAgB,CAAA;AA2BpC,IAAA,WAAA,CAAsB,QAAkB,EAAA;QAAlB,IAAA,CAAA,QAAQ,GAAR,QAAQ;AALtB,QAAA,IAAA,CAAA,UAAU,GAAG,CAAC,GAAsB,KAAI;AAC9C,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG,CAAC;AACvC,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACjB,QAAA,CAAC;QAGC,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,wBAAwB,CAAC;QAC/D,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACnD,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACnD,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,GAAG,CAACC,YAAa,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACrD,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,GAAG,CAAC,sBAAsB,CAAC;AAC/D,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,WAAW,IAAI,EAAE;QACtE,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,uBAAuB,GAAG,QAAQ,CAAC,GAAG,CAAC,uBAAuB,CAAC;QACpE,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACxD,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAEnD,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AAC7B,YAAA,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;AAChF,YAAA,IAAI,WAAW;AAAE,gBAAA,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnD;QACA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;QAC7C,IAAI,CAAC,YAAY,CAAC;AACf,aAAA,IAAI,CAACD,QAAM,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,CAAC;aAC1D,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,IAAI,CAAC,qBAAqB,EAAE;QAC5B,OAAO,IAAI,CAAC;AACT,aAAA,qBAAqB;aACrB,IAAI,CAAC,MAAK;YACT,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,wBAAwB,EAAE,CAAC;YAClF,IAAI,aAAa,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE;AACxD,gBAAA,OAAO,IAAI,CAAC,YAAY,EAAE;YAC5B;AAEA,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE;AAC1B,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;IAC3B;IAEU,qBAAqB,GAAA;AAC7B,QAAA,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,WAAW;AACzC,QAAA,IAAI,YAAY,KAAK,MAAM,EAAE;YAC3B,IAAI,CAAC,YAAY,CAAC;AACf,iBAAA,IAAI,CACHA,QAAM,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAC7EE,MAAI,CAAC,CAAC,CAAC,EACPH,KAAG,CAAC,MAAK;gBACP,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAE/D,gBAAA,IAAI,WAAW,IAAI,WAAW,KAAK,GAAG,EAAE;AACtC,oBAAA,OAAO,WAAW;gBACpB;AAEA,gBAAA,OAAO,GAAG;YACZ,CAAC,CAAC,EACF,SAAS,CAAC,WAAW,IACnB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAC1CC,QAAM,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,eAAe,CAAC,EACvC,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAClD,CACF;AAEF,iBAAA,SAAS,EAAE;QAChB;IACF;IAEU,YAAY,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,MAAM,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvF;IAEU,mBAAmB,GAAA;QAC3B,IAAI,CAAC,YAAY,CAAC;AACf,aAAA,IAAI,CACHA,QAAM,CAAC,KAAK,IAAI,KAAK,YAAY,eAAe,CAAC,EACjD,GAAG,CAAC,CAAC,GAAoB,KAAI;YAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC;YACxD,IAAI,CAAC,UAAU,EAAE;AACf,gBAAA,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;YAClC;AACF,QAAA,CAAC,CAAC,EACF,SAAS,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;AAEpD,aAAA,SAAS,EAAE;IAChB;AACD;AAED,SAAS,kBAAkB,CAAC,QAAgB,EAAE,QAAkB,EAAA;IAC9D,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;IAC1C,MAAM,GAAG,GAAG,kBAAkB;IAC9B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACzB,QAAA,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC9B,QAAA,OAAO,KAAK;IACd;IAEA,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ;AACrD,IAAA,IAAI,WAAW;AAAE,QAAA,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC/C,IAAA,OAAO,WAAW;AACpB;;AClJM,MAAO,oBAAqB,SAAQ,gBAAgB,CAAA;AAMxD,IAAA,WAAA,CAAsB,QAAkB,EAAA;QACtC,KAAK,CAAC,QAAQ,CAAC;QADK,IAAA,CAAA,QAAQ,GAAR,QAAQ;QALrB,IAAA,CAAA,cAAc,GAAG,KAAK;QAO7B,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;QAC3C,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC;QAC3D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;IACxC;AAEA,IAAA,MAAM,IAAI,GAAA;QACR,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,qBAAqB,EAAE;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACjE,YAAA,OAAO;AACJ,iBAAA,IAAI;AACJ,iBAAA,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;iBACnD,IAAI,CAAC,MAAK;AACT,gBAAA,IAAI,CAAC,YAAY,CAAC,2BAA2B,EAAE;AACjD,YAAA,CAAC,CAAC;QACN;IACF;IAEQ,qBAAqB,GAAA;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;QACtD,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,wBAAwB,EAAE,CAAC;QAClF,IAAI,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE;AAC7C,QAAA,IAAI,WAAW,IAAI,CAAC,UAAU,EAAE;YAC9B,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,WAAW,CAAC;YAExE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC;QAC/C;AAEA,QAAA,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE;AACzC,QAAA,IAAI,WAAW,IAAI,aAAa,IAAI,CAAC,UAAU,EAAE;AAC/C,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;AAC/B,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QAC5B;IACF;AAEQ,IAAA,gBAAgB,CAAC,WAAoB,EAAA;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;QAC5C,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE;QACrD,OAAO,EAAE,IAAI,IAAI,IAAI,OAAO,CAAC,EAAE,GAAG,WAAW,EAAE;IACjD;IAEU,YAAY,GAAA;AACpB,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACtC,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7D,IAAI,CAAC,WAAW,CAAC,yBAAyB,GAAG,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;QAC1E;IACF;IAEU,gBAAgB,GAAA;AACxB,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ;YACnD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO;AAEjD,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC;AACpB,iBAAA,OAAO,CAAC,mBAAmB,EAAE,IAAI;AACjC,iBAAA,OAAO,CAAC,uBAAuB,EAAE,IAAI;AACrC,iBAAA,OAAO,CAAC,0BAA0B,EAAE,IAAI;AACxC,iBAAA,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;AAExB,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC,IAAI;YAExE,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC;QACtC;IACF;IAEU,qBAAqB,GAAA;AAC7B,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACjE,IAAI,CAAC,YAAY,CAAC;AACf,iBAAA,IAAI,CACH,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC,EAChDG,KAAG,CAAC,MAAK;;gBAEP,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,CAAC,CAAC,EACF,IAAI,CAAC,CAAC,CAAC;AAER,iBAAA,SAAS,EAAE;QAChB;IACF;AAEA,IAAA,eAAe,CAAC,WAAoB,EAAA;AAClC,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACtC,YAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;oBAC7B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC;gBAC1D;YACF;iBAAO;gBACL,IAAI,eAAe,GAAG,EAAE;AACxB,gBAAA,IAAI,WAAW,EAAE,SAAS,EAAE;AAC1B,oBAAA,eAAe,GAAG,WAAW,CAAC,SAAS;gBACzC;gBAEA,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;gBACxD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,eAAe,EAAE,aAAa,CAAC;YAChE;QACF;IACF;AAEA,IAAA,mBAAmB,CAAC,WAAoB,EAAA;AACtC,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACtC,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;AACtE,YAAA,OAAO,KAAK;QACd;IACF;AAEA,IAAA,MAAM,CAAC,WAAoB,EAAA;AACzB,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;AAE/B,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;gBAC7B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;YACvD;QACF;aAAO;AACL,YAAA,IAAI,WAAW,EAAE,qBAAqB,EAAE;gBACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC3D;AACA,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;QACzF;IACF;AAEA,IAAA,KAAK,CAAC,WAAoB,EAAA;AACxB,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACtC,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;AACtE,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;IACF;AACD;;ACtIK,MAAO,wBAAyB,SAAQ,gBAAgB,CAAA;AAA9D,IAAA,WAAA,GAAA;;QACW,IAAA,CAAA,cAAc,GAAG,IAAI;IA8EhC;IA5EU,uBAAuB,GAAA;QAC7B,IAAI,CAAC,YAAY,CAAC;aACf,IAAI,CACHH,QAAM,CACJ,KAAK,IACH,KAAK,YAAY,cAAc;YAC/B,KAAK,CAAC,IAAI,KAAK,eAAe;AAC9B,YAAA,KAAK,CAAC,IAAI,KAAK,cAAc,CAChC;aAEF,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE;gBACvC,IAAI,CAAC,YAAY,EAAE;YACrB;iBAAO;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC1B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;gBAC/B,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,SAAS,EAAE;YAChD;AACF,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,MAAM,IAAI,GAAA;QACR,IAAI,CAAC,qBAAqB,EAAE;AAE5B,QAAA,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;IAChE;IAEQ,qBAAqB,GAAA;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;QACtD,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,wBAAwB,EAAE,CAAC;QAClF,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE;AAC/C,QAAA,IAAI,WAAW,IAAI,aAAa,IAAI,CAAC,UAAU,EAAE;AAC/C,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;AAC/B,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QAC5B;IACF;AAEA,IAAA,eAAe,CAAC,WAAoB,EAAA;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;AACxC,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC;IAC7D;IAEA,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,KAAK,CAAC,MAAmB,EAAA;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;QAE5C,OAAO,IAAI,CACT,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAC3C,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,QAAQ,EACf,IAAI,WAAW,CAAC,EAAE,IAAI,MAAM,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CACjF,CACF,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C;IAEA,MAAM,GAAA;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;QACxC,MAAM,qBAAqB,GAAG,IAAI;AAClC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAC7E,SAAS,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,EACnD,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;AAC/B,YAAA,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC;QAC3B,CAAC,CAAC,CACH;IACH;IAEU,YAAY,GAAA;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,MAAK;AACjD,YAAA,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;AAChC,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;AACjC,QAAA,CAAC,CAAC;IACJ;AACD;;ACrFM,MAAM,kBAAkB,GAAG;AAChC,IAAA,IAAI,CAAC,QAAkB,EAAA;AACrB,QAAA,OAAO,IAAI,oBAAoB,CAAC,QAAQ,CAAC;IAC3C,CAAC;AACD,IAAA,QAAQ,CAAC,QAAkB,EAAA;AACzB,QAAA,OAAO,IAAI,wBAAwB,CAAC,QAAQ,CAAC;IAC/C,CAAC;;;MCKU,eAAe,CAAA;AAS1B,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI;IAC/B;IAEA,IAAI,IAAI,CAAC,KAAK,EAAA;AACZ,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,KAAK;IAChC;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc;IACrC;AAEA,IAAA,WAAA,GAAA;AApBU,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC7B,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC;QAC3D,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;QAC3C,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;QAkB5C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;IACrD;AAEA,IAAA,MAAM,IAAI,GAAA;QACR,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC;AAEhE,QAAA,MAAM,OAAO,GAAG,kBAAkB,CAAC,eAAe,EAAE,CAAC,IAAI,CACvDD,KAAG,CAAC,GAAG,IAAI,GAAG,EAAE,WAAW,CAAC,EAC5BC,QAAM,CAAC,OAAO,CAAC,EACf,GAAG,CAAC,WAAW,IAAG;AAChB,YAAA,IAAI,CAAC,QAAQ;gBACX,WAAW,CAAC,YAAY,KAAK;sBACzB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;sBACrC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;QAClD,CAAC,CAAC,EACF,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAC3CE,MAAI,CAAC,CAAC,CAAC,CACR;AAED,QAAA,OAAO,MAAM,aAAa,CAAC,OAAO,CAAC;IACrC;AAEA,IAAA,MAAM,CAAC,WAAoB,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,OAAO,KAAK;QACd;QACA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC;IAC1C;AAEA,IAAA,eAAe,CAAC,WAAoB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC;IAC5C;AAEA,IAAA,KAAK,CAAC,MAAmB,EAAA;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;IACpC;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE;IAChD;AAEA,IAAA,eAAe,CACb,SAAiB,EACjB,UAAkB,EAClB,OAAqB,EAAA;AAErB,QAAA,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,YAAY;QACnF,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;AACvD,QAAA,MAAM,CAAC,GAAG;YACR,YAAY;AACZ,YAAA,UAAU,EAAE,SAAS;YACrB,SAAS;AACT,YAAA,GAAG,UAAU;SACd;QAED,IAAI,aAAa,EAAE;AACjB,YAAA,CAAC,CAAC,eAAe,CAAC,GAAG,aAAa;QACpC;AAEA,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,SAAS,EAAE,CAAC,EAAE,OAAO,CAAC;IACtE;IAEA,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;IAC5C;IAEA,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;IAC3C;IAEA,YAAY,GAAA;QACV,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAChE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC;AACzD,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE;QAC1B;AACA,QAAA,IAAI;AACF,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;QACzC;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,KAAK,CAAC;AACpD,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE;QACzB;IACF;IAEA,wBAAwB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,wBAAwB,EAAE;IACrD;+GA3GW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA;;4FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACTK,MAAO,uBAAwB,SAAQ,uBAG5C,CAAA;AAJD,IAAA,WAAA,GAAA;;AAKqB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAA0C,EAAE,+EAAC;AACxE,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;AAkC9C,IAAA;AAhCC,IAAA,GAAG,CAAC,EAAU,EAAA;QACZ,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC;IAC1D;AAEA,IAAA,GAAG,CAAC,MAAwC,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,MAAM,CAAC,CAAC;IACnD;AAEA,IAAA,KAAK,CAAC,IAA+C,EAAA;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7D,IAAI,CAAC,KAAK,EAAE;YACV;QACF;AAEA,QAAA,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;IAC5B;AAEA,IAAA,MAAM,CAAC,EAAU,EAAA;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC;QAC7D,IAAI,CAAC,IAAI,EAAE;YACT;QACF;QAEA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC;IAC1E;AAEA,IAAA,GAAG,CAAC,KAAsB,EAAA;QACxB,OAAO,IAAI,CAAC,OAAO;aAChB,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,UAAU;AACvC,aAAA,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC;AACnC,aAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;IACvB;+GAtCW,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cADV,MAAM,EAAA,CAAA,CAAA;;4FACnB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCErB,0BAA0B,CAAA;AACrC,IAAA,OAAO,CAAC,GAAW,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;IAC7B;AAEA,IAAA,UAAU,CAAC,GAAW,EAAA;AACpB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;IACxB;IAEA,OAAO,CAAC,GAAW,EAAE,IAAY,EAAA;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC;IAC7B;AAEA,IAAA,UAAU,CAAC,IAAY,EAAA;QACrB,IAAI,OAAO,QAAQ,KAAK,WAAW;AAAE,YAAA,OAAO,IAAI;AAChD,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC;AAC5E,QAAA,OAAO,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IACpD;AAEA,IAAA,WAAW,CAAC,IAAY,EAAE,KAAa,EAAE,IAAI,GAAG,CAAC,EAAA;QAC/C,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE;AACrC,QAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE;AACpE,QAAA,QAAQ,CAAC,MAAM,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,kBAAkB,CAAC,KAAK,CAAC,CAAA,UAAA,EAAa,OAAO,gCAAgC;IAC5G;AAEA,IAAA,YAAY,CAAC,IAAY,EAAA;QACvB,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE;AACrC,QAAA,QAAQ,CAAC,MAAM,GAAG,CAAA,EAAG,IAAI,uBAAuB;IAClD;+GA5BW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cAFzB,MAAM,EAAA,CAAA,CAAA;;4FAEP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCIY,yBAAyB,CAAA;aACrB,IAAA,CAAA,SAAS,GAAkB,IAAlB,CAAuB;AAwB/C,IAAA,WAAA,GAAA;AAtBQ,QAAA,IAAA,CAAA,uBAAuB,GAAG;YAChC,cAAc;YACd,UAAU;YACV,YAAY;YACZ,qBAAqB;YACrB,qBAAqB;YACrB,oBAAoB;YACpB,wBAAwB;YACxB,kBAAkB;YAClB,gBAAgB;SACjB;QAEO,IAAA,CAAA,wBAAwB,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,eAAe,CAAC;AAItE,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAkB;AACjC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACpD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,IAAA,CAAA,eAAe,GAAG,KAAK;AA6IvB,QAAA,IAAA,CAAA,qBAAqB,GAAG,CAAC,GAAW,KAAI;AAC9C,YAAA,IAAI,GAAG,KAAK,cAAc,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;gBAC7D,IAAI,CAAC,eAAe,EAAE;YACxB;AACF,QAAA,CAAC;QA9IC,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,YAAY,EAAE;IACrB;IAEQ,iBAAiB,GAAA;;AAEvB,QAAA,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;AACvC,YAAA,IAAI;;;AAGF,gBAAA,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE;AACxC,oBAAA,yBAAyB,CAAC,SAAS,GAAG,IAAI,CAAC,mBAAmB,EAAE;gBAClE;;gBAEA,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,yBAAyB,CAAC,SAAS,EAAE;AAClE,oBAAA,IAAI,EAAE,qBAAqB;AAC5B,iBAAA,CAAC;gBACF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;AAC5B,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACjB,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAE3B,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,IAAG;oBAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI;oBAEzC,QAAQ,MAAM;AACZ,wBAAA,KAAK,KAAK;AACR,4BAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC;4BAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;4BAC1B;AACF,wBAAA,KAAK,QAAQ;AACX,4BAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;4BACtB,IAAI,CAAC,eAAe,EAAE;4BACtB;AACF,wBAAA,KAAK,OAAO;AACV,4BAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;4BAClB,IAAI,CAAC,eAAe,EAAE;4BACtB;AACF,wBAAA,KAAK,KAAK;AACR,4BAAA,IAAI,KAAK,KAAK,IAAI,EAAE;gCAClB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;4BAC5B;4BACA;;AAEN,gBAAA,CAAC;;AAGD,gBAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,GAAG,IAAG;AACzC,oBAAA,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAChD,gBAAA,CAAC,CAAC;YACJ;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC9B;QACF;aAAO;AACL,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAC9B;IACF;AAEA,IAAA,OAAO,CAAC,GAAW,EAAA;QACjB,IAAI,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI;QACpC;QAEA,IAAI,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC/C,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;QACjC;QAEA,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC;IAC9C;IAEA,OAAO,CAAC,GAAW,EAAE,KAAa,EAAA;QAChC,IAAI,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC9C,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,EAAE;gBACrC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AAC1B,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;YACtD;iBAAO;gBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;YAC5B;YAEA;QACF;QAEA,IAAI,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC;YAC/B;QACF;QAEA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;IAC9C;AAEA,IAAA,UAAU,CAAC,GAAW,EAAA;QACpB,IAAI,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC9C,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,EAAE;AACrC,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YAClD;iBAAO;AACL,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;YACxB;YAEA;QACF;QAEA,IAAI,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;YAC3B;QACF;AAEA,QAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,GAAG,CAAC;IAC1C;IAEA,KAAK,GAAA;QACH,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,EAAE;YACrC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAC5C;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IACpB;IAEQ,WAAW,GAAA;QACjB,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,EAAE;AACrC,YAAA,IAAI;gBACF,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;YACjD;YAAE,OAAO,KAAK,EAAE;;YAEhB;QACF;IACF;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YAC9B,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,cAAc;AACjD,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;iBACxC,SAAS,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YAEtC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,UAAU;AAC7C,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;iBACxC,SAAS,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACxC;IACF;IAQQ,eAAe,GAAA;QACrB,IAAI,CAAC,WAAW,EAAE;QAClB,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE;QAC/C,CAAC,EAAE,GAAG,CAAC;IACT;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI;YACF,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,cAAc,IAAI,IAAI;QAC3D;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;QACb;IACF;AAEQ,IAAA,cAAc,CAAC,GAAW,EAAA;AAChC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE;QACxC,OAAO,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC;IAC/E;IAEQ,cAAc,CAAC,GAAW,EAAE,KAAa,EAAA;AAC/C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE;QACxC,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;QAC7B;aAAO;YACL,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;QAC9C;IACF;AAEQ,IAAA,iBAAiB,CAAC,GAAW,EAAA;AACnC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE;QACxC,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QACzB;aAAO;AACL,YAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,GAAG,CAAC;QAC1C;IACF;IAEQ,mBAAmB,GAAA;AACzB,QAAA,MAAM,YAAY,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuEtB;AACC,QAAA,OAAO,qCAAqC,GAAG,IAAI,CAAC,YAAY,CAAC;IACnE;+GA1RW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFxB,MAAM,EAAA,CAAA,CAAA;;4FAEP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;SCae,eAAe,GAAA;AAC7B,IAAA,MAAM,SAAS,GAAG;AAChB,QAAA;AACE,YAAA,OAAO,EAAE,WAAW;AACpB,YAAA,QAAQ,EAAE,eAAe;AAC1B,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,QAAQ,EAAE,aAAa;AACxB,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,QAAQ,EAAE,aAAa;AACxB,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,QAAQ,EAAE,kBAAkB;AAC7B,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,QAAQ,EAAE,mBAAmB;AAC9B,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,oBAAoB;AAC7B,YAAA,QAAQ,EAAE,WAAW;AACtB,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,iCAAiC;AAC1C,YAAA,QAAQ,EAAE,gBAAgB;AAC3B,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,WAAW,EAAE,cAAc;AAC3B,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA;QACD,+BAA+B;QAC/B,qBAAqB,CAAC,MAAK;YACzB,MAAM,CAAC,yBAAyB,CAAC;AACnC,QAAA,CAAC,CAAC;AACF,QAAA,WAAW,CAAC,OAAO,EAAE,CAAC,SAAuB;QAC7C,yBAAyB;QACzB,0BAA0B;AAC1B,QAAA;AACE,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,UAAU,EAAE,mBAAmB;AAChC,SAAA;AACD,QAAA,EAAE,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,uBAAuB,EAAE;KAC1E;AAED,IAAA,OAAO,wBAAwB,CAAC,SAAS,CAAC;AAC5C;;ACpEA;;AAEG;MAEU,cAAc,CAAA;AACzB,IAAA,OAAO,OAAO,GAAA;QACZ,OAAO;AACL,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,SAAS,EAAE,CAAC,eAAe,EAAE,CAAC;SAC/B;IACH;+GANW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAd,cAAc,EAAA,CAAA,CAAA;gHAAd,cAAc,EAAA,CAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B;;;ACND;;AAEG;;;;"}