{"version":3,"file":"ng-snotify.mjs","sources":["../../../projects/ng-snotify/src/lib/enums/snotify-style.enum.ts","../../../projects/ng-snotify/src/lib/decorators/transform-argument.decorator.ts","../../../projects/ng-snotify/src/lib/utils.ts","../../../projects/ng-snotify/src/lib/decorators/set-toast-type.decorator.ts","../../../projects/ng-snotify/src/lib/models/snotify-toast.model.ts","../../../projects/ng-snotify/src/lib/services/snotify.service.ts","../../../projects/ng-snotify/src/lib/components/buttons/buttons.component.ts","../../../projects/ng-snotify/src/lib/components/buttons/buttons.component.html","../../../projects/ng-snotify/src/lib/pipes/truncate.pipe.ts","../../../projects/ng-snotify/src/lib/components/prompt/prompt.component.ts","../../../projects/ng-snotify/src/lib/components/prompt/prompt.component.html","../../../projects/ng-snotify/src/lib/enums/snotify-position.enum.ts","../../../projects/ng-snotify/src/lib/components/toast/toast.component.ts","../../../projects/ng-snotify/src/lib/components/toast/toast.component.html","../../../projects/ng-snotify/src/lib/pipes/keys.pipe.ts","../../../projects/ng-snotify/src/lib/components/snotify/snotify.component.ts","../../../projects/ng-snotify/src/lib/components/snotify/snotify.component.html","../../../projects/ng-snotify/src/lib/snotify.module.ts","../../../projects/ng-snotify/src/lib/toast-defaults.ts","../../../projects/ng-snotify/src/public-api.ts","../../../projects/ng-snotify/src/ng-snotify.ts"],"sourcesContent":["/**\n * Toast style.\n */\nexport enum SnotifyStyle {\n  simple = 'simple',\n  success = 'success',\n  error = 'error',\n  warning = 'warning',\n  info = 'info',\n  async = 'async',\n  confirm = 'confirm',\n  prompt = 'prompt'\n}\n","import { Snotify } from '../interfaces/snotify.interface';\nimport { SnotifyTypeType } from '../types/snotify-type.type';\nimport { SnotifyStyle } from '../enums/snotify-style.enum';\n\n/**\n * Transform arguments to Snotify object\n * @param target any\n * @param propertyKey SnotifyTypeType\n * @param descriptor PropertyDescriptor\n * @returns Snotify\n */\nexport function TransformArgument(target: any, propertyKey: SnotifyTypeType, descriptor: PropertyDescriptor) {\n  if (propertyKey === SnotifyStyle.async) {\n    return {\n      value(...args: any[]) {\n        let result;\n        if (args.length === 2) {\n          result = {\n            title: null,\n            body: args[0],\n            config: null,\n            action: args[1]\n          };\n        } else if (args.length === 3) {\n          if (typeof args[1] === 'string') {\n            result = {\n              title: args[1],\n              body: args[0],\n              config: null,\n              action: args[2]\n            };\n          } else {\n            result = {\n              title: null,\n              body: args[0],\n              config: args[2],\n              action: args[1]\n            };\n          }\n        } else {\n          result = {\n            title: args[1],\n            body: args[0],\n            config: args[3],\n            action: args[2]\n          };\n        }\n        return descriptor.value.apply(this, [result as Snotify]);\n      }\n    };\n  } else {\n    return {\n      value(...args: any[]) {\n        let result;\n        if (args.length === 1) {\n          result = {\n            title: null,\n            body: args[0],\n            config: null\n          };\n        } else if (args.length === 3) {\n          result = {\n            title: args[1],\n            body: args[0],\n            config: args[2]\n          };\n        } else {\n          result = {\n            title: null,\n            config: null,\n            body: args[0],\n            [typeof args[1] === 'string' ? 'title' : 'config']: args[1]\n          };\n        }\n        return descriptor.value.apply(this, [result as Snotify]);\n      }\n    };\n  }\n}\n","/**\n * Generates random id\n * @return number\n */\nexport function uuid(): number {\n  return Math.floor(Math.random() * (Date.now() - 1)) + 1;\n}\n\n/**\n * Simple is object check.\n * @param item Object<any>\n * @returns boolean\n */\nexport function isObject(item): boolean {\n  return item && typeof item === 'object' && !Array.isArray(item);\n}\n\n/**\n * Deep merge objects.\n * @param sources Array<Object<any>>\n * @returns Object<any>\n */\nexport function mergeDeep(...sources) {\n  const target = {};\n  if (!sources.length) {\n    return target;\n  }\n\n  while (sources.length > 0) {\n    const source = sources.shift();\n    if (isObject(source)) {\n      for (const key in source) {\n        if (isObject(source[key])) {\n          target[key] = mergeDeep(target[key], source[key]);\n        } else {\n          Object.assign(target, { [key]: source[key] });\n        }\n      }\n    }\n  }\n  return target;\n}\n\nexport function animate(start: number, duration: number, callback: (currentValue: number, progress: number) => {}) {\n  let endTime;\n  requestAnimationFrame(timestamp => (endTime = timestamp + duration));\n  const calculate = () => {\n    requestAnimationFrame(timestamp => {\n      const runtime = timestamp - endTime;\n      const progress = Math.min(runtime / duration, 1) + start;\n      if (runtime < duration) {\n        if (callback(+(100 * progress).toFixed(2), progress)) {\n          calculate();\n        }\n      }\n    });\n  };\n}\n","import { SnotifyTypeType } from '../types/snotify-type.type';\nimport { Snotify } from '../interfaces/snotify.interface';\n\n/**\n * Defines toast style depending on method name\n * @param target any\n * @param propertyKey SnotifyTypeType\n * @param descriptor PropertyDescriptor\n * @returns value: ((...args: any[]) => any)\n */\nexport function SetToastType(target: any, propertyKey: SnotifyTypeType, descriptor: PropertyDescriptor) {\n  return {\n    value(...args: any[]) {\n      (args[0] as Snotify).config = {\n        ...(args[0] as Snotify).config,\n        type: propertyKey\n      };\n      return descriptor.value.apply(this, args);\n    }\n  };\n}\n","import { SnotifyToastConfig } from '../interfaces/snotify-toast-config.interface';\nimport { Subject, Subscription } from 'rxjs';\nimport { SnotifyEventType } from '../types/snotify-event.type';\nimport { SnotifyStyle } from '../enums/snotify-style.enum';\n// @TODO remove method in observable way\n/**\n * Toast main model\n */\nexport class SnotifyToast {\n  /**\n   * Emits SnotifyEventType\n   */\n  readonly eventEmitter = new Subject<SnotifyEventType>();\n  /**\n   * Holds all subscribers because we need to unsubscribe from all before toast get destroyed\n   */\n  private eventsHolder: Subscription[] = [];\n  /**\n   * Toast prompt value\n   */\n  value: string;\n  /**\n   * Toast validator\n   */\n  valid: boolean;\n  constructor(public id: number, public title: string, public body: string, public config: SnotifyToastConfig) {\n    if (this.config.type === SnotifyStyle.prompt) {\n      this.value = '';\n    }\n    this.on('hidden', () => {\n      this.eventsHolder.forEach((subscription: Subscription) => {\n        subscription.unsubscribe();\n      });\n    });\n  }\n\n  /**\n   * Subscribe to toast events\n   * @returns this\n   * @param event SnotifyEventType\n   * @param action (toast: this) => void\n   */\n  on(event: SnotifyEventType, action: (toast: this) => void): this {\n    this.eventsHolder.push(\n      this.eventEmitter.subscribe((e: SnotifyEventType) => {\n        if (e === event) {\n          action(this);\n        }\n      })\n    );\n    return this;\n  }\n\n  /**\n   * Tests if a toast equals this toast.\n   * @returns boolean true then equals else false.\n   * @param toast SnotifyToast\n   */\n  equals(toast: SnotifyToast): boolean {\n    return this.body === toast.body && this.title === toast.title && this.config.type === toast.config.type;\n  }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Observable, Subject, Subscription, from } from 'rxjs';\nimport { SnotifyToastConfig } from '../interfaces/snotify-toast-config.interface';\nimport { Snotify } from '../interfaces/snotify.interface';\nimport { SnotifyTypeType } from '../types/snotify-type.type';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { TransformArgument } from '../decorators/transform-argument.decorator';\nimport { mergeDeep, uuid } from '../utils';\nimport { SetToastType } from '../decorators/set-toast-type.decorator';\nimport { SnotifyDefaults } from '../interfaces/snotify-defaults.interface';\nimport { SnotifyToast } from '../models/snotify-toast.model';\nimport { SnotifyStyle } from '../enums/snotify-style.enum';\n\n/**\n * SnotifyService - create, remove, config toasts\n */\n@Injectable()\n// tslint:disable:unified-signatures\nexport class SnotifyService {\n  readonly emitter = new Subject<SnotifyToast[]>();\n  readonly toastChanged = new Subject<SnotifyToast>();\n  readonly toastDeleted = new Subject<number>();\n  private notifications: SnotifyToast[] = [];\n\n  constructor(@Inject('SnotifyToastConfig') public config: SnotifyDefaults) {}\n  /**\n   * emit changes in notifications array\n   */\n  private emit(): void {\n    this.emitter.next(this.notifications.slice());\n  }\n\n  /**\n   * returns SnotifyToast object\n   * @param id Number\n   * @return SnotifyToast|undefined\n   */\n  get(id: number): SnotifyToast {\n    return this.notifications.find(toast => toast.id === id);\n  }\n\n  /**\n   * add SnotifyToast to notifications array\n   * @param toast SnotifyToast\n   */\n  private add(toast: SnotifyToast): void {\n    if (this.config.global.filterDuplicates && this.containsToast(toast)) {\n      return;\n    }\n    if (this.config.global.newOnTop) {\n      this.notifications.unshift(toast);\n    } else {\n      this.notifications.push(toast);\n    }\n    this.emit();\n  }\n\n  /**\n   * checks if the toast is in the collection.\n   * @param inToast SnotifyToast\n   * @returns boolean\n   */\n  private containsToast(inToast: SnotifyToast): boolean {\n    return this.notifications.some(toast => toast.equals(inToast));\n  }\n\n  /**\n   * If ID passed, emits toast animation remove, if ID & REMOVE passed, removes toast from notifications array\n   * @param id number\n   * @param remove boolean\n   */\n  remove(id?: number, remove?: boolean): void {\n    if (!id) {\n      return this.clear();\n    } else if (remove) {\n      this.notifications = this.notifications.filter(toast => toast.id !== id);\n      return this.emit();\n    }\n    this.toastDeleted.next(id);\n  }\n\n  /**\n   * Clear notifications array\n   */\n  clear(): void {\n    this.notifications = [];\n    this.emit();\n  }\n\n  /**\n   * Creates toast and add it to array, returns toast id\n   * @param snotify Snotify\n   * @return number\n   */\n  create(snotify: Snotify): SnotifyToast {\n    const config = mergeDeep(this.config.toast, this.config.type[snotify.config.type], snotify.config);\n    const toast = new SnotifyToast(uuid(), snotify.title, snotify.body, config);\n    this.add(toast);\n    return toast;\n  }\n\n  setDefaults(defaults: SnotifyDefaults): SnotifyDefaults {\n    return (this.config = mergeDeep(this.config, defaults) as SnotifyDefaults);\n  }\n\n  /**\n   * Create toast with simple style returns toast id;\n   * @param body string\n   * @returns number\n   */\n  simple(body: string): SnotifyToast;\n  /**\n   * Create toast with simple style returns toast id;\n   * @param body string\n   * @param title string\n   * @returns number\n   */\n  simple(body: string, title: string): SnotifyToast;\n  /**\n   * Create toast with simple style returns toast id;\n   * @param body string\n   * @param config SnotifyToastConfig\n   * @returns number\n   */\n  simple(body: string, config: SnotifyToastConfig): SnotifyToast;\n  /**\n   * Create toast with simple style  returns toast id;\n   * @param [body] string\n   * @param [title] string\n   * @param [config] SnotifyToastConfig\n   * @returns number\n   */\n  simple(body: string, title: string, config: SnotifyToastConfig): SnotifyToast;\n  /**\n   * Transform toast arguments into Snotify object\n   */\n  @TransformArgument\n  /**\n   * Determines current toast type and collects default configuration\n   */\n  @SetToastType\n  simple(args: any): SnotifyToast {\n    return this.create(args);\n  }\n\n  /**\n   * Create toast with success style returns toast id;\n   * @param body string\n   * @returns number\n   */\n  success(body: string): SnotifyToast;\n  /**\n   * Create toast with success style returns toast id;\n   * @param body string\n   * @param title string\n   * @returns number\n   */\n  success(body: string, title: string): SnotifyToast;\n  /**\n   * Create toast with success style returns toast id;\n   * @param body string\n   * @param config SnotifyToastConfig\n   * @returns number\n   */\n  success(body: string, config: SnotifyToastConfig): SnotifyToast;\n  /**\n   * Create toast with success style  returns toast id;\n   * @param [body] string\n   * @param [title] string\n   * @param [config] SnotifyToastConfig\n   * @returns number\n   */\n  success(body: string, title: string, config: SnotifyToastConfig): SnotifyToast;\n  /**\n   * Transform toast arguments into Snotify object\n   */\n  @TransformArgument\n  /**\n   * Determines current toast type and collects default configuration\n   */\n  @SetToastType\n  success(args: any): SnotifyToast {\n    return this.create(args);\n  }\n\n  /**\n   * Create toast with error style returns toast id;\n   * @param body string\n   * @returns number\n   */\n  error(body: string): SnotifyToast;\n  /**\n   * Create toast with error style returns toast id;\n   * @param body string\n   * @param title string\n   * @returns number\n   */\n  error(body: string, title: string): SnotifyToast;\n  /**\n   * Create toast with error style returns toast id;\n   * @param body string\n   * @param config SnotifyToastConfig\n   * @returns number\n   */\n  error(body: string, config: SnotifyToastConfig): SnotifyToast;\n  /**\n   * Create toast with error style  returns toast id;\n   * @param [body] string\n   * @param [title] string\n   * @param [config] SnotifyToastConfig\n   * @returns number\n   */\n  error(body: string, title: string, config: SnotifyToastConfig): SnotifyToast;\n  /**\n   * Transform toast arguments into Snotify object\n   */\n  @TransformArgument\n  /**\n   * Determines current toast type and collects default configuration\n   */\n  @SetToastType\n  error(args: any): SnotifyToast {\n    return this.create(args);\n  }\n\n  /**\n   * Create toast with info style returns toast id;\n   * @param body string\n   * @returns number\n   */\n  info(body: string): SnotifyToast;\n  /**\n   * Create toast with info style returns toast id;\n   * @param body string\n   * @param title string\n   * @returns number\n   */\n  info(body: string, title: string): SnotifyToast;\n  /**\n   * Create toast with info style returns toast id;\n   * @param body string\n   * @param config SnotifyToastConfig\n   * @returns number\n   */\n  info(body: string, config: SnotifyToastConfig): SnotifyToast;\n  /**\n   * Create toast with info style  returns toast id;\n   * @param [body] string\n   * @param [title] string\n   * @param [config] SnotifyToastConfig\n   * @returns number\n   */\n  info(body: string, title: string, config: SnotifyToastConfig): SnotifyToast;\n  /**\n   * Transform toast arguments into Snotify object\n   */\n  @TransformArgument\n  /**\n   * Determines current toast type and collects default configuration\n   */\n  @SetToastType\n  info(args: any): SnotifyToast {\n    return this.create(args);\n  }\n\n  /**\n   * Create toast with warning style returns toast id;\n   * @param body string\n   * @returns number\n   */\n  warning(body: string): SnotifyToast;\n  /**\n   * Create toast with warning style returns toast id;\n   * @param body string\n   * @param title string\n   * @returns number\n   */\n  warning(body: string, title: string): SnotifyToast;\n  /**\n   * Create toast with warning style returns toast id;\n   * @param body string\n   * @param config SnotifyToastConfig\n   * @returns number\n   */\n  warning(body: string, config: SnotifyToastConfig): SnotifyToast;\n  /**\n   * Create toast with warning style  returns toast id;\n   * @param [body] string\n   * @param [title] string\n   * @param [config] SnotifyToastConfig\n   * @returns number\n   */\n  warning(body: string, title: string, config: SnotifyToastConfig): SnotifyToast;\n  /**\n   * Transform toast arguments into Snotify object\n   */\n  @TransformArgument\n  /**\n   * Determines current toast type and collects default configuration\n   */\n  @SetToastType\n  warning(args: any): SnotifyToast {\n    return this.create(args);\n  }\n\n  /**\n   * Create toast with confirm style returns toast id;\n   * @param body string\n   * @returns number\n   */\n  confirm(body: string): SnotifyToast;\n  /**\n   * Create toast with confirm style returns toast id;\n   * @param body string\n   * @param title string\n   * @returns number\n   */\n  confirm(body: string, title: string): SnotifyToast;\n  /**\n   * Create toast with confirm style returns toast id;\n   * @param body string\n   * @param config SnotifyToastConfig\n   * @returns number\n   */\n  confirm(body: string, config: SnotifyToastConfig): SnotifyToast;\n  /**\n   * Create toast with confirm style  returns toast id;\n   * @param [body] string\n   * @param [title] string\n   * @param [config] SnotifyToastConfig\n   * @returns number\n   */\n  confirm(body: string, title: string, config: SnotifyToastConfig): SnotifyToast;\n  /**\n   * Transform toast arguments into Snotify object\n   */\n  @TransformArgument\n  /**\n   * Determines current toast type and collects default configuration\n   */\n  @SetToastType\n  confirm(args: any): SnotifyToast {\n    return this.create(args);\n  }\n\n  /**\n   * Create toast with Prompt style with two buttons, returns toast id;\n   * @param body string\n   * @returns number\n   */\n  prompt(body: string): SnotifyToast;\n  /**\n   * Create toast with Prompt style with two buttons, returns toast id;\n   * @param body string\n   * @param title string\n   * @returns number\n   */\n  prompt(body: string, title: string): SnotifyToast;\n  /**\n   * Create toast with Prompt style with two buttons, returns toast id;\n   * @param body string\n   * @param config SnotifyToastConfig\n   * @returns number\n   */\n  prompt(body: string, config: SnotifyToastConfig): SnotifyToast;\n  /**\n   * Create toast with Prompt style with two buttons, returns toast id;\n   * @param [body] string\n   * @param [title] string\n   * @param [config] SnotifyToastConfig\n   * @returns number\n   */\n  prompt(body: string, title: string, config: SnotifyToastConfig): SnotifyToast;\n  /**\n   * Transform toast arguments into Snotify object\n   */\n  @TransformArgument\n  /**\n   * Determines current toast type and collects default configuration\n   */\n  @SetToastType\n  prompt(args: any): SnotifyToast {\n    return this.create(args);\n  }\n\n  /**\n   * Creates async toast with Info style. Pass action, and resolve or reject it.\n   * @param body string\n   * @param action Promise<Snotify> | Observable<Snotify>\n   * @returns number\n   */\n  async(body: string, action: Promise<Snotify> | Observable<Snotify>): SnotifyToast;\n  /**\n   * Creates async toast with Info style. Pass action, and resolve or reject it.\n   * @param body string\n   * @param title string\n   * @param action Promise<Snotify> | Observable<Snotify>\n   * @returns number\n   */\n  async(body: string, title: string, action: Promise<Snotify> | Observable<Snotify>): SnotifyToast;\n  /**\n   * Creates async toast with Info style. Pass action, and resolve or reject it.\n   * @param body string\n   * @param action Promise<Snotify> | Observable<Snotify>\n   * @param [config] SnotifyToastConfig\n   * @returns number\n   */\n  async(body: string, action: Promise<Snotify> | Observable<Snotify>, config: SnotifyToastConfig): SnotifyToast;\n  /**\n   * Creates async toast with Info style. Pass action, and resolve or reject it.\n   * @param body string\n   * @param title string\n   * @param action Promise<Snotify> | Observable<Snotify>\n   * @param [config] SnotifyToastConfig\n   * @returns number\n   */\n  async(\n    body: string,\n    title: string,\n    action: Promise<Snotify> | Observable<Snotify>,\n    config: SnotifyToastConfig\n  ): SnotifyToast;\n  /**\n   * Transform toast arguments into Snotify object\n   */\n  @TransformArgument\n  /**\n   * Determines current toast type and collects default configuration\n   */\n  @SetToastType\n  async(args: any): SnotifyToast {\n    let async: Observable<any>;\n    if (args.action instanceof Promise) {\n      async = from(args.action);\n    } else {\n      async = args.action;\n    }\n\n    const toast = this.create(args);\n\n    toast.on('mounted', () => {\n      const subscription: Subscription = async.subscribe(\n        (next?: Snotify) => {\n          this.mergeToast(toast, next);\n        },\n        (error?: Snotify) => {\n          this.mergeToast(toast, error, SnotifyStyle.error);\n          subscription.unsubscribe();\n        },\n        () => {\n          this.mergeToast(toast, {}, SnotifyStyle.success);\n          subscription.unsubscribe();\n        }\n      );\n    });\n\n    return toast;\n  }\n\n  private mergeToast(toast, next, type?: SnotifyTypeType) {\n    if (next.body) {\n      toast.body = next.body;\n    }\n    if (next.title) {\n      toast.title = next.title;\n    }\n    if (type) {\n      toast.config = mergeDeep(toast.config, this.config.global, this.config.toast[type], { type }, next.config);\n    } else {\n      toast.config = mergeDeep(toast.config, next.config);\n    }\n    if (next.html) {\n      toast.config.html = next.html;\n    }\n    this.emit();\n    this.toastChanged.next(toast);\n  }\n\n  /**\n   * Creates empty toast with html string inside\n   * @param html string | SafeHtml\n   * @param config SnotifyToastConfig\n   * @returns number\n   */\n  html(html: string | SafeHtml, config?: SnotifyToastConfig): SnotifyToast {\n    return this.create({\n      title: null,\n      body: null,\n      config: {\n        ...config,\n        ...{ html }\n      }\n    });\n  }\n}\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\nimport { SnotifyService } from '../../services/snotify.service';\nimport { SnotifyToast } from '../../models/snotify-toast.model';\n\n@Component({\n  selector: 'ng-snotify-button',\n  templateUrl: './buttons.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None\n})\n\n/**\n * Buttons component\n */\nexport class ButtonsComponent {\n  /**\n   * Get buttons Array\n   */\n  @Input() toast: SnotifyToast;\n  constructor(private service: SnotifyService) {}\n\n  /**\n   * remove toast\n   */\n  remove() {\n    this.service.remove(this.toast.id);\n  }\n}\n","<div class=\"snotifyToast__buttons\">\n  <button\n    type=\"button\"\n    *ngFor=\"let button of toast.config.buttons\"\n    [ngClass]=\"{ 'snotifyToast__buttons--bold': button.bold }\"\n    (click)=\"button.action ? button.action(toast) : remove()\"\n  >\n    {{ button.text }}\n  </button>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'truncate'\n})\n\n/**\n * Truncate toast text pipe\n */\nexport class TruncatePipe implements PipeTransform {\n  transform(value: string, ...args: Array<any>): any {\n    let limit = 40;\n    let trail = '...';\n    if (args.length > 0) {\n      limit = args.length > 0 ? parseInt(args[0], 10) : limit;\n      trail = args.length > 1 ? args[1] : trail;\n    }\n\n    return value.length > limit ? value.substring(0, limit) + trail : value;\n  }\n}\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\nimport { SnotifyToast } from '../../models/snotify-toast.model';\n\n@Component({\n  selector: 'ng-snotify-prompt',\n  templateUrl: './prompt.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None\n})\n\n/**\n * Prompt component. Part of PROMPT type\n */\nexport class PromptComponent {\n  /**\n   * Get PROMPT placeholder\n   */\n  @Input() toast: SnotifyToast;\n  /**\n   * Is PROMPT focused\n   */\n  isPromptFocused = false;\n}\n","<span class=\"snotifyToast__input\" [ngClass]=\"{ 'snotifyToast__input--filled': isPromptFocused }\">\n  <input\n    (input)=\"toast.value = $event.target.value; toast.eventEmitter.next('input')\"\n    autofocus\n    class=\"snotifyToast__input__field\"\n    type=\"text\"\n    [id]=\"toast.id\"\n    (focus)=\"isPromptFocused = true\"\n    (blur)=\"isPromptFocused = !!toast.value.length\"\n  />\n  <label class=\"snotifyToast__input__label\" [for]=\"toast.id\">\n    <span class=\"snotifyToast__input__labelContent\">{{ toast.config.placeholder | truncate }}</span>\n  </label>\n</span>\n","/**\n * Toast position\n */\nexport enum SnotifyPosition {\n  leftTop = 'leftTop',\n  leftCenter = 'leftCenter',\n  leftBottom = 'leftBottom',\n  rightTop = 'rightTop',\n  rightCenter = 'rightCenter',\n  rightBottom = 'rightBottom',\n  centerTop = 'centerTop',\n  centerCenter = 'centerCenter',\n  centerBottom = 'centerBottom'\n}\n","import {\n  AfterContentInit,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewEncapsulation\n} from '@angular/core';\nimport { SnotifyService } from '../../services/snotify.service';\nimport { SnotifyToast } from '../../models/snotify-toast.model';\nimport { Subscription } from 'rxjs';\nimport { SnotifyEventType } from '../../types/snotify-event.type';\nimport { SnotifyStyle } from '../../enums/snotify-style.enum';\n\n@Component({\n  selector: 'ng-snotify-toast',\n  templateUrl: './toast.component.html',\n  encapsulation: ViewEncapsulation.None\n})\nexport class ToastComponent implements OnInit, OnDestroy, AfterContentInit {\n  /**\n   * Get toast from notifications array\n   */\n  @Input() toast: SnotifyToast;\n  @Output() stateChanged = new EventEmitter<SnotifyEventType>();\n\n  toastDeletedSubscription: Subscription;\n  toastChangedSubscription: Subscription;\n\n  /**\n   * requestAnimationFrame id\n   */\n  animationFrame: number;\n\n  /**\n   * Toast state\n   */\n  state = {\n    paused: false,\n    progress: 0,\n    animation: '',\n    isDestroying: false,\n    promptType: SnotifyStyle.prompt\n  };\n\n  constructor(private service: SnotifyService) {}\n\n  // Lifecycles\n\n  /**\n   * Init base options. Subscribe to toast changed, toast deleted\n   */\n  ngOnInit() {\n    this.toastChangedSubscription = this.service.toastChanged.subscribe((toast: SnotifyToast) => {\n      if (this.toast.id === toast.id) {\n        this.initToast();\n      }\n    });\n    this.toastDeletedSubscription = this.service.toastDeleted.subscribe(id => {\n      if (this.toast.id === id) {\n        this.onRemove();\n      }\n    });\n    if (!this.toast.config.timeout) {\n      this.toast.config.showProgressBar = false;\n    }\n    this.toast.eventEmitter.next('mounted');\n    this.state.animation = 'snotifyToast--in';\n  }\n\n  ngAfterContentInit() {\n    setTimeout(() => {\n      this.stateChanged.emit('beforeShow');\n      this.toast.eventEmitter.next('beforeShow');\n      this.state.animation = this.toast.config.animation.enter;\n    }, this.service.config.toast.animation.time / 5); // time to show toast push animation (snotifyToast--in)\n  }\n\n  /**\n   * Unsubscribe subscriptions\n   */\n  ngOnDestroy(): void {\n    cancelAnimationFrame(this.animationFrame);\n    this.toast.eventEmitter.next('destroyed');\n    this.toastChangedSubscription.unsubscribe();\n    this.toastDeletedSubscription.unsubscribe();\n  }\n\n  /*\n  Event hooks\n   */\n\n  /**\n   * Trigger OnClick lifecycle\n   */\n  onClick() {\n    this.toast.eventEmitter.next('click');\n    if (this.toast.config.closeOnClick) {\n      this.service.remove(this.toast.id);\n    }\n  }\n\n  /**\n   * Trigger beforeDestroy lifecycle. Removes toast\n   */\n  onRemove() {\n    this.state.isDestroying = true;\n    this.toast.eventEmitter.next('beforeHide');\n    this.stateChanged.emit('beforeHide');\n    this.state.animation = this.toast.config.animation.exit;\n    setTimeout(() => {\n      this.stateChanged.emit('hidden');\n      this.state.animation = 'snotifyToast--out';\n      this.toast.eventEmitter.next('hidden');\n      setTimeout(() => this.service.remove(this.toast.id, true), this.toast.config.animation.time / 2);\n    }, this.toast.config.animation.time / 2);\n  }\n\n  /**\n   * Trigger onHoverEnter lifecycle\n   */\n  onMouseEnter() {\n    this.toast.eventEmitter.next('mouseenter');\n    if (this.toast.config.pauseOnHover) {\n      this.state.paused = true;\n    }\n  }\n\n  /**\n   * Trigger onHoverLeave lifecycle\n   */\n  onMouseLeave() {\n    if (this.toast.config.pauseOnHover && this.toast.config.timeout) {\n      this.state.paused = false;\n      this.startTimeout(this.toast.config.timeout * this.state.progress);\n    }\n    this.toast.eventEmitter.next('mouseleave');\n  }\n\n  /**\n   * Remove toast completely after animation\n   */\n  onExitTransitionEnd() {\n    if (this.state.isDestroying) {\n      return;\n    }\n    this.initToast();\n    this.toast.eventEmitter.next('shown');\n  }\n\n  /*\n   Common\n   */\n\n  /**\n   * Initialize base toast config\n   *\n   */\n  initToast(): void {\n    if (this.toast.config.timeout > 0) {\n      this.startTimeout(0);\n    }\n  }\n\n  /**\n   * Start progress bar\n   * @param startTime number\n   */\n  startTimeout(startTime: number = 0) {\n    const start = performance.now();\n    const calculate = () => {\n      this.animationFrame = requestAnimationFrame(timestamp => {\n        const runtime = timestamp + startTime - start;\n        const progress = Math.min(runtime / this.toast.config.timeout, 1);\n        if (this.state.paused) {\n          cancelAnimationFrame(this.animationFrame);\n        } else if (runtime < this.toast.config.timeout) {\n          this.state.progress = progress;\n          calculate();\n        } else {\n          this.state.progress = 1;\n          cancelAnimationFrame(this.animationFrame);\n          this.service.remove(this.toast.id);\n        }\n      });\n    };\n    calculate();\n  }\n}\n","<div\n  [attr.role]=\"toast.config.type === state.promptType ? 'dialog' : 'alert'\"\n  [attr.aria-labelledby]=\"'snotify_' + toast.id\"\n  [attr.aria-modal]=\"toast.config.type === state.promptType\"\n  [ngClass]=\"[\n    'snotifyToast animated',\n    'snotify-' + toast.config.type,\n    state.animation,\n    toast.valid === undefined ? '' : toast.valid ? 'snotifyToast--valid' : 'snotifyToast--invalid'\n  ]\"\n  [ngStyle]=\"{\n    '-webkit-transition': toast.config.animation.time + 'ms',\n    transition: toast.config.animation.time + 'ms',\n    '-webkit-animation-duration': toast.config.animation.time + 'ms',\n    'animation-duration': toast.config.animation.time + 'ms'\n  }\"\n  (animationend)=\"onExitTransitionEnd()\"\n  (click)=\"onClick()\"\n  (mouseenter)=\"onMouseEnter()\"\n  (mouseleave)=\"onMouseLeave()\"\n>\n  <div class=\"snotifyToast__progressBar\" *ngIf=\"toast.config.showProgressBar\">\n    <span class=\"snotifyToast__progressBar__percentage\" [ngStyle]=\"{ width: state.progress * 100 + '%' }\"></span>\n  </div>\n  <div class=\"snotifyToast__inner\" *ngIf=\"!toast.config.html; else toastHTML\">\n    <div class=\"snotifyToast__title\" [attr.id]=\"'snotify_' + toast.id\" *ngIf=\"toast.title\">\n      {{ toast.title | truncate: toast.config.titleMaxLength }}\n    </div>\n    <div class=\"snotifyToast__body\" *ngIf=\"toast.body\">{{ toast.body | truncate: toast.config.bodyMaxLength }}</div>\n    <ng-snotify-prompt *ngIf=\"toast.config.type === state.promptType\" [toast]=\"toast\"> </ng-snotify-prompt>\n    <div\n      *ngIf=\"!toast.config.icon; else elseBlock\"\n      [ngClass]=\"['snotify-icon', toast.config.iconClass || 'snotify-icon--' + toast.config.type]\"\n    ></div>\n    <ng-template #elseBlock>\n      <img class=\"snotify-icon\" [src]=\"toast.config.icon\" />\n    </ng-template>\n  </div>\n  <ng-template #toastHTML>\n    <div class=\"snotifyToast__inner\" [innerHTML]=\"toast.config.html\"></div>\n  </ng-template>\n  <ng-snotify-button *ngIf=\"toast.config.buttons\" [toast]=\"toast\"></ng-snotify-button>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'keys',\n  pure: false\n})\n/**\n * Extract object keys pipe\n */\nexport class KeysPipe implements PipeTransform {\n  transform(value: any, args: any[] = null): any {\n    if (!value) {\n      return value;\n    }\n    return Object.keys(value);\n  }\n}\n","import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\nimport { SnotifyService } from '../../services/snotify.service';\nimport { SnotifyToast } from '../../models/snotify-toast.model';\nimport { Subscription } from 'rxjs';\nimport { SnotifyNotifications } from '../../interfaces/snotify-notifications.interface';\nimport { SnotifyPosition } from '../../enums/snotify-position.enum';\nimport { SnotifyEventType } from '../../types/snotify-event.type';\n\n@Component({\n  selector: 'ng-snotify',\n  templateUrl: './snotify.component.html',\n  encapsulation: ViewEncapsulation.None\n})\nexport class SnotifyComponent implements OnInit, OnDestroy {\n  /**\n   * Toasts array\n   */\n  notifications: SnotifyNotifications;\n  /**\n   * Toasts emitter\n   */\n  emitter: Subscription;\n  /**\n   * Helper for slice pipe (maxOnScreen)\n   */\n  dockSizeA: number;\n  /**\n   * Helper for slice pipe (maxOnScreen)\n   */\n  dockSizeB: number | undefined;\n  /**\n   * Helper for slice pipe (maxAtPosition)\n   */\n  blockSizeA: number;\n  /**\n   * Helper for slice pipe (maxAtPosition)\n   */\n  blockSizeB: number | undefined;\n  /**\n   * Backdrop Opacity\n   */\n  backdrop = -1;\n  /**\n   * How many toasts with backdrop in current queue\n   */\n  withBackdrop: SnotifyToast[];\n\n  constructor(private service: SnotifyService) {}\n\n  /**\n   * Init base options. Subscribe to options, lifecycle change\n   */\n  ngOnInit() {\n    this.emitter = this.service.emitter.subscribe((toasts: SnotifyToast[]) => {\n      if (this.service.config.global.newOnTop) {\n        this.dockSizeA = -this.service.config.global.maxOnScreen;\n        this.dockSizeB = undefined;\n        this.blockSizeA = -this.service.config.global.maxAtPosition;\n        this.blockSizeB = undefined;\n        this.withBackdrop = toasts.filter(toast => toast.config.backdrop >= 0);\n      } else {\n        this.dockSizeA = 0;\n        this.dockSizeB = this.service.config.global.maxOnScreen;\n        this.blockSizeA = 0;\n        this.blockSizeB = this.service.config.global.maxAtPosition;\n        this.withBackdrop = toasts.filter(toast => toast.config.backdrop >= 0).reverse();\n      }\n      this.notifications = this.splitToasts(toasts.slice(this.dockSizeA, this.dockSizeB));\n      this.stateChanged('mounted');\n    });\n  }\n\n  // TODO: fix backdrop if more than one toast called in a row\n  /**\n   * Changes the backdrop opacity\n   * @param event SnotifyEventType\n   */\n  stateChanged(event: SnotifyEventType) {\n    if (!this.withBackdrop.length) {\n      if (this.backdrop >= 0) {\n        this.backdrop = -1;\n      }\n      return;\n    }\n    switch (event) {\n      case 'mounted':\n        if (this.backdrop < 0) {\n          this.backdrop = 0;\n        }\n        break;\n      case 'beforeShow':\n        this.backdrop = this.withBackdrop[this.withBackdrop.length - 1].config.backdrop;\n        break;\n      case 'beforeHide':\n        if (this.withBackdrop.length === 1) {\n          this.backdrop = 0;\n        }\n        break;\n      case 'hidden':\n        if (this.withBackdrop.length === 1) {\n          this.backdrop = -1;\n        }\n        break;\n    }\n  }\n\n  /**\n   * Split toasts toasts into different objects\n   * @param toasts SnotifyToast[]\n   * @returns SnotifyNotifications\n   */\n  splitToasts(toasts: SnotifyToast[]): SnotifyNotifications {\n    const result: SnotifyNotifications = {};\n\n    for (const property in SnotifyPosition) {\n      if (SnotifyPosition.hasOwnProperty(property)) {\n        result[SnotifyPosition[property]] = [];\n      }\n    }\n\n    toasts.forEach((toast: SnotifyToast) => {\n      result[toast.config.position as string].push(toast);\n    });\n\n    return result;\n  }\n\n  /**\n   * Unsubscribe subscriptions\n   */\n  ngOnDestroy() {\n    this.emitter.unsubscribe();\n  }\n}\n","<div class=\"snotify-backdrop\" *ngIf=\"backdrop >= 0\" [style.opacity]=\"backdrop\"></div>\n<div *ngFor=\"let position of notifications | keys\" class=\"snotify snotify-{{ position }}\">\n  <ng-snotify-toast\n    *ngFor=\"let notification of notifications[position] | slice: blockSizeA:blockSizeB\"\n    [toast]=\"notification\"\n    (stateChanged)=\"stateChanged($event)\"\n  >\n  </ng-snotify-toast>\n</div>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { SnotifyComponent } from './components/snotify/snotify.component';\nimport { SnotifyService } from './services/snotify.service';\nimport { KeysPipe } from './pipes/keys.pipe';\nimport { TruncatePipe } from './pipes/truncate.pipe';\nimport { CommonModule } from '@angular/common';\nimport { ButtonsComponent } from './components/buttons/buttons.component';\nimport { PromptComponent } from './components/prompt/prompt.component';\nimport { ToastComponent } from './components/toast/toast.component';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [SnotifyComponent, ToastComponent, TruncatePipe, ButtonsComponent, PromptComponent, KeysPipe],\n  exports: [SnotifyComponent, TruncatePipe, KeysPipe]\n})\nexport class SnotifyModule {\n  static forRoot(): ModuleWithProviders<SnotifyModule> {\n    return {\n      ngModule: SnotifyModule,\n      providers: [SnotifyService]\n    };\n  }\n}\n","import { SnotifyPosition } from './enums/snotify-position.enum';\nimport { SnotifyStyle } from './enums/snotify-style.enum';\n\n/**\n * Snotify default configuration object\n */\nexport const ToastDefaults = {\n  global: {\n    newOnTop: true,\n    maxOnScreen: 8,\n    maxAtPosition: 8,\n    filterDuplicates: false\n  },\n  toast: {\n    type: SnotifyStyle.simple,\n    showProgressBar: true,\n    timeout: 2000,\n    closeOnClick: true,\n    pauseOnHover: true,\n    bodyMaxLength: 150,\n    titleMaxLength: 16,\n    backdrop: -1,\n    icon: null,\n    iconClass: null,\n    html: null,\n    position: SnotifyPosition.rightBottom,\n    animation: { enter: 'fadeIn', exit: 'fadeOut', time: 400 }\n  },\n  type: {\n    [SnotifyStyle.prompt]: {\n      timeout: 0,\n      closeOnClick: false,\n      buttons: [\n        { text: 'Ok', action: null, bold: true },\n        { text: 'Cancel', action: null, bold: false }\n      ],\n      placeholder: 'Enter answer here...',\n      type: SnotifyStyle.prompt\n    },\n    [SnotifyStyle.confirm]: {\n      timeout: 0,\n      closeOnClick: false,\n      buttons: [\n        { text: 'Ok', action: null, bold: true },\n        { text: 'Cancel', action: null, bold: false }\n      ],\n      type: SnotifyStyle.confirm\n    },\n    [SnotifyStyle.simple]: {\n      type: SnotifyStyle.simple\n    },\n    [SnotifyStyle.success]: {\n      type: SnotifyStyle.success\n    },\n    [SnotifyStyle.error]: {\n      type: SnotifyStyle.error\n    },\n    [SnotifyStyle.warning]: {\n      type: SnotifyStyle.warning\n    },\n    [SnotifyStyle.info]: {\n      type: SnotifyStyle.info\n    },\n    [SnotifyStyle.async]: {\n      pauseOnHover: false,\n      closeOnClick: false,\n      timeout: 0,\n      showProgressBar: false,\n      type: SnotifyStyle.async\n    }\n  }\n};\n","/*\n * Public API Surface of ng-snotify\n */\n\nexport * from './lib/components';\nexport * from './lib/enums';\nexport * from './lib/interfaces';\nexport * from './lib/models';\nexport * from './lib/pipes';\nexport * from './lib/services';\nexport * from './lib/snotify.module';\nexport * from './lib/toast-defaults';\nexport * from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;AAAA;;;IAGY;AAAZ,WAAY,YAAY;IACtB,iCAAiB,CAAA;IACjB,mCAAmB,CAAA;IACnB,+BAAe,CAAA;IACf,mCAAmB,CAAA;IACnB,6BAAa,CAAA;IACb,+BAAe,CAAA;IACf,mCAAmB,CAAA;IACnB,iCAAiB,CAAA;AACnB,CAAC,EATW,YAAY,KAAZ,YAAY;;ACCxB;;;;;;;SAOgB,iBAAiB,CAAC,MAAW,EAAE,WAA4B,EAAE,UAA8B;IACzG,IAAI,WAAW,KAAK,YAAY,CAAC,KAAK,EAAE;QACtC,OAAO;YACL,KAAK,CAAC,GAAG,IAAW;gBAClB,IAAI,MAAM,CAAC;gBACX,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;oBACrB,MAAM,GAAG;wBACP,KAAK,EAAE,IAAI;wBACX,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;wBACb,MAAM,EAAE,IAAI;wBACZ,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;qBAChB,CAAC;iBACH;qBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC5B,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;wBAC/B,MAAM,GAAG;4BACP,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;4BACd,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;4BACb,MAAM,EAAE,IAAI;4BACZ,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;yBAChB,CAAC;qBACH;yBAAM;wBACL,MAAM,GAAG;4BACP,KAAK,EAAE,IAAI;4BACX,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;4BACb,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;4BACf,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;yBAChB,CAAC;qBACH;iBACF;qBAAM;oBACL,MAAM,GAAG;wBACP,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;wBACd,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;wBACb,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;wBACf,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;qBAChB,CAAC;iBACH;gBACD,OAAO,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAiB,CAAC,CAAC,CAAC;aAC1D;SACF,CAAC;KACH;SAAM;QACL,OAAO;YACL,KAAK,CAAC,GAAG,IAAW;gBAClB,IAAI,MAAM,CAAC;gBACX,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;oBACrB,MAAM,GAAG;wBACP,KAAK,EAAE,IAAI;wBACX,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;wBACb,MAAM,EAAE,IAAI;qBACb,CAAC;iBACH;qBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC5B,MAAM,GAAG;wBACP,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;wBACd,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;wBACb,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;qBAChB,CAAC;iBACH;qBAAM;oBACL,MAAM,GAAG;wBACP,KAAK,EAAE,IAAI;wBACX,MAAM,EAAE,IAAI;wBACZ,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;wBACb,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;qBAC5D,CAAC;iBACH;gBACD,OAAO,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAiB,CAAC,CAAC,CAAC;aAC1D;SACF,CAAC;KACH;AACH;;AC9EA;;;;SAIgB,IAAI;IAClB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;SAKgB,QAAQ,CAAC,IAAI;IAC3B,OAAO,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC;AAED;;;;;SAKgB,SAAS,CAAC,GAAG,OAAO;IAClC,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACnB,OAAO,MAAM,CAAC;KACf;IAED,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QACzB,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;YACpB,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;gBACxB,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;oBACzB,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;iBACnD;qBAAM;oBACL,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;iBAC/C;aACF;SACF;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;SAEe,OAAO,CAAC,KAAa,EAAE,QAAgB,EAAE,QAAwD;IAC/G,IAAI,OAAO,CAAC;IACZ,qBAAqB,CAAC,SAAS,KAAK,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG;QAChB,qBAAqB,CAAC,SAAS;YAC7B,MAAM,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,QAAQ,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;YACzD,IAAI,OAAO,GAAG,QAAQ,EAAE;gBACtB,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE;oBACpD,SAAS,EAAE,CAAC;iBACb;aACF;SACF,CAAC,CAAC;KACJ,CAAC;AACJ;;ACtDA;;;;;;;SAOgB,YAAY,CAAC,MAAW,EAAE,WAA4B,EAAE,UAA8B;IACpG,OAAO;QACL,KAAK,CAAC,GAAG,IAAW;YACjB,IAAI,CAAC,CAAC,CAAa,CAAC,MAAM,mCACrB,IAAI,CAAC,CAAC,CAAa,CAAC,MAAM,KAC9B,IAAI,EAAE,WAAW,GAClB,CAAC;YACF,OAAO,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SAC3C;KACF,CAAC;AACJ;;AChBA;AACA;;;MAGa,YAAY;IAiBvB,YAAmB,EAAU,EAAS,KAAa,EAAS,IAAY,EAAS,MAA0B;QAAxF,OAAE,GAAF,EAAE,CAAQ;QAAS,UAAK,GAAL,KAAK,CAAQ;QAAS,SAAI,GAAJ,IAAI,CAAQ;QAAS,WAAM,GAAN,MAAM,CAAoB;;;;QAblG,iBAAY,GAAG,IAAI,OAAO,EAAoB,CAAC;;;;QAIhD,iBAAY,GAAmB,EAAE,CAAC;QAUxC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,MAAM,EAAE;YAC5C,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;SACjB;QACD,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;YAChB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,YAA0B;gBACnD,YAAY,CAAC,WAAW,EAAE,CAAC;aAC5B,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ;;;;;;;IAQD,EAAE,CAAC,KAAuB,EAAE,MAA6B;QACvD,IAAI,CAAC,YAAY,CAAC,IAAI,CACpB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAmB;YAC9C,IAAI,CAAC,KAAK,KAAK,EAAE;gBACf,MAAM,CAAC,IAAI,CAAC,CAAC;aACd;SACF,CAAC,CACH,CAAC;QACF,OAAO,IAAI,CAAC;KACb;;;;;;IAOD,MAAM,CAAC,KAAmB;QACxB,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;KACzG;;;AC/CH;;;AAIA;MACa,cAAc;IAMzB,YAAiD,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;QAL/D,YAAO,GAAG,IAAI,OAAO,EAAkB,CAAC;QACxC,iBAAY,GAAG,IAAI,OAAO,EAAgB,CAAC;QAC3C,iBAAY,GAAG,IAAI,OAAO,EAAU,CAAC;QACtC,kBAAa,GAAmB,EAAE,CAAC;KAEiC;;;;IAIpE,IAAI;QACV,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;KAC/C;;;;;;IAOD,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;KAC1D;;;;;IAMO,GAAG,CAAC,KAAmB;QAC7B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;YACpE,OAAO;SACR;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;YAC/B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACnC;aAAM;YACL,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAChC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;KACb;;;;;;IAOO,aAAa,CAAC,OAAqB;QACzC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;KAChE;;;;;;IAOD,MAAM,CAAC,EAAW,EAAE,MAAgB;QAClC,IAAI,CAAC,EAAE,EAAE;YACP,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;SACrB;aAAM,IAAI,MAAM,EAAE;YACjB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;SACpB;QACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAC5B;;;;IAKD,KAAK;QACH,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,EAAE,CAAC;KACb;;;;;;IAOD,MAAM,CAAC,OAAgB;QACrB,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACnG,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5E,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,OAAO,KAAK,CAAC;KACd;IAED,WAAW,CAAC,QAAyB;QACnC,QAAQ,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAoB,EAAE;KAC5E;;;;IAsCD,MAAM,CAAC,IAAS;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAC1B;;;;IAsCD,OAAO,CAAC,IAAS;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAC1B;;;;IAsCD,KAAK,CAAC,IAAS;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAC1B;;;;IAsCD,IAAI,CAAC,IAAS;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAC1B;;;;IAsCD,OAAO,CAAC,IAAS;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAC1B;;;;IAsCD,OAAO,CAAC,IAAS;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAC1B;;;;IAsCD,MAAM,CAAC,IAAS;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAC1B;;;;IA+CD,KAAK,CAAC,IAAS;QACb,IAAI,KAAsB,CAAC;QAC3B,IAAI,IAAI,CAAC,MAAM,YAAY,OAAO,EAAE;YAClC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC3B;aAAM;YACL,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;SACrB;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEhC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE;YAClB,MAAM,YAAY,GAAiB,KAAK,CAAC,SAAS,CAChD,CAAC,IAAc;gBACb,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;aAC9B,EACD,CAAC,KAAe;gBACd,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;gBAClD,YAAY,CAAC,WAAW,EAAE,CAAC;aAC5B,EACD;gBACE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;gBACjD,YAAY,CAAC,WAAW,EAAE,CAAC;aAC5B,CACF,CAAC;SACH,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;KACd;IAEO,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,IAAsB;QACpD,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;SACxB;QACD,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;SAC1B;QACD,IAAI,IAAI,EAAE;YACR,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;SAC5G;aAAM;YACL,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;SACrD;QACD,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;SAC/B;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/B;;;;;;;IAQD,IAAI,CAAC,IAAuB,EAAE,MAA2B;QACvD,OAAO,IAAI,CAAC,MAAM,CAAC;YACjB,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,IAAI;YACV,MAAM,kCACD,MAAM,GACN,EAAE,IAAI,EAAE,CACZ;SACF,CAAC,CAAC;KACJ;;2GA3dU,cAAc,kBAML,oBAAoB;+GAN7B,cAAc;AA2HzB;IALC,iBAAiB;;;;;IAIjB,YAAY;4CAGZ;AAsCD;IALC,iBAAiB;;;;;IAIjB,YAAY;6CAGZ;AAsCD;IALC,iBAAiB;;;;;IAIjB,YAAY;2CAGZ;AAsCD;IALC,iBAAiB;;;;;IAIjB,YAAY;0CAGZ;AAsCD;IALC,iBAAiB;;;;;IAIjB,YAAY;6CAGZ;AAsCD;IALC,iBAAiB;;;;;IAIjB,YAAY;6CAGZ;AAsCD;IALC,iBAAiB;;;;;IAIjB,YAAY;4CAGZ;AA+CD;IALC,iBAAiB;;;;;IAIjB,YAAY;2CA4BZ;2FAvbU,cAAc;kBAF1B,UAAU;;;8BAQI,MAAM;+BAAC,oBAAoB;;yBAqHxC,MAAM,MAwCN,OAAO,MAwCP,KAAK,MAwCL,IAAI,MAwCJ,OAAO,MAwCP,OAAO,MAwCP,MAAM,MAiDN,KAAK;;ACnaP;;;MAGa,gBAAgB;IAK3B,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;KAAI;;;;IAK/C,MAAM;QACJ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;KACpC;;6GAZU,gBAAgB;iGAAhB,gBAAgB,qFCd7B,gTAUA;2FDIa,gBAAgB;kBAV5B,SAAS;+BACE,mBAAmB,mBAEZ,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI;kGAU5B,KAAK;sBAAb,KAAK;;;AEZR;;;MAGa,YAAY;IACvB,SAAS,CAAC,KAAa,EAAE,GAAG,IAAgB;QAC1C,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACnB,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;YACxD,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;SAC3C;QAED,OAAO,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;KACzE;;yGAVU,YAAY;uGAAZ,YAAY;2FAAZ,YAAY;kBAPxB,IAAI;mBAAC;oBACJ,IAAI,EAAE,UAAU;iBACjB;;;ACMD;;;MAGa,eAAe;IAV5B;;;;QAkBE,oBAAe,GAAG,KAAK,CAAC;KACzB;;4GATY,eAAe;gGAAf,eAAe,qFCb5B,glBAcA;2FDDa,eAAe;kBAV3B,SAAS;+BACE,mBAAmB,mBAEZ,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI;8BAU5B,KAAK;sBAAb,KAAK;;;AEjBR;;;IAGY;AAAZ,WAAY,eAAe;IACzB,sCAAmB,CAAA;IACnB,4CAAyB,CAAA;IACzB,4CAAyB,CAAA;IACzB,wCAAqB,CAAA;IACrB,8CAA2B,CAAA;IAC3B,8CAA2B,CAAA;IAC3B,0CAAuB,CAAA;IACvB,gDAA6B,CAAA;IAC7B,gDAA6B,CAAA;AAC/B,CAAC,EAVW,eAAe,KAAf,eAAe;;MCkBd,cAAc;IA0BzB,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;QArBjC,iBAAY,GAAG,IAAI,YAAY,EAAoB,CAAC;;;;QAa9D,UAAK,GAAG;YACN,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,EAAE;YACb,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,YAAY,CAAC,MAAM;SAChC,CAAC;KAE6C;;;;;IAO/C,QAAQ;QACN,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAmB;YACtF,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE;gBAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;aAClB;SACF,CAAC,CAAC;QACH,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE;YACpE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE;gBACxB,IAAI,CAAC,QAAQ,EAAE,CAAC;aACjB;SACF,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;YAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC;SAC3C;QACD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,kBAAkB,CAAC;KAC3C;IAED,kBAAkB;QAChB,UAAU,CAAC;YACT,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;SAC1D,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;KAClD;;;;IAKD,WAAW;QACT,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,CAAC;KAC7C;;;;;;;IASD,OAAO;QACL,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;SACpC;KACF;;;;IAKD,QAAQ;QACN,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QACxD,UAAU,CAAC;YACT,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,mBAAmB,CAAC;YAC3C,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvC,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;SAClG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;KAC1C;;;;IAKD,YAAY;QACV,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE;YAClC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;SAC1B;KACF;;;;IAKD,YAAY;QACV,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;YAC/D,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SACpE;QACD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KAC5C;;;;IAKD,mBAAmB;QACjB,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;YAC3B,OAAO;SACR;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACvC;;;;;;;;IAUD,SAAS;QACP,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE;YACjC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;SACtB;KACF;;;;;IAMD,YAAY,CAAC,YAAoB,CAAC;QAChC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG;YAChB,IAAI,CAAC,cAAc,GAAG,qBAAqB,CAAC,SAAS;gBACnD,MAAM,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC;gBAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAClE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;oBACrB,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;iBAC3C;qBAAM,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;oBAC9C,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;oBAC/B,SAAS,EAAE,CAAC;iBACb;qBAAM;oBACL,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;oBACxB,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBAC1C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;iBACpC;aACF,CAAC,CAAC;SACJ,CAAC;QACF,SAAS,EAAE,CAAC;KACb;;2GAxKU,cAAc;+FAAd,cAAc,+HCrB3B,qhEA2CA;2FDtBa,cAAc;kBAL1B,SAAS;+BACE,kBAAkB,iBAEb,iBAAiB,CAAC,IAAI;kGAM5B,KAAK;sBAAb,KAAK;gBACI,YAAY;sBAArB,MAAM;;;AEpBT;;;MAGa,QAAQ;IACnB,SAAS,CAAC,KAAU,EAAE,OAAc,IAAI;QACtC,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,KAAK,CAAC;SACd;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;;qGANU,QAAQ;mGAAR,QAAQ;2FAAR,QAAQ;kBAPpB,IAAI;mBAAC;oBACJ,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,KAAK;iBACZ;;;MCQY,gBAAgB;IAkC3B,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;;;;QAN3C,aAAQ,GAAG,CAAC,CAAC,CAAC;KAMiC;;;;IAK/C,QAAQ;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAsB;YACnE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACvC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;gBACzD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;gBAC3B,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;gBAC5D,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;gBAC5B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;aACxE;iBAAM;gBACL,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;gBACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;gBACxD,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;gBACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;gBAC3D,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;aAClF;YACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACpF,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;SAC9B,CAAC,CAAC;KACJ;;;;;;IAOD,YAAY,CAAC,KAAuB;QAClC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAC7B,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE;gBACtB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;aACpB;YACD,OAAO;SACR;QACD,QAAQ,KAAK;YACX,KAAK,SAAS;gBACZ,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE;oBACrB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;iBACnB;gBACD,MAAM;YACR,KAAK,YAAY;gBACf,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAChF,MAAM;YACR,KAAK,YAAY;gBACf,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;oBAClC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;iBACnB;gBACD,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;oBAClC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;iBACpB;gBACD,MAAM;SACT;KACF;;;;;;IAOD,WAAW,CAAC,MAAsB;QAChC,MAAM,MAAM,GAAyB,EAAE,CAAC;QAExC,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE;YACtC,IAAI,eAAe,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;gBAC5C,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;aACxC;SACF;QAED,MAAM,CAAC,OAAO,CAAC,CAAC,KAAmB;YACjC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAkB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACrD,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;KACf;;;;IAKD,WAAW;QACT,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;KAC5B;;6GAvHU,gBAAgB;iGAAhB,gBAAgB,kDCb7B,8ZASA;2FDIa,gBAAgB;kBAL5B,SAAS;+BACE,YAAY,iBAEP,iBAAiB,CAAC,IAAI;;;MEI1B,aAAa;IACxB,OAAO,OAAO;QACZ,OAAO;YACL,QAAQ,EAAE,aAAa;YACvB,SAAS,EAAE,CAAC,cAAc,CAAC;SAC5B,CAAC;KACH;;0GANU,aAAa;2GAAb,aAAa,iBAHT,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,QAAQ,aADhG,YAAY,aAEZ,gBAAgB,EAAE,YAAY,EAAE,QAAQ;2GAEvC,aAAa,YAJf,CAAC,YAAY,CAAC;2FAIZ,aAAa;kBALzB,QAAQ;mBAAC;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,YAAY,EAAE,CAAC,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,QAAQ,CAAC;oBAC3G,OAAO,EAAE,CAAC,gBAAgB,EAAE,YAAY,EAAE,QAAQ,CAAC;iBACpD;;;ACXD;;;MAGa,aAAa,GAAG;IAC3B,MAAM,EAAE;QACN,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,CAAC;QACd,aAAa,EAAE,CAAC;QAChB,gBAAgB,EAAE,KAAK;KACxB;IACD,KAAK,EAAE;QACL,IAAI,EAAE,YAAY,CAAC,MAAM;QACzB,eAAe,EAAE,IAAI;QACrB,OAAO,EAAE,IAAI;QACb,YAAY,EAAE,IAAI;QAClB,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,GAAG;QAClB,cAAc,EAAE,EAAE;QAClB,QAAQ,EAAE,CAAC,CAAC;QACZ,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,eAAe,CAAC,WAAW;QACrC,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;KAC3D;IACD,IAAI,EAAE;QACJ,CAAC,YAAY,CAAC,MAAM,GAAG;YACrB,OAAO,EAAE,CAAC;YACV,YAAY,EAAE,KAAK;YACnB,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;gBACxC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE;aAC9C;YACD,WAAW,EAAE,sBAAsB;YACnC,IAAI,EAAE,YAAY,CAAC,MAAM;SAC1B;QACD,CAAC,YAAY,CAAC,OAAO,GAAG;YACtB,OAAO,EAAE,CAAC;YACV,YAAY,EAAE,KAAK;YACnB,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;gBACxC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE;aAC9C;YACD,IAAI,EAAE,YAAY,CAAC,OAAO;SAC3B;QACD,CAAC,YAAY,CAAC,MAAM,GAAG;YACrB,IAAI,EAAE,YAAY,CAAC,MAAM;SAC1B;QACD,CAAC,YAAY,CAAC,OAAO,GAAG;YACtB,IAAI,EAAE,YAAY,CAAC,OAAO;SAC3B;QACD,CAAC,YAAY,CAAC,KAAK,GAAG;YACpB,IAAI,EAAE,YAAY,CAAC,KAAK;SACzB;QACD,CAAC,YAAY,CAAC,OAAO,GAAG;YACtB,IAAI,EAAE,YAAY,CAAC,OAAO;SAC3B;QACD,CAAC,YAAY,CAAC,IAAI,GAAG;YACnB,IAAI,EAAE,YAAY,CAAC,IAAI;SACxB;QACD,CAAC,YAAY,CAAC,KAAK,GAAG;YACpB,YAAY,EAAE,KAAK;YACnB,YAAY,EAAE,KAAK;YACnB,OAAO,EAAE,CAAC;YACV,eAAe,EAAE,KAAK;YACtB,IAAI,EAAE,YAAY,CAAC,KAAK;SACzB;KACF;;;ACtEH;;;;ACAA;;;;;;"}