{"version":3,"file":"acl.mjs","sources":["../../../../packages/acl/src/acl.config.ts","../../../../packages/acl/src/acl.service.ts","../../../../packages/acl/src/acl-if.directive.ts","../../../../packages/acl/src/acl.directive.ts","../../../../packages/acl/src/acl.type.ts","../../../../packages/acl/src/acl-guard.ts","../../../../packages/acl/src/acl.module.ts","../../../../packages/acl/acl.ts"],"sourcesContent":["import type { AlainACLConfig } from '@delon/util/config';\n\nexport const ACL_DEFAULT_CONFIG: AlainACLConfig = {\n  guard_url: `/403`\n};\n","import { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { AlainACLConfig, AlainConfigService } from '@delon/util/config';\n\nimport { ACL_DEFAULT_CONFIG } from './acl.config';\nimport { ACLCanType, ACLType } from './acl.type';\n\n/**\n * ACL 控制服务，[在线文档](https://ng-alain.com/acl)\n */\n@Injectable({ providedIn: 'root' })\nexport class ACLService {\n  private readonly cogSrv = inject(AlainConfigService);\n  private options: AlainACLConfig;\n  private roles: string[] = [];\n  private abilities: Array<number | string> = [];\n  private full = false;\n  private aclChange = new BehaviorSubject<ACLType | boolean | null>(null);\n\n  /** ACL变更通知 */\n  get change(): Observable<ACLType | boolean | null> {\n    return this.aclChange.asObservable();\n  }\n\n  /** 获取所有数据 */\n  get data(): { full: boolean; roles: string[]; abilities: Array<string | number> } {\n    return {\n      full: this.full,\n      roles: this.roles,\n      abilities: this.abilities\n    };\n  }\n\n  get guard_url(): string {\n    return this.options.guard_url!;\n  }\n\n  constructor() {\n    this.options = this.cogSrv.merge('acl', ACL_DEFAULT_CONFIG)!;\n  }\n\n  private parseACLType(val: string | string[] | number | number[] | ACLType | null): ACLType {\n    let t: ACLType;\n    if (typeof val === 'number') {\n      t = { ability: [val] };\n    } else if (Array.isArray(val) && val.length > 0 && typeof val[0] === 'number') {\n      t = { ability: val };\n    } else if (typeof val === 'object' && !Array.isArray(val)) {\n      t = { ...val };\n    } else if (Array.isArray(val)) {\n      t = { role: val as string[] };\n    } else {\n      t = { role: val == null ? [] : [val] };\n    }\n\n    return { except: false, ...t };\n  }\n\n  /**\n   * 设置当前用户角色或权限能力（会先清除所有）\n   */\n  set(value: ACLType): void {\n    this.full = false;\n    this.abilities = [];\n    this.roles = [];\n    this.add(value);\n    this.aclChange.next(value);\n  }\n\n  /**\n   * 标识当前用户为全量，即不受限\n   */\n  setFull(val: boolean): void {\n    this.full = val;\n    this.aclChange.next(val);\n  }\n\n  /**\n   * 设置当前用户权限能力（会先清除所有）\n   */\n  setAbility(abilities: Array<number | string>): void {\n    this.set({ ability: abilities } as ACLType);\n  }\n\n  /**\n   * 设置当前用户角色（会先清除所有）\n   */\n  setRole(roles: string[]): void {\n    this.set({ role: roles } as ACLType);\n  }\n\n  /**\n   * 为当前用户增加角色或权限能力\n   */\n  add(value: ACLType): void {\n    if (value.role && value.role.length > 0) {\n      this.roles.push(...value.role);\n    }\n    if (value.ability && value.ability.length > 0) {\n      this.abilities.push(...value.ability);\n    }\n  }\n\n  /**\n   * 为当前用户附加角色\n   */\n  attachRole(roles: string[]): void {\n    for (const val of roles) {\n      if (!this.roles.includes(val)) {\n        this.roles.push(val);\n      }\n    }\n    this.aclChange.next(this.data);\n  }\n\n  /**\n   * 为当前用户附加权限\n   */\n  attachAbility(abilities: Array<number | string>): void {\n    for (const val of abilities) {\n      if (!this.abilities.includes(val)) {\n        this.abilities.push(val);\n      }\n    }\n    this.aclChange.next(this.data);\n  }\n\n  /**\n   * 为当前用户移除角色\n   */\n  removeRole(roles: string[]): void {\n    for (const val of roles) {\n      const idx = this.roles.indexOf(val);\n      if (idx !== -1) {\n        this.roles.splice(idx, 1);\n      }\n    }\n    this.aclChange.next(this.data);\n  }\n\n  /**\n   * 为当前用户移除权限\n   */\n  removeAbility(abilities: Array<number | string>): void {\n    for (const val of abilities) {\n      const idx = this.abilities.indexOf(val);\n      if (idx !== -1) {\n        this.abilities.splice(idx, 1);\n      }\n    }\n    this.aclChange.next(this.data);\n  }\n\n  /**\n   * 当前用户是否有对应角色，其实 `number` 表示Ability\n   *\n   * - 当 `full: true` 或参数 `null` 时返回 `true`\n   * - 若使用 `ACLType` 参数，可以指定 `mode` 校验模式\n   */\n  can(roleOrAbility: ACLCanType | null): boolean {\n    const { preCan } = this.options;\n    if (preCan) {\n      roleOrAbility = preCan(roleOrAbility!);\n    }\n\n    const t = this.parseACLType(roleOrAbility);\n    let result = false;\n    if (this.full === true || !roleOrAbility) {\n      result = true;\n    } else {\n      if (t.role && t.role.length > 0) {\n        if (t.mode === 'allOf') {\n          result = t.role.every(v => this.roles.includes(v));\n        } else {\n          result = t.role.some(v => this.roles.includes(v));\n        }\n      }\n      if (t.ability && t.ability.length > 0) {\n        if (t.mode === 'allOf') {\n          result = (t.ability as Array<number | string>).every(v => this.abilities.includes(v));\n        } else {\n          result = (t.ability as Array<number | string>).some(v => this.abilities.includes(v));\n        }\n      }\n    }\n\n    return t.except === true ? !result : result;\n  }\n\n  /** @inner */\n  parseAbility(value: ACLCanType): ACLCanType {\n    if (typeof value === 'number' || typeof value === 'string' || Array.isArray(value)) {\n      value = { ability: Array.isArray(value) ? value : [value] } as ACLType;\n    }\n    delete value.role;\n    return value;\n  }\n\n  /**\n   * 当前用户是否有对应权限点\n   */\n  canAbility(value: ACLCanType): boolean {\n    return this.can(this.parseAbility(value));\n  }\n}\n","import {\n  DestroyRef,\n  Directive,\n  EmbeddedViewRef,\n  TemplateRef,\n  ViewContainerRef,\n  afterNextRender,\n  booleanAttribute,\n  effect,\n  inject,\n  input\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs';\n\nimport { ACLService } from './acl.service';\nimport { ACLCanType } from './acl.type';\n\n@Directive({\n  selector: '[aclIf]',\n  exportAs: 'aclIf'\n})\nexport class ACLIfDirective {\n  private readonly srv = inject(ACLService);\n  private readonly _viewContainer = inject(ViewContainerRef);\n  private readonly d$ = inject(DestroyRef);\n\n  private _thenViewRef: EmbeddedViewRef<void> | null = null;\n  private _elseViewRef: EmbeddedViewRef<void> | null = null;\n\n  readonly aclIf = input.required<ACLCanType>();\n  readonly aclIfThen = input<TemplateRef<void> | null>(inject(TemplateRef<void>));\n  readonly aclIfElse = input<TemplateRef<void> | null>();\n  readonly except = input(false, { transform: booleanAttribute });\n\n  constructor() {\n    effect(() => this.updateView());\n\n    afterNextRender(() => {\n      this.srv.change\n        .pipe(\n          takeUntilDestroyed(this.d$),\n          filter(r => r != null)\n        )\n        .subscribe(() => this.updateView());\n    });\n  }\n\n  private updateView(): void {\n    const res = this.srv.can(this.aclIf());\n    const except = this.except();\n    const then = this.aclIfThen();\n    const els = this.aclIfElse();\n    if ((res && !except) || (!res && except)) {\n      if (!this._thenViewRef) {\n        this._viewContainer.clear();\n        this._elseViewRef = null;\n        if (then) {\n          this._thenViewRef = this._viewContainer.createEmbeddedView(then);\n        }\n      }\n    } else {\n      if (!this._elseViewRef) {\n        this._viewContainer.clear();\n        this._thenViewRef = null;\n        if (els) {\n          this._elseViewRef = this._viewContainer.createEmbeddedView(els);\n        }\n      }\n    }\n  }\n}\n","import { Directive, ElementRef, Renderer2, inject, input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs';\n\nimport { ACLService } from './acl.service';\nimport { ACLCanType } from './acl.type';\n\n@Directive({\n  selector: '[acl]',\n  exportAs: 'acl'\n})\nexport class ACLDirective {\n  private readonly el: HTMLElement = inject(ElementRef).nativeElement;\n  private readonly renderer = inject(Renderer2);\n  private readonly srv = inject(ACLService);\n\n  private _value!: ACLCanType;\n\n  readonly acl = input(undefined, {\n    transform: (v: ACLCanType) => this.set(v)\n  });\n  readonly ability = input(undefined, {\n    alias: 'acl-ability',\n    transform: (v: ACLCanType) => this.set(this.srv.parseAbility(v))\n  });\n\n  constructor() {\n    this.srv.change\n      .pipe(\n        takeUntilDestroyed(),\n        filter(r => r != null)\n      )\n      .subscribe(() => this.set(this._value));\n  }\n\n  private set(value: ACLCanType): void {\n    this._value = value;\n    const CLS = 'acl__hide';\n    const el = this.el;\n    if (this.srv.can(this._value)) {\n      this.renderer.removeClass(el, CLS);\n    } else {\n      this.renderer.addClass(el, CLS);\n    }\n  }\n}\n","/**\n * NOTE：`ACLType` 类型可能会被其他类库所引用，为了减少类库间彼此的依赖性，其他类库会以复制的形式存在\n * 当这里有变化时，请务必同步更新，涉及：`MenuService.acl`、`util.AlainACLType`\n * TODO: 尝试增加 `@delon/core` 类库用于处理这种通用型\n */\n\nimport { Injector } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport type { ACLService } from './acl.service';\n\nexport interface ACLType {\n  /**\n   * 角色\n   */\n  role?: string[];\n  /**\n   * 权限点\n   */\n  ability?: number[] | string[];\n\n  /**\n   * Validated against, default: `oneOf`\n   * - `allOf` the value validates against all the roles or abilities\n   * - `oneOf` the value validates against exactly one of the roles or abilities\n   */\n  mode?: 'allOf' | 'oneOf';\n\n  /**\n   * 是否取反，即结果为 `true` 时表示未授权\n   */\n  except?: boolean;\n\n  [key: string]: any;\n}\n\nexport type ACLCanType = number | number[] | string | string[] | ACLType;\n\nexport type ACLGuardFunctionType = (srv: ACLService, injector: Injector) => Observable<ACLCanType>;\nexport type ACLGuardType = ACLCanType | Observable<ACLCanType> | ACLGuardFunctionType;\n\nexport interface ACLGuardData {\n  guard?: ACLGuardType | null;\n  guard_url?: string | null;\n}\n","import { Injectable, Injector, inject } from '@angular/core';\nimport { CanActivateChildFn, CanActivateFn, CanMatchFn, Router } from '@angular/router';\nimport { Observable, of, map, tap } from 'rxjs';\n\nimport { ACLService } from './acl.service';\nimport type { ACLCanType, ACLGuardData } from './acl.type';\n\n@Injectable({ providedIn: 'root' })\nexport class ACLGuardService {\n  private readonly srv = inject(ACLService);\n  private readonly router = inject(Router);\n  private readonly injector = inject(Injector);\n\n  process(data?: ACLGuardData): Observable<boolean> {\n    data = {\n      guard: null,\n      guard_url: this.srv.guard_url,\n      ...data\n    };\n    let guard = data.guard;\n    if (typeof guard === 'function') guard = guard(this.srv, this.injector);\n    return (guard && guard instanceof Observable ? guard : of(guard != null ? (guard as ACLCanType) : null)).pipe(\n      map(v => this.srv.can(v)),\n      tap(v => {\n        if (v) return;\n        this.router.navigateByUrl(data!.guard_url!);\n      })\n    );\n  }\n}\n\n/**\n * Routing guard prevent unauthorized users visit the page, [ACL Document](https://ng-alain.com/acl).\n *\n * ```ts\n * data: {\n *  path: 'home',\n *  canActivate: [ aclCanActivate ],\n *  data: { guard: 'user1' }\n * }\n * ```\n */\nexport const aclCanActivate: CanActivateFn = route => inject(ACLGuardService).process(route.data);\n\n/**\n * Routing guard prevent unauthorized users visit the page, [ACL Document](https://ng-alain.com/acl).\n *\n * ```ts\n * data: {\n *  path: 'home',\n *  canActivateChild: [ aclCanActivateChild ],\n *  data: { guard: 'user1' }\n * }\n * ```\n */\nexport const aclCanActivateChild: CanActivateChildFn = route => inject(ACLGuardService).process(route.data);\n\n/**\n * Routing guard prevent unauthorized users visit the page, [ACL Document](https://ng-alain.com/acl).\n *\n * ```ts\n * data: {\n *  path: 'home',\n *  canMatch: [ aclCanMatch ],\n *  data: { guard: 'user1' }\n * }\n * ```\n */\nexport const aclCanMatch: CanMatchFn = route => inject(ACLGuardService).process(route.data);\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ACLIfDirective } from './acl-if.directive';\nimport { ACLDirective } from './acl.directive';\n\nconst COMPONENTS = [ACLDirective, ACLIfDirective];\n\n@NgModule({\n  imports: [CommonModule, ...COMPONENTS],\n  exports: COMPONENTS\n})\nexport class DelonACLModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;AAEO,MAAM,kBAAkB,GAAmB;AAChD,IAAA,SAAS,EAAE,CAAA,IAAA;;;ACKb;;AAEG;MAEU,UAAU,CAAA;AACJ,IAAA,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC5C,IAAA,OAAO;IACP,KAAK,GAAa,EAAE;IACpB,SAAS,GAA2B,EAAE;IACtC,IAAI,GAAG,KAAK;AACZ,IAAA,SAAS,GAAG,IAAI,eAAe,CAA2B,IAAI,CAAC;;AAGvE,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;IACtC;;AAGA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC;SACjB;IACH;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAU;IAChC;AAEA,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,kBAAkB,CAAE;IAC9D;AAEQ,IAAA,YAAY,CAAC,GAA2D,EAAA;AAC9E,QAAA,IAAI,CAAU;AACd,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE;QACxB;aAAO,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;AAC7E,YAAA,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE;QACtB;AAAO,aAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACzD,YAAA,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE;QAChB;AAAO,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAC7B,YAAA,CAAC,GAAG,EAAE,IAAI,EAAE,GAAe,EAAE;QAC/B;aAAO;AACL,YAAA,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;QACxC;QAEA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE;IAChC;AAEA;;AAEG;AACH,IAAA,GAAG,CAAC,KAAc,EAAA;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AACjB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACf,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B;AAEA;;AAEG;AACH,IAAA,OAAO,CAAC,GAAY,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AACf,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1B;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,SAAiC,EAAA;QAC1C,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,EAAa,CAAC;IAC7C;AAEA;;AAEG;AACH,IAAA,OAAO,CAAC,KAAe,EAAA;QACrB,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAa,CAAC;IACtC;AAEA;;AAEG;AACH,IAAA,GAAG,CAAC,KAAc,EAAA;AAChB,QAAA,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;QAChC;AACA,QAAA,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;QACvC;IACF;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,KAAe,EAAA;AACxB,QAAA,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC7B,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YACtB;QACF;QACA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,SAAiC,EAAA;AAC7C,QAAA,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACjC,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1B;QACF;QACA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,KAAe,EAAA;AACxB,QAAA,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AACnC,YAAA,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;gBACd,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YAC3B;QACF;QACA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,SAAiC,EAAA;AAC7C,QAAA,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC;AACvC,YAAA,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;gBACd,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YAC/B;QACF;QACA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;AAEA;;;;;AAKG;AACH,IAAA,GAAG,CAAC,aAAgC,EAAA;AAClC,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO;QAC/B,IAAI,MAAM,EAAE;AACV,YAAA,aAAa,GAAG,MAAM,CAAC,aAAc,CAAC;QACxC;QAEA,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;QAC1C,IAAI,MAAM,GAAG,KAAK;QAClB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE;YACxC,MAAM,GAAG,IAAI;QACf;aAAO;AACL,YAAA,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,gBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE;oBACtB,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACpD;qBAAO;oBACL,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACnD;YACF;AACA,YAAA,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACrC,gBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE;oBACtB,MAAM,GAAI,CAAC,CAAC,OAAkC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACvF;qBAAO;oBACL,MAAM,GAAI,CAAC,CAAC,OAAkC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACtF;YACF;QACF;AAEA,QAAA,OAAO,CAAC,CAAC,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM;IAC7C;;AAGA,IAAA,YAAY,CAAC,KAAiB,EAAA;AAC5B,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAClF,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,EAAa;QACxE;QACA,OAAO,KAAK,CAAC,IAAI;AACjB,QAAA,OAAO,KAAK;IACd;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,KAAiB,EAAA;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC3C;uGAhMW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAV,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cADG,MAAM,EAAA,CAAA;;2FACnB,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCWrB,cAAc,CAAA;AACR,IAAA,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;AACxB,IAAA,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACzC,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;IAEhC,YAAY,GAAiC,IAAI;IACjD,YAAY,GAAiC,IAAI;AAEhD,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,2EAAc;IACpC,SAAS,GAAG,KAAK,CAA2B,MAAM,EAAC,WAAiB,EAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;IACtE,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA4B;IAC7C,MAAM,GAAG,KAAK,CAAC,KAAK,8EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE/D,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAE/B,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,GAAG,CAAC;AACN,iBAAA,IAAI,CACH,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAC3B,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;iBAEvB,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;AACvC,QAAA,CAAC,CAAC;IACJ;IAEQ,UAAU,GAAA;AAChB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACtC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AAC7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;AAC5B,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE;AACxC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC3B,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;gBACxB,IAAI,IAAI,EAAE;oBACR,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC;gBAClE;YACF;QACF;aAAO;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC3B,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;gBACxB,IAAI,GAAG,EAAE;oBACP,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,GAAG,CAAC;gBACjE;YACF;QACF;IACF;uGAhDW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,QAAQ,EAAE;AACX,iBAAA;;;MCVY,YAAY,CAAA;AACN,IAAA,EAAE,GAAgB,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa;AAClD,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,IAAA,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;AAEjC,IAAA,MAAM;AAEL,IAAA,GAAG,GAAG,KAAK,CAAC,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,KAAA,EAAA,8BAAA,EAAA,CAAA,EAC5B,SAAS,EAAE,CAAC,CAAa,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GACzC;AACO,IAAA,OAAO,GAAG,KAAK,CAAC,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,8BAAA,EAAA,CAAA,EAChC,KAAK,EAAE,aAAa;QACpB,SAAS,EAAE,CAAC,CAAa,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAChE;AAEF,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,GAAG,CAAC;AACN,aAAA,IAAI,CACH,kBAAkB,EAAE,EACpB,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAEvB,aAAA,SAAS,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C;AAEQ,IAAA,GAAG,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,MAAM,GAAG,GAAG,WAAW;AACvB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;QAClB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YAC7B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,CAAC;QACpC;aAAO;YACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;QACjC;IACF;uGAjCW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,KAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAJxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,QAAQ,EAAE;AACX,iBAAA;;;ACVD;;;;AAIG;;MCIU,eAAe,CAAA;AACT,IAAA,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;AACxB,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAE5C,IAAA,OAAO,CAAC,IAAmB,EAAA;AACzB,QAAA,IAAI,GAAG;AACL,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS;AAC7B,YAAA,GAAG;SACJ;AACD,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;QACtB,IAAI,OAAO,KAAK,KAAK,UAAU;YAAE,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC;QACvE,OAAO,CAAC,KAAK,IAAI,KAAK,YAAY,UAAU,GAAG,KAAK,GAAG,EAAE,CAAC,KAAK,IAAI,IAAI,GAAI,KAAoB,GAAG,IAAI,CAAC,EAAE,IAAI,CAC3G,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACzB,GAAG,CAAC,CAAC,IAAG;AACN,YAAA,IAAI,CAAC;gBAAE;YACP,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAK,CAAC,SAAU,CAAC;QAC7C,CAAC,CAAC,CACH;IACH;uGApBW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AAwBlC;;;;;;;;;;AAUG;AACI,MAAM,cAAc,GAAkB,KAAK,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI;AAEhG;;;;;;;;;;AAUG;AACI,MAAM,mBAAmB,GAAuB,KAAK,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI;AAE1G;;;;;;;;;;AAUG;AACI,MAAM,WAAW,GAAe,KAAK,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI;;AC9D1F,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,cAAc,CAAC;MAMpC,cAAc,CAAA;uGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAd,cAAc,EAAA,OAAA,EAAA,CAHf,YAAY,EAHJ,YAAY,EAAE,cAAc,CAAA,EAAA,OAAA,EAAA,CAA5B,YAAY,EAAE,cAAc,CAAA,EAAA,CAAA;AAMnC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAHf,YAAY,CAAA,EAAA,CAAA;;2FAGX,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,GAAG,UAAU,CAAC;AACtC,oBAAA,OAAO,EAAE;AACV,iBAAA;;;ACXD;;AAEG;;;;"}