{"version":3,"file":"rxap-config.mjs","sources":["../../../../../packages/angular/config/src/lib/config-loader.service.ts","../../../../../packages/angular/config/src/lib/config-testing-service.ts","../../../../../packages/angular/config/src/lib/tokens.ts","../../../../../packages/angular/config/src/lib/utilities.ts","../../../../../packages/angular/config/src/lib/config.service.ts","../../../../../packages/angular/config/src/lib/provide-config.ts","../../../../../packages/angular/config/src/index.ts","../../../../../packages/angular/config/src/rxap-config.ts"],"sourcesContent":["import {\n  Inject,\n  Injectable,\n} from '@angular/core';\nimport {\n  firstValueFrom,\n  Observable,\n} from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport {\n  finalize,\n  share,\n} from 'rxjs/operators';\n\n@Injectable({ providedIn: 'root' })\nexport class ConfigLoaderService {\n  public readonly configs = new Map<string, any>();\n\n  public readonly configLoading = new Map<string, Observable<any>>();\n\n  constructor(\n    @Inject(HttpClient)\n    public readonly http: HttpClient,\n  ) {\n  }\n\n  public async load$<T = any>(url: string): Promise<T> {\n    if (this.configs.has(url)) {\n      return this.configs.get(url);\n    }\n\n    if (this.configLoading.has(url)) {\n      return this.configLoading.get(url)!.toPromise();\n    }\n\n    const loading$ = this.http.get<T>(url).pipe(\n      finalize(() => this.configLoading.delete(url)),\n      share(),\n    );\n\n    this.configLoading.set(url, loading$);\n\n    return firstValueFrom(loading$);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport {\n  getFromObject,\n  SetToObject,\n} from '@rxap/utilities';\nimport { ConfigService } from './config.service';\n\n@Injectable()\nexport class ConfigTestingService implements ConfigService {\n  readonly config: Record<string, any> = {};\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  clearLocalConfig(): void {\n  }\n\n  set<T>(propertyPath: string, value: T): void {\n    SetToObject(this.config, propertyPath, value);\n  }\n\n  get<T>(propertyPath: string, defaultValue?: T): T | undefined {\n    return getFromObject<T, T>(this.config, propertyPath, defaultValue);\n  }\n\n  getOrThrow<T>(propertyPath: string): T {\n    const value = this.get<T>(propertyPath);\n    if (value === undefined) {\n      throw new Error(`Could not find config in path '${ propertyPath }'`);\n    }\n    return value;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  setLocalConfig(config: Record<string, any>): void {\n  }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const RXAP_CONFIG = new InjectionToken('rxap/config');\n","// TODO : move to separate package\n\nimport { log } from '@rxap/rxjs';\nimport { JoinPath } from '@rxap/utilities';\nimport {\n  catchError,\n  EMPTY,\n  firstValueFrom,\n  Observable,\n  race,\n} from 'rxjs';\n\n/**\n * Similar to Promise.race() but only resolves with the first successful promise.\n * It will only reject if all promises reject.\n */\nexport async function raceSuccess<T>(promises: Promise<T>[]): Promise<T> {\n  return new Promise<T>((resolve, reject) => {\n    let rejectionCount = 0;\n\n    promises.forEach((promise) => {\n      promise.then(\n        // On success, resolve the entire raceSuccess promise\n        (value) => resolve(value),\n        // On rejection, count it and check if all promises rejected\n        () => {\n          rejectionCount++;\n          if (rejectionCount === promises.length) {\n            reject(new Error('All promises were rejected'));\n          }\n          // Otherwise continue waiting for other promises\n        }\n      );\n    });\n  });\n}\n\n\nexport async function dnsResolver(endpoint: string, name: string, type: string): Promise<string> {\n  const response = await fetch(`${endpoint}?name=${name}&type=${type}`, {\n    method: 'GET',\n    headers: {\n      'Accept': 'application/dns-json',\n      'Cache-Control': 'no-cache, no-store, must-revalidate',\n      'Pragma': 'no-cache',\n      'Expires': '0',\n    },\n  });\n  if (!response.ok) {\n    throw new Error(`Failed to resolve DNS via ${endpoint} (${response.status}): ${response.statusText}`);\n  }\n  const result = await response.json();\n  // Basic validation of the response structure\n  if (!result || !Array.isArray(result.Answer) || result.Answer.length === 0 || !result.Answer[0].data) {\n    throw new Error(`Invalid DNS response structure from ${endpoint} for ${name} ${type}`);\n  }\n  const data = result.Answer[0].data;\n  // Remove surrounding quotes often found in TXT records\n  return data.replace(/^\"(.*)\"$/, '$1');\n}\n\nexport const defaultDnsServers = [\n  'https://dns.google/resolve',\n  'https://cloudflare-dns.com/dns-query'\n];\n\nexport async function dnsLookup(\n  name: string,\n  type: string,\n  dnsServers = defaultDnsServers\n): Promise<string> {\n  if (!dnsServers.length) {\n    throw new Error('No DNS servers provided for lookup');\n  }\n  type = type.toUpperCase();\n  console.log(`Performing DNS lookup for ${type} record of ${name} using servers: ${dnsServers.join(', ')}`);\n  try {\n    // Use Promise.race to get the first successful response\n    return await raceSuccess(dnsServers.map(server => dnsResolver(server, name, type)));\n  } catch (error: any) {\n    console.error(`Failed to resolve DNS TXT record for ${name} using any server: ${error.message}`);\n    throw new Error(`DNS lookup failed for ${name} (${type})`); // Re-throw a more specific error\n  }\n}\n\nexport function fetchContentViaHttp(url: string): Observable<Blob | null> {\n  return new Observable<Blob>((subscriber) => {\n    let controller: AbortController | null = new AbortController(); // For cancellation\n\n    fetch(url)\n      .then(response => {\n        if (!response.ok) {\n          // Don't complete here, let catchError handle it\n          throw new Error(`HTTP error ${response.status} for ${url}: ${response.statusText}`);\n        }\n        return response.blob();\n      })\n      .then(blob => {\n        if (!subscriber.closed) {\n          subscriber.next(blob);\n          subscriber.complete();\n        }\n      })\n      .catch(error => {\n        if (error.name !== 'AbortError' && !subscriber.closed) {\n          console.warn(`Fetch error for ${url}:`, error);\n        }\n      });\n\n    // Cleanup function for when the observable is unsubscribed\n    return () => {\n      controller?.abort();\n      controller = null; // Release reference\n    };\n\n  }).pipe(\n    catchError(error => {\n      // Log the error but return null to signal failure without stopping the race\n      console.error(`Fetch failed for ${url}: ${error.message}`);\n      return EMPTY; // Signal failure with null\n    }),\n  );\n}\n\nexport type IpfsGatewayFunction = (cid: string) => string;\n\nexport const w3sIpfsGateway: IpfsGatewayFunction = cid => `https://${ cid }.ipfs.w3s.link`;\nexport const storachaIpfsGateway: IpfsGatewayFunction = cid => `https://${ cid }.ipfs.storacha.link`;\nexport const localPathIpfsGateway: IpfsGatewayFunction = cid => `${location.origin}/ipfs/${ cid }`;\nexport const localSubDomainIpfsGateway: IpfsGatewayFunction = cid => `https://${cid}.ipfs.${location.hostname.split('.').slice(-2).join('.')}`;\n\nexport const defaultIpfsGatewayServers: Array<IpfsGatewayFunction> = [\n  w3sIpfsGateway,\n  storachaIpfsGateway,\n  localPathIpfsGateway,\n  localSubDomainIpfsGateway\n];\n\nexport function fetchCidContentViaHttp(cid: string, path?: string, ipfsGatewayServers: Array<IpfsGatewayFunction> = defaultIpfsGatewayServers): Observable<Blob | null> {\n  if (!ipfsGatewayServers.length) {\n    throw new Error('No IPFS gateway servers provided for fetching content');\n  }\n  return race(\n    ...ipfsGatewayServers.map(fnc => fetchContentViaHttp(JoinPath(fnc(cid), path)).pipe(\n      log(`fetch attempt for ${cid} via ${fnc.name} - ${fnc(cid)}`),\n    ))\n    // Add more sources here if needed\n  ).pipe(\n    log(`Race winner for ${cid}`), // Log which source won (will show Blob or null)\n  );\n}\n\nexport async function fetchCidContent(cid: string, path?: string, ipfsGatewayServers: Array<IpfsGatewayFunction> = defaultIpfsGatewayServers): Promise<Blob | null> {\n  console.log(`Fetching content for CID: ${cid}`);\n  // Example: Fetch from an IPFS gateway or other source\n  // const gatewayUrl = `https://ipfs.io/ipfs/${cid}`;\n  try {\n    return await firstValueFrom(\n      race(\n        fetchCidContentViaHttp(cid, path, ipfsGatewayServers)\n      ),\n      { defaultValue: null } // Return null if the stream completes empty\n    );\n  } catch (error) {\n    console.error(`Error fetching or parsing content for CID ${cid}:`, error);\n    return null; // Return null on error\n  }\n}\n\nexport async function fetchCidContentAsJson(\n  cid: string,\n  path?: string,\n  _fetchCidContent = fetchCidContent,\n  ipfsGatewayServers: Array<IpfsGatewayFunction> = defaultIpfsGatewayServers\n): Promise<any | null> {\n  console.log(`Fetching JSON content for CID: ${cid}`);\n  const blob = await _fetchCidContent(cid, path, ipfsGatewayServers);\n  if (blob) {\n    try {\n      const text = await blob.text();\n      return JSON.parse(text);\n    } catch (error) {\n      console.error(`Error parsing JSON content for CID ${cid}:`, error);\n      return null; // Return null on error\n    }\n  }\n  console.warn(`No blob available for CID ${cid}, cannot parse as JSON.`);\n  return null; // Return null if blob is not available\n}\n","import {\n  Inject,\n  Injectable,\n  Optional,\n} from '@angular/core';\nimport { Environment } from '@rxap/environment';\nimport {\n  coerceArray,\n  CoercePrefix,\n  deepMerge,\n  SetObjectValue,\n  SetToObject,\n} from '@rxap/utilities';\nimport { ReplaySubject } from 'rxjs';\nimport { RXAP_CONFIG } from './tokens';\nimport { NoInferType } from './types';\nimport {\n  dnsLookup,\n  fetchCidContentAsJson,\n} from './utilities';\n\nexport type AnySchema = { validateAsync: (...args: any[]) => any };\n\nexport enum ConfigLoadingStrategy {\n  DEFAULT = 'default',\n  FIFO = 'fifo',\n}\n\nexport enum ConfigLoadMethod {\n  FROM_URLS = 'fromUrls',\n  FROM_LOCAL_STORAGE = 'fromLocalStorage',\n  FROM_URL_PARAM = 'fromUrlParam',\n  FROM_CID = 'fromCid',\n}\n\nexport interface ConfigLoadOptions {\n  fromUrlParam?: string | boolean;\n  fromUrls?: boolean;\n  fromLocalStorage?: boolean;\n  schema?: AnySchema;\n  url?: string | string[] | ((environment: Environment) => string | string[]);\n  /**\n   * static config values\n   */\n  static?: Record<string, any>;\n  /**\n   * Load additional configuration based on a CID found in a DNS TXT record.\n   * If true, uses `location.hostname`. If a string, uses that domain.\n   */\n  fromDns?: string | boolean;\n  /**\n   * Load additional configuration directly from the given Content Identifier (CID).\n   * This takes precedence over `fromDns` if both are provided.\n   */\n  fromCid?: string;\n  fetchCidContent?: (cid: string, path?: string) => Promise<Blob | null>;\n  ipfsGatewayServers?: Array<(cid: string) => string>;\n  dnsServers?: string[];\n  strategy?: ConfigLoadingStrategy;\n  /**\n   * Defines the order and subset of config sources to load.\n   * If not specified, defaults to: [FROM_URLS, FROM_LOCAL_STORAGE, FROM_URL_PARAM, FROM_CID]\n   *\n   * Note: static config is always merged first, and Overwrites are always merged last.\n   * Note: fromDns is not a source itself - it resolves the CID for FROM_CID.\n   */\n  order?: ConfigLoadMethod[];\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ConfigService<Config extends Record<string, any> = Record<string, any>> {\n\n  public static onError = new ReplaySubject<unknown>(1);\n  public static onRequestError = new ReplaySubject<Response>(1);\n\n  public static onErrorFnc: Array<(error: any) => void> = [];\n  public static onRequestErrorFnc: Array<(response: Response) => void> = [];\n\n  public static Config: any = null;\n\n  /**\n   * Static default values for the config object.\n   * Will be overwritten by an dynamic config file specified in\n   * the Urls array.\n   */\n  public static Defaults: any = {};\n\n  /**\n   * Any value definition in the Overwrites object will overwrite any\n   * value form the Defaults values or dynamic config files\n   */\n  public static Overwrites: any = {};\n\n  public static LocalStorageKey = 'rxap/config/local-config';\n\n  /**\n   * @deprecated instead use the url property of the ConfigLoadOptions\n   */\n  public static Urls = [];\n  public readonly config!: Config;\n\n  constructor(@Optional() @Inject(RXAP_CONFIG) config: any | null = null) {\n    this.config = ConfigService.Config;\n    if (config) {\n      this.config = deepMerge(this.config ?? {}, config);\n    }\n    if (!this.config) {\n      throw new Error('config not available');\n    }\n  }\n\n  /**\n   * Used to load the app config from a remote resource.\n   *\n   * Promise.all([ ConfigService.Load() ])\n   * .then(() => platformBrowserDynamic().bootstrapModule(AppModule))\n   * .catch(err => console.error(err))\n   *\n   */\n  public static async Load(options?: ConfigLoadOptions, environment?: Environment): Promise<void> {\n    options ??= {};\n\n    let config: any = deepMerge(this.Defaults, {});\n\n    if (environment?.config) {\n      if (typeof environment.config === 'string') {\n        options.url = environment.config;\n      } else {\n        options.static = environment.config.static;\n        options.url    = environment.config.url;\n        options.fromUrlParam = environment.config.fromUrlParam;\n        options.fromLocalStorage = environment.config.fromLocalStorage;\n        options.schema = environment.config.schema;\n        options.strategy = environment.config.strategy as ConfigLoadingStrategy ?? options.strategy;\n      }\n    }\n\n    // Always merge static config first\n    config = deepMerge(config, options?.static ?? {});\n\n    // Determine the order of config sources to load\n    const order = options.order ?? [\n      ConfigLoadMethod.FROM_URLS,\n      ConfigLoadMethod.FROM_LOCAL_STORAGE,\n      ConfigLoadMethod.FROM_URL_PARAM,\n      ConfigLoadMethod.FROM_CID,\n    ];\n\n    // If fromDns is enabled and FROM_CID is in the order, resolve CID first\n    if (options.fromDns && order.includes(ConfigLoadMethod.FROM_CID) && !options.fromCid) {\n      await this.loadConfigFromDns(options as any);\n    }\n\n    // Load configs from sources in the specified order\n    let done = false;\n    for (const method of order) {\n      if (done) {\n        break;\n      }\n\n      // Check if the source is enabled\n      if (!this.isSourceEnabled(options, method)) {\n        continue;\n      }\n\n      try {\n        const loadedConfig = await this.loadConfigFromMethod(method, options, environment);\n        if (loadedConfig) {\n          config = deepMerge(config, loadedConfig);\n        }\n\n        // If using FIFO strategy, stop after first successful load\n        if (options.strategy === ConfigLoadingStrategy.FIFO) {\n          done = true;\n        }\n      } catch (error: any) {\n        const methodName = this.getMethodName(method);\n        if (options.strategy !== ConfigLoadingStrategy.FIFO) {\n          console.error(`Could not load config from ${methodName}`, error);\n          throw error;\n        } else {\n          console.warn(`Could not load config from ${methodName}: ${error.message}. Will try next strategy.`);\n        }\n      }\n    }\n\n    if (!done && order.length > 0) {\n      console.warn('No config loading strategy succeeded. Using default config.');\n    }\n\n    // Always merge overwrites last\n    config = deepMerge(config, this.Overwrites);\n\n    console.debug('app config', config);\n\n    this.Config = config;\n  }\n\n  private static isSourceEnabled(options: ConfigLoadOptions, method: ConfigLoadMethod): boolean {\n    switch (method) {\n      case ConfigLoadMethod.FROM_URLS:\n        return options.fromUrls !== false;\n      case ConfigLoadMethod.FROM_LOCAL_STORAGE:\n        return options.fromLocalStorage !== false;\n      case ConfigLoadMethod.FROM_URL_PARAM:\n        return !!options.fromUrlParam;\n      case ConfigLoadMethod.FROM_CID:\n        return !!options.fromCid;\n      default:\n        return false;\n    }\n  }\n\n  private static async loadConfigFromMethod(\n    method: ConfigLoadMethod,\n    options: ConfigLoadOptions,\n    environment?: Environment,\n  ): Promise<any> {\n    switch (method) {\n      case ConfigLoadMethod.FROM_URLS:\n        return await this.loadConfigFromUrls(options, environment);\n      case ConfigLoadMethod.FROM_LOCAL_STORAGE:\n        return this.loadConfigFromLocalStorage(options);\n      case ConfigLoadMethod.FROM_URL_PARAM:\n        return this.loadConfigFromUrlParam(options as any);\n      case ConfigLoadMethod.FROM_CID:\n        return await this.loadConfigFromCid(options as any);\n      default:\n        return null;\n    }\n  }\n\n  private static getMethodName(method: ConfigLoadMethod): string {\n    switch (method) {\n      case ConfigLoadMethod.FROM_URLS:\n        return 'urls';\n      case ConfigLoadMethod.FROM_LOCAL_STORAGE:\n        return 'local storage';\n      case ConfigLoadMethod.FROM_URL_PARAM:\n        return 'url param';\n      case ConfigLoadMethod.FROM_CID:\n        return 'cid';\n      default:\n        return 'unknown';\n    }\n  }\n\n  private static loadConfigFromUrlParam(options: ConfigLoadOptions & { fromUrlParam: string | true }) {\n    const param = typeof options.fromUrlParam === 'string' ? options.fromUrlParam : 'config';\n    return this.LoadConfigDefaultFromUrlParam(param);\n  }\n\n  private static loadConfigFromLocalStorage(options: ConfigLoadOptions) {\n    const localConfig = localStorage.getItem(ConfigService.LocalStorageKey);\n    if (localConfig) {\n      return JSON.parse(localConfig);\n    } else {\n      return {};\n    }\n  }\n\n  private static async loadConfigFromUrls(options: ConfigLoadOptions, environment?: Environment) {\n    let config: any = {};\n    const urls = (\n      options?.url ? coerceArray(options.url) : ConfigService.Urls\n    ).map(url => {\n      if (typeof url === 'function') {\n        if (!environment) {\n          throw new Error('environment is required when url is a function');\n        }\n        return coerceArray(url(environment));\n      }\n      return coerceArray(url);\n    }).flat();\n\n    for (const url of urls) {\n      const loadedConfig = await this.loadConfig(url, true, options?.schema);\n      const match = url.match(/config\\.([a-zA-Z0-9.\\-_]+)\\.json/);\n      if (match) {\n        SetToObject(config, match[1], loadedConfig);\n      } else {\n        config = deepMerge(config, loadedConfig);\n      }\n    }\n    return config;\n  }\n\n  private static async loadConfigFromCid(options: ConfigLoadOptions & { fromCid: string | boolean }) {\n    console.debug('Loading config from CID: ', options.fromCid);\n    const ipfsGatewayFunctions = options.ipfsGatewayServers ?? [];\n    if (!ipfsGatewayFunctions.length) {\n      console.warn('No IPFS gateway servers provided for fetching content from CID');\n      return;\n    }\n    try {\n      const cidContent = await fetchCidContentAsJson(\n        options.fromCid,\n        undefined,\n        options.fetchCidContent,\n        ipfsGatewayFunctions\n      );\n      if (cidContent && typeof cidContent === 'object') {\n        console.log(`Merging configuration from CID ${options.fromCid}.`, cidContent);\n        // Merge CID content into the existing config object\n        console.log('Configuration merged successfully.');\n        return cidContent;\n      } else if (cidContent) {\n        console.warn(`Content fetched from CID ${options.fromCid} is not a mergeable object, skipping merge.`);\n      } else {\n        console.warn(`No content fetched or content was null for CID ${options.fromCid}.`);\n      }\n    } catch (error: any) {\n      console.error(`Failed to fetch or process content for CID ${options.fromCid}: ${error.message}`);\n      // Decide how to handle fetch/processing errors\n    }\n  }\n\n  private static async loadConfigFromDns(options: ConfigLoadOptions & { fromDns: string | boolean }) {\n    console.debug('Loading config from DNS');\n    const dnsServers = options.dnsServers ?? [];\n    if (!dnsServers.length) {\n      console.warn('No DNS servers provided for DNS lookup');\n      return;\n    }\n    let domain = location.hostname;\n    if (typeof options.fromDns === 'string') {\n      domain = options.fromDns;\n    }\n    domain = CoercePrefix(domain, '_config.');\n    try {\n      console.log(`Attempting DNS lookup for domain: ${domain}`);\n      const txtData = await dnsLookup(domain, 'TXT', dnsServers);\n      console.log(`DNS TXT record data found: ${txtData}`);\n      // Example CID extraction logic (adapt to your TXT record format)\n      // This looks for IPFS CIDs (v0 'Qm...' or v1 'b...') potentially after 'ipfs://' or '/'\n      const cidMatch = txtData.match(/(?:ipfs:\\/\\/|\\/|^)([a-zA-Z0-9]{40,})$/);\n      if (cidMatch && cidMatch[1]) {\n        options.fromCid = cidMatch[1];\n        console.log(`Extracted CID from DNS: ${options.fromCid}`);\n      } else {\n        console.warn(`Could not extract a valid CID format from DNS TXT data: \"${txtData}\"`);\n      }\n    } catch (error: any) {\n      console.error(`DNS lookup for ${domain} failed: ${error.message}`);\n      // Decide if failure is critical or recoverable\n    }\n  }\n\n  private static handleError(error: any) {\n    this.onError.next(error);\n    for (const fnc of this.onErrorFnc) {\n      try {\n        fnc(error);\n      } catch (e: any) {\n        console.error('Error in onErrorFnc', e);\n      }\n    }\n  }\n\n  private static handleRequestError(response: Response) {\n    this.onRequestError.next(response);\n    for (const fnc of this.onRequestErrorFnc) {\n      try {\n        fnc(response);\n      } catch (e: any) {\n        console.error('Error in onRequestErrorFnc', e);\n      }\n    }\n  }\n\n  private static async loadConfig<T = any>(url: string, required?: boolean, schema?: AnySchema): Promise<T | null> {\n\n    let config: any;\n    let response: any;\n\n    try {\n      response = await fetch(url);\n    } catch (error: any) {\n      const message = `Could not fetch config from '${ url }': ${ error.message }`;\n      if (required) {\n        this.handleError(error);\n        this.showError(message);\n        throw new Error(message);\n      } else {\n        console.warn(message);\n        return null;\n      }\n    }\n\n    if (!response.ok) {\n      let message = `Config request results in non ok response for '${ url }': (${ response.status }) ${ response.statusText }`;\n      switch (response.status) {\n        case 404:\n          message = `Config not found at '${ url }'`;\n          break;\n        case 405:\n          message = `Config service is not started yet. Wait 30s and try again.`;\n          break;\n        case 401:\n          message = `Unauthorized to fetch config from '${ url }'`;\n          break;\n      }\n      if (required) {\n        this.handleRequestError(response);\n        this.showError(message);\n        throw new Error(message);\n      } else {\n        console.warn(message);\n        return null;\n      }\n    }\n\n    try {\n      config = await response.json();\n    } catch (error: any) {\n      const message = `Could not parse config from '${ url }' to a json object: ${ error.message }`;\n      if (required) {\n        this.handleError(error);\n        this.showError(message);\n        throw new Error(message);\n      } else {\n        console.warn(message);\n        return null;\n      }\n    }\n\n    if (schema) {\n      try {\n        config = await schema.validateAsync(config);\n      } catch (error: any) {\n        const message = `Config from '${ url }' is not valid: ${ error.message }`;\n        if (required) {\n          this.handleError(error);\n          this.showError(message);\n          throw new Error(message);\n        } else {\n          console.warn(message);\n          return null;\n        }\n      }\n    }\n\n    return config;\n\n  }\n\n  private static LoadConfigDefaultFromUrlParam(param = 'config') {\n\n    const queryString = window.location.search;\n    const urlParams = new URLSearchParams(queryString);\n\n    const configFromParams = {};\n\n    for (const configParam of urlParams.getAll('config')) {\n\n      try {\n        const split = configParam.split(';');\n        if (split.length === 2) {\n          const keyPath = split[0];\n          const value = split[1];\n          SetObjectValue(configFromParams, keyPath, value);\n        }\n      } catch (e: any) {\n        console.warn(`Parsing of url config param failed for '${ configParam }': ${ e.message }`);\n      }\n\n    }\n\n    return configFromParams;\n\n  }\n\n  public static async SideLoad(\n    url: string,\n    propertyPath: string,\n    required?: boolean,\n    schema?: AnySchema,\n  ): Promise<void> {\n\n    if (!this.Config) {\n      throw new Error('Config side load is only possible after the initial config load.');\n    }\n\n    const config = await this.loadConfig(url, required, schema);\n\n    SetObjectValue(this.Config, propertyPath, config);\n\n    console.debug(`Side loaded config for '${ propertyPath }' successful`, this.Config);\n\n  }\n\n  public static Get<T = any, K extends Record<string, any> = Record<string, any>>(\n    path: string,\n    defaultValue: T | undefined,\n    config: Record<string, any>,\n  ): T\n\n  public static Get<T = any, K extends Record<string, any> = Record<string, any>>(\n    path: string,\n    defaultValue: NoInferType<T>,\n    config: Record<string, any> = this.Config,\n  ): T {\n    if (!config) {\n      throw new Error('config not loaded');\n    }\n    let configValue: any = config;\n    if (typeof path !== 'string') {\n      throw new Error('The config property path is not a string');\n    }\n    for (const fragment of path.split('.')) {\n      if (configValue && typeof configValue === 'object' && fragment in configValue) {\n        configValue = configValue[fragment];\n      } else {\n        if (defaultValue !== undefined) {\n          return defaultValue;\n        }\n        console.debug(`Config with path '${ path }' not found`);\n        return undefined as any;\n      }\n    }\n    return configValue;\n  }\n\n  private static showError(message: string) {\n    const hasUl = document.getElementById('rxap-config-error') !== null;\n    const ul = document.getElementById('rxap-config-error') ?? document.createElement('ul');\n    ul.id = 'rxap-config-error';\n    ul.style.position = 'fixed';\n    ul.style.bottom = '16px';\n    ul.style.right = '16px';\n    ul.style.backgroundColor = 'white';\n    ul.style.padding = '32px';\n    ul.style.zIndex = '99999999';\n    ul.style.color = 'black';\n    const messageLi = document.createElement('li');\n    messageLi.innerText = message;\n    ul.appendChild(messageLi);\n    const refreshHintLi = document.createElement('li');\n    refreshHintLi.innerText = 'Please refresh the page to try again.';\n    ul.appendChild(refreshHintLi);\n    const autoRefreshHintLi = document.createElement('li');\n    autoRefreshHintLi.innerText = 'The page will refresh automatically in 30 seconds.';\n    ul.appendChild(autoRefreshHintLi);\n    if (!hasUl) {\n      document.body.appendChild(ul);\n    }\n    setTimeout(() => location.reload(), 30000);\n  }\n\n  public setLocalConfig(config: Config): void {\n    localStorage.setItem(ConfigService.LocalStorageKey, JSON.stringify(config));\n  }\n\n  public clearLocalConfig(): void {\n    localStorage.removeItem(ConfigService.LocalStorageKey);\n  }\n\n  public get<T = any>(propertyPath: string): T | undefined;\n  public get<T = any>(propertyPath: string, defaultValue: NoInferType<T>): T;\n  public get<T = any>(propertyPath: string, defaultValue?: T): T | undefined {\n    return ConfigService.Get(propertyPath, defaultValue, this.config);\n  }\n\n  public getOrThrow<T = any>(propertyPath: string): T;\n  public getOrThrow<T = any>(propertyPath: string, defaultValue: NoInferType<T>): T;\n  public getOrThrow<T = any>(propertyPath: string, defaultValue?: T): T {\n    const value = ConfigService.Get(propertyPath, defaultValue, this.config);\n    if (value === undefined) {\n      throw new Error(`Could not find config in path '${ propertyPath }'`);\n    }\n    return value;\n  }\n\n}\n","import { RXAP_CONFIG } from './tokens';\n\nexport function ProvideConfig(config: Record<string, unknown> = {}) {\n  return {\n    provide: RXAP_CONFIG,\n    useValue: config,\n  };\n}\n","// region \nexport * from './lib/config-loader.service';\nexport * from './lib/config-testing-service';\nexport * from './lib/config.service';\nexport * from './lib/config';\nexport * from './lib/provide-config';\nexport * from './lib/tokens';\nexport * from './lib/types';\nexport * from './lib/utilities';\n// endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;MAea,mBAAmB,CAAA;AAK9B,IAAA,WAAA,CAEkB,IAAgB,EAAA;QAAhB,IAAI,CAAA,IAAA,GAAJ,IAAI;AANN,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAe;AAEhC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAA2B;;IAQ3D,MAAM,KAAK,CAAU,GAAW,EAAA;QACrC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACzB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;QAG9B,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC/B,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,SAAS,EAAE;;AAGjD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,GAAG,CAAC,CAAC,IAAI,CACzC,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAC9C,KAAK,EAAE,CACR;QAED,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;AAErC,QAAA,OAAO,cAAc,CAAC,QAAQ,CAAC;;AA3BtB,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,mBAAmB,kBAMpB,UAAU,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AANT,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,cADN,MAAM,EAAA,CAAA,CAAA;;4FACnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;0BAO7B,MAAM;2BAAC,UAAU;;;MCbT,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;QAEW,IAAM,CAAA,MAAA,GAAwB,EAAE;AAyB1C;;IAtBC,gBAAgB,GAAA;;IAGhB,GAAG,CAAI,YAAoB,EAAE,KAAQ,EAAA;QACnC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC;;IAG/C,GAAG,CAAI,YAAoB,EAAE,YAAgB,EAAA;QAC3C,OAAO,aAAa,CAAO,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC;;AAGrE,IAAA,UAAU,CAAI,YAAoB,EAAA;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAI,YAAY,CAAC;AACvC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,MAAM,IAAI,KAAK,CAAC,kCAAmC,YAAa,CAAA,CAAA,CAAG,CAAC;;AAEtE,QAAA,OAAO,KAAK;;;AAId,IAAA,cAAc,CAAC,MAA2B,EAAA;;+GAxB/B,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAApB,oBAAoB,EAAA,CAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;;MCLY,WAAW,GAAG,IAAI,cAAc,CAAC,aAAa;;ACF3D;AAYA;;;AAGG;AACI,eAAe,WAAW,CAAI,QAAsB,EAAA;IACzD,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,KAAI;QACxC,IAAI,cAAc,GAAG,CAAC;AAEtB,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAC3B,YAAA,OAAO,CAAC,IAAI;;AAEV,YAAA,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC;;AAEzB,YAAA,MAAK;AACH,gBAAA,cAAc,EAAE;AAChB,gBAAA,IAAI,cAAc,KAAK,QAAQ,CAAC,MAAM,EAAE;AACtC,oBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;;;AAGnD,aAAC,CACF;AACH,SAAC,CAAC;AACJ,KAAC,CAAC;AACJ;AAGO,eAAe,WAAW,CAAC,QAAgB,EAAE,IAAY,EAAE,IAAY,EAAA;AAC5E,IAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,CAAA,EAAG,QAAQ,CAAA,MAAA,EAAS,IAAI,CAAA,MAAA,EAAS,IAAI,CAAA,CAAE,EAAE;AACpE,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,sBAAsB;AAChC,YAAA,eAAe,EAAE,qCAAqC;AACtD,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,SAAS,EAAE,GAAG;AACf,SAAA;AACF,KAAA,CAAC;AACF,IAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AAChB,QAAA,MAAM,IAAI,KAAK,CAAC,CAAA,0BAAA,EAA6B,QAAQ,CAAK,EAAA,EAAA,QAAQ,CAAC,MAAM,MAAM,QAAQ,CAAC,UAAU,CAAA,CAAE,CAAC;;AAEvG,IAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;;AAEpC,IAAA,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QACpG,MAAM,IAAI,KAAK,CAAC,CAAuC,oCAAA,EAAA,QAAQ,CAAQ,KAAA,EAAA,IAAI,CAAI,CAAA,EAAA,IAAI,CAAE,CAAA,CAAC;;IAExF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;;IAElC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;AACvC;AAEa,MAAA,iBAAiB,GAAG;IAC/B,4BAA4B;IAC5B;;AAGK,eAAe,SAAS,CAC7B,IAAY,EACZ,IAAY,EACZ,UAAU,GAAG,iBAAiB,EAAA;AAE9B,IAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACtB,QAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC;;AAEvD,IAAA,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AACzB,IAAA,OAAO,CAAC,GAAG,CAAC,CAA6B,0BAAA,EAAA,IAAI,cAAc,IAAI,CAAA,gBAAA,EAAmB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;AAC1G,IAAA,IAAI;;QAEF,OAAO,MAAM,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;;IACnF,OAAO,KAAU,EAAE;QACnB,OAAO,CAAC,KAAK,CAAC,CAAwC,qCAAA,EAAA,IAAI,CAAsB,mBAAA,EAAA,KAAK,CAAC,OAAO,CAAE,CAAA,CAAC;QAChG,MAAM,IAAI,KAAK,CAAC,CAAyB,sBAAA,EAAA,IAAI,CAAK,EAAA,EAAA,IAAI,CAAG,CAAA,CAAA,CAAC,CAAC;;AAE/D;AAEM,SAAU,mBAAmB,CAAC,GAAW,EAAA;AAC7C,IAAA,OAAO,IAAI,UAAU,CAAO,CAAC,UAAU,KAAI;AACzC,QAAA,IAAI,UAAU,GAA2B,IAAI,eAAe,EAAE,CAAC;QAE/D,KAAK,CAAC,GAAG;aACN,IAAI,CAAC,QAAQ,IAAG;AACf,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;;AAEhB,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,WAAA,EAAc,QAAQ,CAAC,MAAM,CAAQ,KAAA,EAAA,GAAG,KAAK,QAAQ,CAAC,UAAU,CAAA,CAAE,CAAC;;AAErF,YAAA,OAAO,QAAQ,CAAC,IAAI,EAAE;AACxB,SAAC;aACA,IAAI,CAAC,IAAI,IAAG;AACX,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACtB,gBAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;gBACrB,UAAU,CAAC,QAAQ,EAAE;;AAEzB,SAAC;aACA,KAAK,CAAC,KAAK,IAAG;YACb,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;gBACrD,OAAO,CAAC,IAAI,CAAC,CAAA,gBAAA,EAAmB,GAAG,CAAG,CAAA,CAAA,EAAE,KAAK,CAAC;;AAElD,SAAC,CAAC;;AAGJ,QAAA,OAAO,MAAK;YACV,UAAU,EAAE,KAAK,EAAE;AACnB,YAAA,UAAU,GAAG,IAAI,CAAC;AACpB,SAAC;KAEF,CAAC,CAAC,IAAI,CACL,UAAU,CAAC,KAAK,IAAG;;QAEjB,OAAO,CAAC,KAAK,CAAC,CAAoB,iBAAA,EAAA,GAAG,CAAK,EAAA,EAAA,KAAK,CAAC,OAAO,CAAE,CAAA,CAAC;QAC1D,OAAO,KAAK,CAAC;KACd,CAAC,CACH;AACH;AAIa,MAAA,cAAc,GAAwB,GAAG,IAAI,CAAA,QAAA,EAAY,GAAI,CAAA,cAAA;AAC7D,MAAA,mBAAmB,GAAwB,GAAG,IAAI,CAAA,QAAA,EAAY,GAAI,CAAA,mBAAA;AACxE,MAAM,oBAAoB,GAAwB,GAAG,IAAI,CAAA,EAAG,QAAQ,CAAC,MAAM,CAAU,MAAA,EAAA,GAAI;AACzF,MAAM,yBAAyB,GAAwB,GAAG,IAAI,CAAW,QAAA,EAAA,GAAG,CAAS,MAAA,EAAA,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAE/H,MAAA,yBAAyB,GAA+B;IACnE,cAAc;IACd,mBAAmB;IACnB,oBAAoB;IACpB;;AAGI,SAAU,sBAAsB,CAAC,GAAW,EAAE,IAAa,EAAE,qBAAiD,yBAAyB,EAAA;AAC3I,IAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;AAC9B,QAAA,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC;;AAE1E,IAAA,OAAO,IAAI,CACT,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,IAAI,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CACjF,GAAG,CAAC,CAAA,kBAAA,EAAqB,GAAG,CAAQ,KAAA,EAAA,GAAG,CAAC,IAAI,CAAA,GAAA,EAAM,GAAG,CAAC,GAAG,CAAC,CAAE,CAAA,CAAC,CAC9D;;KAEF,CAAC,IAAI,CACJ,GAAG,CAAC,mBAAmB,GAAG,CAAA,CAAE,CAAC,CAC9B;AACH;AAEO,eAAe,eAAe,CAAC,GAAW,EAAE,IAAa,EAAE,kBAAA,GAAiD,yBAAyB,EAAA;AAC1I,IAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,CAAA,CAAE,CAAC;;;AAG/C,IAAA,IAAI;QACF,OAAO,MAAM,cAAc,CACzB,IAAI,CACF,sBAAsB,CAAC,GAAG,EAAE,IAAI,EAAE,kBAAkB,CAAC,CACtD,EACD,EAAE,YAAY,EAAE,IAAI,EAAE;SACvB;;IACD,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,CAAA,0CAAA,EAA6C,GAAG,CAAG,CAAA,CAAA,EAAE,KAAK,CAAC;QACzE,OAAO,IAAI,CAAC;;AAEhB;AAEO,eAAe,qBAAqB,CACzC,GAAW,EACX,IAAa,EACb,gBAAgB,GAAG,eAAe,EAClC,qBAAiD,yBAAyB,EAAA;AAE1E,IAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,GAAG,CAAA,CAAE,CAAC;IACpD,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,kBAAkB,CAAC;IAClE,IAAI,IAAI,EAAE;AACR,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;;QACvB,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,CAAA,mCAAA,EAAsC,GAAG,CAAG,CAAA,CAAA,EAAE,KAAK,CAAC;YAClE,OAAO,IAAI,CAAC;;;AAGhB,IAAA,OAAO,CAAC,IAAI,CAAC,6BAA6B,GAAG,CAAA,uBAAA,CAAyB,CAAC;IACvE,OAAO,IAAI,CAAC;AACd;;ICrKY;AAAZ,CAAA,UAAY,qBAAqB,EAAA;AAC/B,IAAA,qBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,qBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACf,CAAC,EAHW,qBAAqB,KAArB,qBAAqB,GAGhC,EAAA,CAAA,CAAA;IAEW;AAAZ,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,UAAsB;AACtB,IAAA,gBAAA,CAAA,oBAAA,CAAA,GAAA,kBAAuC;AACvC,IAAA,gBAAA,CAAA,gBAAA,CAAA,GAAA,cAA+B;AAC/B,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,SAAoB;AACtB,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,GAK3B,EAAA,CAAA,CAAA;MAuCY,aAAa,CAAA;AAEV,IAAA,SAAA,IAAA,CAAA,OAAO,GAAG,IAAI,aAAa,CAAU,CAAC,CAAC,CAAC;AACxC,IAAA,SAAA,IAAA,CAAA,cAAc,GAAG,IAAI,aAAa,CAAW,CAAC,CAAC,CAAC;aAEhD,IAAU,CAAA,UAAA,GAAgC,EAAhC,CAAmC;aAC7C,IAAiB,CAAA,iBAAA,GAAwC,EAAxC,CAA2C;aAE5D,IAAM,CAAA,MAAA,GAAQ,IAAR,CAAa;AAEjC;;;;AAIG;aACW,IAAQ,CAAA,QAAA,GAAQ,EAAR,CAAW;AAEjC;;;AAGG;aACW,IAAU,CAAA,UAAA,GAAQ,EAAR,CAAW;aAErB,IAAe,CAAA,eAAA,GAAG,0BAAH,CAA8B;AAE3D;;AAEG;aACW,IAAI,CAAA,IAAA,GAAG,EAAH,CAAM;AAGxB,IAAA,WAAA,CAA6C,SAAqB,IAAI,EAAA;AACpE,QAAA,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM;QAClC,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,CAAC;;AAEpD,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;;;AAI3C;;;;;;;AAOG;AACI,IAAA,aAAa,IAAI,CAAC,OAA2B,EAAE,WAAyB,EAAA;QAC7E,OAAO,KAAK,EAAE;QAEd,IAAI,MAAM,GAAQ,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;AAE9C,QAAA,IAAI,WAAW,EAAE,MAAM,EAAE;AACvB,YAAA,IAAI,OAAO,WAAW,CAAC,MAAM,KAAK,QAAQ,EAAE;AAC1C,gBAAA,OAAO,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM;;iBAC3B;gBACL,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM;gBAC1C,OAAO,CAAC,GAAG,GAAM,WAAW,CAAC,MAAM,CAAC,GAAG;gBACvC,OAAO,CAAC,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY;gBACtD,OAAO,CAAC,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC,gBAAgB;gBAC9D,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM;AAC1C,gBAAA,OAAO,CAAC,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,QAAiC,IAAI,OAAO,CAAC,QAAQ;;;;QAK/F,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC;;AAGjD,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI;AAC7B,YAAA,gBAAgB,CAAC,SAAS;AAC1B,YAAA,gBAAgB,CAAC,kBAAkB;AACnC,YAAA,gBAAgB,CAAC,cAAc;AAC/B,YAAA,gBAAgB,CAAC,QAAQ;SAC1B;;AAGD,QAAA,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACpF,YAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAc,CAAC;;;QAI9C,IAAI,IAAI,GAAG,KAAK;AAChB,QAAA,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;YAC1B,IAAI,IAAI,EAAE;gBACR;;;YAIF,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE;gBAC1C;;AAGF,YAAA,IAAI;AACF,gBAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC;gBAClF,IAAI,YAAY,EAAE;AAChB,oBAAA,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC;;;gBAI1C,IAAI,OAAO,CAAC,QAAQ,KAAK,qBAAqB,CAAC,IAAI,EAAE;oBACnD,IAAI,GAAG,IAAI;;;YAEb,OAAO,KAAU,EAAE;gBACnB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;gBAC7C,IAAI,OAAO,CAAC,QAAQ,KAAK,qBAAqB,CAAC,IAAI,EAAE;oBACnD,OAAO,CAAC,KAAK,CAAC,CAAA,2BAAA,EAA8B,UAAU,CAAE,CAAA,EAAE,KAAK,CAAC;AAChE,oBAAA,MAAM,KAAK;;qBACN;oBACL,OAAO,CAAC,IAAI,CAAC,CAA8B,2BAAA,EAAA,UAAU,CAAK,EAAA,EAAA,KAAK,CAAC,OAAO,CAA2B,yBAAA,CAAA,CAAC;;;;QAKzG,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC;;;QAI7E,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC;AAE3C,QAAA,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC;AAEnC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;AAGd,IAAA,OAAO,eAAe,CAAC,OAA0B,EAAE,MAAwB,EAAA;QACjF,QAAQ,MAAM;YACZ,KAAK,gBAAgB,CAAC,SAAS;AAC7B,gBAAA,OAAO,OAAO,CAAC,QAAQ,KAAK,KAAK;YACnC,KAAK,gBAAgB,CAAC,kBAAkB;AACtC,gBAAA,OAAO,OAAO,CAAC,gBAAgB,KAAK,KAAK;YAC3C,KAAK,gBAAgB,CAAC,cAAc;AAClC,gBAAA,OAAO,CAAC,CAAC,OAAO,CAAC,YAAY;YAC/B,KAAK,gBAAgB,CAAC,QAAQ;AAC5B,gBAAA,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO;AAC1B,YAAA;AACE,gBAAA,OAAO,KAAK;;;IAIV,aAAa,oBAAoB,CACvC,MAAwB,EACxB,OAA0B,EAC1B,WAAyB,EAAA;QAEzB,QAAQ,MAAM;YACZ,KAAK,gBAAgB,CAAC,SAAS;gBAC7B,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC;YAC5D,KAAK,gBAAgB,CAAC,kBAAkB;AACtC,gBAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC;YACjD,KAAK,gBAAgB,CAAC,cAAc;AAClC,gBAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,OAAc,CAAC;YACpD,KAAK,gBAAgB,CAAC,QAAQ;AAC5B,gBAAA,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAc,CAAC;AACrD,YAAA;AACE,gBAAA,OAAO,IAAI;;;IAIT,OAAO,aAAa,CAAC,MAAwB,EAAA;QACnD,QAAQ,MAAM;YACZ,KAAK,gBAAgB,CAAC,SAAS;AAC7B,gBAAA,OAAO,MAAM;YACf,KAAK,gBAAgB,CAAC,kBAAkB;AACtC,gBAAA,OAAO,eAAe;YACxB,KAAK,gBAAgB,CAAC,cAAc;AAClC,gBAAA,OAAO,WAAW;YACpB,KAAK,gBAAgB,CAAC,QAAQ;AAC5B,gBAAA,OAAO,KAAK;AACd,YAAA;AACE,gBAAA,OAAO,SAAS;;;IAId,OAAO,sBAAsB,CAAC,OAA4D,EAAA;AAChG,QAAA,MAAM,KAAK,GAAG,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,GAAG,OAAO,CAAC,YAAY,GAAG,QAAQ;AACxF,QAAA,OAAO,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC;;IAG1C,OAAO,0BAA0B,CAAC,OAA0B,EAAA;QAClE,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC;QACvE,IAAI,WAAW,EAAE;AACf,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;;aACzB;AACL,YAAA,OAAO,EAAE;;;AAIL,IAAA,aAAa,kBAAkB,CAAC,OAA0B,EAAE,WAAyB,EAAA;QAC3F,IAAI,MAAM,GAAQ,EAAE;QACpB,MAAM,IAAI,GAAG,CACX,OAAO,EAAE,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,IAAI,EAC5D,GAAG,CAAC,GAAG,IAAG;AACV,YAAA,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;gBAC7B,IAAI,CAAC,WAAW,EAAE;AAChB,oBAAA,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC;;AAEnE,gBAAA,OAAO,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;;AAEtC,YAAA,OAAO,WAAW,CAAC,GAAG,CAAC;AACzB,SAAC,CAAC,CAAC,IAAI,EAAE;AAET,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC;YACtE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,kCAAkC,CAAC;YAC3D,IAAI,KAAK,EAAE;gBACT,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC;;iBACtC;AACL,gBAAA,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC;;;AAG5C,QAAA,OAAO,MAAM;;AAGP,IAAA,aAAa,iBAAiB,CAAC,OAA0D,EAAA;QAC/F,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,OAAO,CAAC,OAAO,CAAC;AAC3D,QAAA,MAAM,oBAAoB,GAAG,OAAO,CAAC,kBAAkB,IAAI,EAAE;AAC7D,QAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE;AAChC,YAAA,OAAO,CAAC,IAAI,CAAC,gEAAgE,CAAC;YAC9E;;AAEF,QAAA,IAAI;AACF,YAAA,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAC5C,OAAO,CAAC,OAAO,EACf,SAAS,EACT,OAAO,CAAC,eAAe,EACvB,oBAAoB,CACrB;AACD,YAAA,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;gBAChD,OAAO,CAAC,GAAG,CAAC,CAAkC,+BAAA,EAAA,OAAO,CAAC,OAAO,CAAG,CAAA,CAAA,EAAE,UAAU,CAAC;;AAE7E,gBAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC;AACjD,gBAAA,OAAO,UAAU;;iBACZ,IAAI,UAAU,EAAE;gBACrB,OAAO,CAAC,IAAI,CAAC,CAAA,yBAAA,EAA4B,OAAO,CAAC,OAAO,CAA6C,2CAAA,CAAA,CAAC;;iBACjG;gBACL,OAAO,CAAC,IAAI,CAAC,CAAA,+CAAA,EAAkD,OAAO,CAAC,OAAO,CAAG,CAAA,CAAA,CAAC;;;QAEpF,OAAO,KAAU,EAAE;AACnB,YAAA,OAAO,CAAC,KAAK,CAAC,CAAA,2CAAA,EAA8C,OAAO,CAAC,OAAO,CAAA,EAAA,EAAK,KAAK,CAAC,OAAO,CAAA,CAAE,CAAC;;;;AAK5F,IAAA,aAAa,iBAAiB,CAAC,OAA0D,EAAA;AAC/F,QAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC;AACxC,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE;AAC3C,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACtB,YAAA,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC;YACtD;;AAEF,QAAA,IAAI,MAAM,GAAG,QAAQ,CAAC,QAAQ;AAC9B,QAAA,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE;AACvC,YAAA,MAAM,GAAG,OAAO,CAAC,OAAO;;AAE1B,QAAA,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC;AACzC,QAAA,IAAI;AACF,YAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,MAAM,CAAA,CAAE,CAAC;YAC1D,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC;AAC1D,YAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,OAAO,CAAA,CAAE,CAAC;;;YAGpD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC;AACvE,YAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC3B,gBAAA,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,CAAA,wBAAA,EAA2B,OAAO,CAAC,OAAO,CAAE,CAAA,CAAC;;iBACpD;AACL,gBAAA,OAAO,CAAC,IAAI,CAAC,4DAA4D,OAAO,CAAA,CAAA,CAAG,CAAC;;;QAEtF,OAAO,KAAU,EAAE;YACnB,OAAO,CAAC,KAAK,CAAC,CAAkB,eAAA,EAAA,MAAM,CAAY,SAAA,EAAA,KAAK,CAAC,OAAO,CAAE,CAAA,CAAC;;;;IAK9D,OAAO,WAAW,CAAC,KAAU,EAAA;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE;AACjC,YAAA,IAAI;gBACF,GAAG,CAAC,KAAK,CAAC;;YACV,OAAO,CAAM,EAAE;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,CAAC;;;;IAKrC,OAAO,kBAAkB,CAAC,QAAkB,EAAA;AAClD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;AAClC,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACxC,YAAA,IAAI;gBACF,GAAG,CAAC,QAAQ,CAAC;;YACb,OAAO,CAAM,EAAE;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,CAAC,CAAC;;;;IAK5C,aAAa,UAAU,CAAU,GAAW,EAAE,QAAkB,EAAE,MAAkB,EAAA;AAE1F,QAAA,IAAI,MAAW;AACf,QAAA,IAAI,QAAa;AAEjB,QAAA,IAAI;AACF,YAAA,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC;;QAC3B,OAAO,KAAU,EAAE;YACnB,MAAM,OAAO,GAAG,CAAiC,6BAAA,EAAA,GAAI,MAAO,KAAK,CAAC,OAAQ,CAAA,CAAE;YAC5E,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACvB,gBAAA,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC;;iBACnB;AACL,gBAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;AACrB,gBAAA,OAAO,IAAI;;;AAIf,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AAChB,YAAA,IAAI,OAAO,GAAG,CAAmD,+CAAA,EAAA,GAAI,CAAQ,IAAA,EAAA,QAAQ,CAAC,MAAO,CAAM,EAAA,EAAA,QAAQ,CAAC,UAAW,EAAE;AACzH,YAAA,QAAQ,QAAQ,CAAC,MAAM;AACrB,gBAAA,KAAK,GAAG;AACN,oBAAA,OAAO,GAAG,CAAA,qBAAA,EAAyB,GAAI,CAAA,CAAA,CAAG;oBAC1C;AACF,gBAAA,KAAK,GAAG;oBACN,OAAO,GAAG,4DAA4D;oBACtE;AACF,gBAAA,KAAK,GAAG;AACN,oBAAA,OAAO,GAAG,CAAA,mCAAA,EAAuC,GAAI,CAAA,CAAA,CAAG;oBACxD;;YAEJ,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;AACjC,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACvB,gBAAA,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC;;iBACnB;AACL,gBAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;AACrB,gBAAA,OAAO,IAAI;;;AAIf,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;;QAC9B,OAAO,KAAU,EAAE;YACnB,MAAM,OAAO,GAAG,CAAiC,6BAAA,EAAA,GAAI,uBAAwB,KAAK,CAAC,OAAQ,CAAA,CAAE;YAC7F,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACvB,gBAAA,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC;;iBACnB;AACL,gBAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;AACrB,gBAAA,OAAO,IAAI;;;QAIf,IAAI,MAAM,EAAE;AACV,YAAA,IAAI;gBACF,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;;YAC3C,OAAO,KAAU,EAAE;gBACnB,MAAM,OAAO,GAAG,CAAiB,aAAA,EAAA,GAAI,mBAAoB,KAAK,CAAC,OAAQ,CAAA,CAAE;gBACzE,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,oBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACvB,oBAAA,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC;;qBACnB;AACL,oBAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;AACrB,oBAAA,OAAO,IAAI;;;;AAKjB,QAAA,OAAO,MAAM;;AAIP,IAAA,OAAO,6BAA6B,CAAC,KAAK,GAAG,QAAQ,EAAA;AAE3D,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;AAC1C,QAAA,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC;QAElD,MAAM,gBAAgB,GAAG,EAAE;QAE3B,KAAK,MAAM,WAAW,IAAI,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;AAEpD,YAAA,IAAI;gBACF,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;AACpC,gBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,oBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;AACxB,oBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;AACtB,oBAAA,cAAc,CAAC,gBAAgB,EAAE,OAAO,EAAE,KAAK,CAAC;;;YAElD,OAAO,CAAM,EAAE;gBACf,OAAO,CAAC,IAAI,CAAC,CAA4C,wCAAA,EAAA,WAAY,CAAO,GAAA,EAAA,CAAC,CAAC,OAAQ,CAAE,CAAA,CAAC;;;AAK7F,QAAA,OAAO,gBAAgB;;IAIlB,aAAa,QAAQ,CAC1B,GAAW,EACX,YAAoB,EACpB,QAAkB,EAClB,MAAkB,EAAA;AAGlB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC;;AAGrF,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC;QAE3D,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC;QAEjD,OAAO,CAAC,KAAK,CAAC,CAA4B,wBAAA,EAAA,YAAa,CAAc,YAAA,CAAA,EAAE,IAAI,CAAC,MAAM,CAAC;;IAU9E,OAAO,GAAG,CACf,IAAY,EACZ,YAA4B,EAC5B,MAAA,GAA8B,IAAI,CAAC,MAAM,EAAA;QAEzC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC;;QAEtC,IAAI,WAAW,GAAQ,MAAM;AAC7B,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,YAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC;;QAE7D,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACtC,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,QAAQ,IAAI,WAAW,EAAE;AAC7E,gBAAA,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC;;iBAC9B;AACL,gBAAA,IAAI,YAAY,KAAK,SAAS,EAAE;AAC9B,oBAAA,OAAO,YAAY;;AAErB,gBAAA,OAAO,CAAC,KAAK,CAAC,qBAAsB,IAAK,CAAA,WAAA,CAAa,CAAC;AACvD,gBAAA,OAAO,SAAgB;;;AAG3B,QAAA,OAAO,WAAW;;IAGZ,OAAO,SAAS,CAAC,OAAe,EAAA;QACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,mBAAmB,CAAC,KAAK,IAAI;AACnE,QAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AACvF,QAAA,EAAE,CAAC,EAAE,GAAG,mBAAmB;AAC3B,QAAA,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;AAC3B,QAAA,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;AACxB,QAAA,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM;AACvB,QAAA,EAAE,CAAC,KAAK,CAAC,eAAe,GAAG,OAAO;AAClC,QAAA,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AACzB,QAAA,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU;AAC5B,QAAA,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO;QACxB,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AAC9C,QAAA,SAAS,CAAC,SAAS,GAAG,OAAO;AAC7B,QAAA,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC;QACzB,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AAClD,QAAA,aAAa,CAAC,SAAS,GAAG,uCAAuC;AACjE,QAAA,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC;QAC7B,MAAM,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AACtD,QAAA,iBAAiB,CAAC,SAAS,GAAG,oDAAoD;AAClF,QAAA,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC;QACjC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;;QAE/B,UAAU,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC;;AAGrC,IAAA,cAAc,CAAC,MAAc,EAAA;AAClC,QAAA,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;;IAGtE,gBAAgB,GAAA;AACrB,QAAA,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAC;;IAKjD,GAAG,CAAU,YAAoB,EAAE,YAAgB,EAAA;AACxD,QAAA,OAAO,aAAa,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC;;IAK5D,UAAU,CAAU,YAAoB,EAAE,YAAgB,EAAA;AAC/D,QAAA,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC;AACxE,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,MAAM,IAAI,KAAK,CAAC,kCAAmC,YAAa,CAAA,CAAA,CAAG,CAAC;;AAEtE,QAAA,OAAO,KAAK;;AApfH,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,aAAa,kBA+BQ,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AA/BhC,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;;0BAgCc;;0BAAY,MAAM;2BAAC,WAAW;;;ACrG7B,SAAA,aAAa,CAAC,MAAA,GAAkC,EAAE,EAAA;IAChE,OAAO;AACL,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,QAAQ,EAAE,MAAM;KACjB;AACH;;ACPA;AASA;;ACTA;;AAEG;;;;"}