{"version":3,"file":"peyushx-chatbot-ai.mjs","sources":["../../../projects/chatbot-ai/src/lib/api.service.ts","../../../projects/chatbot-ai/src/lib/chatbot.service.ts","../../../projects/chatbot-ai/src/lib/auto-scroll.directive.ts","../../../projects/chatbot-ai/src/lib/component/chatbot.component.ts","../../../projects/chatbot-ai/src/lib/component/chatbot.component.html","../../../projects/chatbot-ai/src/lib/chatbot.module.ts","../../../projects/chatbot-ai/src/public-api.ts","../../../projects/chatbot-ai/src/peyushx-chatbot-ai.ts"],"sourcesContent":["import { Injectable, NgZone } from \"@angular/core\";\nimport {\n  HttpClient,\n  HttpRequest,\n  HttpHeaders,\n  HttpErrorResponse,\n} from \"@angular/common/http\";\nimport { Observable, throwError } from \"rxjs\";\nimport { tap } from \"rxjs/operators\";\nimport { Router } from \"@angular/router\";\nimport { has } from 'lodash-es';\n\n@Injectable({\n  providedIn: \"root\",\n})\nexport class ApiService {\n    private eventSource!: EventSource;\n\n  constructor(\n    private http: HttpClient, \n    public router: Router,\n    private ngZone: NgZone\n  ) {}\n\n  public post(url: string, data: any, options?: any): Observable<any> {\n    return this.http\n      .post(url, data, options)\n      .pipe(tap(this.handleSuccess, this.handleError));\n  }\n\n  public httpRequest(url: string, formData: any, options?: any) {\n    const header = new HttpHeaders({ upload: 'true' });\n    const req = new HttpRequest('POST', url, formData, {\n      headers: header,\n      reportProgress: true\n    });\n    return this.http\n      .request(req)\n      .pipe(tap(this.handleSuccess, this.handleError));\n  }\n\n  public connectEventStream(url: string, eventNames?: string[]): Observable<any> {\n    return new Observable(observer => {\n      this.eventSource = new EventSource(url);\n      if (!eventNames) {\n        eventNames = ['message','complete','error'];\n      }\n      eventNames.forEach(eventName => {\n        this.eventSource.addEventListener(eventName, (event: MessageEvent) => {\n          if (eventName === 'complete' || eventName === 'error') {\n            this.eventSource.close();\n          }\n          this.ngZone.run(() => {\n            let data = event.data;\n            if (data){\n              data = JSON.parse(data);\n            }\n            observer.next({ eventName, data: data });\n          });\n        });\n      });\n  \n      this.eventSource.onerror = (error) => {\n        this.ngZone.run(() => {\n          observer.error(error);\n          this.eventSource.close(); \n        });\n      };\n  \n      return () => this.eventSource.close(); \n    });\n  }\n\n  public disconnectEventStream(): void {\n    if (this.eventSource) {\n      this.eventSource.close();\n    }\n  }\n\n  private handleSuccess(result: any) {\n    return result;\n  }\n\n  private handleError(error: HttpErrorResponse) {\n    if (error.error instanceof ProgressEvent && error.error.type === 'error') {\n      console.log('Network error: Please check your internet connection.');\n    }\n\n    if (error.status === 401 || error.status === 403) {\n      console.log('Unauthorized access. Please login again.');\n    } else if (error.status === 400 && has(error, \"error.error_msg\")) {\n      console.error(error.error.error_msg);\n    } else if (error.status === 0) {\n      console.log('Network error: Please check your internet connection.');\n    } else {\n      let errorResponse = error?.error?.message || error?.error?.error || error?.error || error.message || \"Something went wrong. Please try again.\";\n      console.log(errorResponse);\n    }\n\n    return throwError(error);\n  }\n}","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { ApiService } from './api.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ChatbotService {\n\n  constructor(private apiService: ApiService) { }\n\n  /**\n   * BehaviorSubject to manage the open/close state of the chat window.\n   * Initialized to `false` meaning the chat is closed by default.\n   */\n  private chatOpenSubject = new BehaviorSubject<boolean>(false);\n\n  /**\n   * Observable that allows other components or services to react to changes in the chat window state.\n   * Emits a boolean value that represents whether the chat is open or closed.\n   */\n  chatOpen$ = this.chatOpenSubject.asObservable();\n\n  /**\n   * BehaviorSubject to store the initial message to be sent when the chat is opened.\n   * Holds the initial message along with a reference ID.\n   */\n  private initialMessageSubject = new BehaviorSubject<any | null>(null);\n\n  /**\n   * Observable that allows other parts of the application to listen for initial messages.\n   * Emits the initial message object containing both message content and reference ID.\n   */\n  initialMessage$ = this.initialMessageSubject.asObservable();\n\n  /**\n   * BehaviorSubject to indicate whether the bot is currently typing.\n   * Holds a boolean value where `true` indicates the bot is typing and `false` indicates it isn't.\n   */\n  private botTypingSubject = new BehaviorSubject<boolean>(false);\n\n  /**\n   * Observable that allows other parts of the application to track the bot's typing status.\n   * Emits a boolean value representing the typing state.\n   */\n  botTyping$ = this.botTypingSubject.asObservable();\n\n  /**\n   * BehaviorSubject to indicate whether the bot is currently generating a response.\n   * Holds a boolean value where `true` indicates a response is being generated.\n   */\n  private generateResponseSubject = new BehaviorSubject<boolean>(false);\n\n  /**\n   * Observable that allows other parts of the application to track if a response is being generated.\n   * Emits a boolean value representing the response generation status.\n   */\n  generateResponse$ = this.generateResponseSubject.asObservable();\n\n  /**\n   * Sets the status of whether the chatbot is generating a response.\n   * @param status A boolean indicating whether a response is currently being generated.\n   */\n  setGenerateResponse(status: boolean) {\n    this.generateResponseSubject.next(status);\n  }\n\n  /**\n   * Returns whether the chatbot is currently generating a response.\n   * @returns A boolean value where `true` means a response is being generated.\n   */\n  isGeneratingResponse(): boolean {\n    return this.generateResponseSubject.value;\n  }\n\n  /**\n   * Opens the chat window and sends an initial message.\n   * If the bot is not currently typing, this method opens the chat and sends the given message.\n   * @param message The initial message to be sent to the chatbot.\n   * @param referenceId A unique reference ID for the chat session or message.\n   */\n  openChatWithMessage(message: string, referenceId: number) {\n    if (!this.isBotTyping()) {\n      let object = {\n        \"referenceId\": referenceId,\n        \"message\": message\n      };\n      this.chatOpenSubject.next(true);\n      this.initialMessageSubject.next(object);\n      this.setGenerateResponse(true);\n    }\n  }\n\n  /**\n   * Sets the bot's typing status.\n   * @param status A boolean indicating whether the bot is typing.\n   */\n  setBotTyping(status: boolean) {\n    this.botTypingSubject.next(status);\n  }\n\n  /**\n   * Checks if the bot is currently typing or generating a response.\n   * @returns A boolean value where `true` means the bot is typing or generating a response.\n   */\n  isBotTyping(): boolean {\n    return this.botTypingSubject.value || this.generateResponseSubject.value;\n  }\n\n  /**\n   * Sends a request to generate a response from the chatbot.\n   * The payload is converted into a query string and sent to the API via a GET request.\n   * @param url The API endpoint to send the request to.\n   * @param payload The payload data to be sent as part of the request.\n   * @param events An array of event names to listen to during the API call.\n   * @returns An Observable that connects to the event stream from the API.\n   */\n  generateResponse(url: string, payload: any, events: string[]) {\n    const jsonString = JSON.stringify(payload);\n    const response = encodeURIComponent(jsonString);\n    url = url + \"?question=\" + response;\n    return this.apiService.connectEventStream(url, events);\n  }\n\n  /**\n   * Sends a POST request to fetch suggestions for the chatbot.\n   * @param url The API endpoint to send the request to.\n   * @param obj The payload data to be sent in the request body.\n   * @returns An Observable containing the response from the API.\n   */\n  getSuggestions(url: string, obj: any) {\n    return this.apiService.post(url, obj);\n  }\n}","  import { Directive, ElementRef, AfterViewChecked, HostListener } from '@angular/core';\n\n  @Directive({\n    selector: '[appAutoScroll]'\n  })\n  export class AutoScrollDirective implements AfterViewChecked {\n    private shouldScroll: boolean = true;\n\n    constructor(private el: ElementRef) {\n    }\n\n    ngAfterViewChecked() {\n      if (this.shouldScroll) {\n        this.el.nativeElement.scrollTop = this.el.nativeElement.scrollHeight;\n      }\n    }\n\n    private isUserNearBottom(): boolean {\n      const threshold = 3;\n      const position = this.el.nativeElement.scrollTop + this.el.nativeElement.offsetHeight;\n      const height = this.el.nativeElement.scrollHeight;\n      const nearBottom = position > height - threshold;\n      return nearBottom;\n    }\n\n    @HostListener('scroll')\n    onScroll() {\n      this.shouldScroll = this.isUserNearBottom();\n    }\n  }","import {\n  Component,\n  OnInit,\n  OnDestroy,\n  ElementRef,\n  ViewChild,\n  ChangeDetectorRef,\n  Input,\n  AfterViewInit,\n} from '@angular/core';\nimport {\n  trigger,\n  style,\n  transition,\n  animate,\n  query,\n  stagger,\n} from '@angular/animations';\nimport { ChatbotService } from '../chatbot.service';\nimport { Subscription, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Component({\n  selector: 'app-chatbot',\n  templateUrl: './chatbot.component.html',\n  styleUrls: ['./chatbot.component.scss'],\n  animations: [\n    trigger('fadeIn', [\n      transition(':enter', [\n        style({ opacity: 0 }),\n        animate('300ms', style({ opacity: 1 })),\n      ]),\n    ]),\n    trigger('fadeInOut', [\n      transition(':enter', [\n        style({ opacity: 0 }),\n        animate('300ms ease-in', style({ opacity: 1 })),\n      ]),\n      transition(':leave', [animate('300ms ease-out', style({ opacity: 0 }))]),\n    ]),\n    trigger('listAnimation', [\n      transition('* => *', [\n        query(\n          ':leave',\n          [stagger(100, [animate('350ms', style({ opacity: 0 }))])],\n          { optional: true }\n        ),\n      ]),\n    ]),\n  ],\n})\nexport class ChatbotComponent implements OnInit, OnDestroy,AfterViewInit {\n  /**\n   * @internal\n   */\n  @ViewChild('chatInput') private chatInput!: ElementRef;\n\n  /**\n   * Api for content streaming :: **Required* for Chatbot\n   * API DETAILS ::\n   *  --> SSE API for content streaming\n   *  --> PARAMS : question\n   * @type Input\n   */\n  @Input() suggestionApiUrl: string = '';\n\n\n  /**\n   * Api for suggestion questions\n   * API DETAILS ::\n   *  ---> POST API for suggestion questions\n   *  ---> OBJECT : { answer: string, referenceId: number, questionsAsked: string[] }\n   * @type Input\n   */\n  @Input() chatApiUrl: string = '';\n  /**\n   * User name to be displayed in chatbot\n   * @default Guest\n   * @type Input\n   */\n  @Input() userName: string = '';\n\n  /**\n   * Primary color for chatbot :: **Optional**\n   * @default #d9232d\n   * @type Input\n   */\n  @Input() primaryColor: string = '#d9232d';\n  /**\n   * Secondary color for chatbot :: **Optional**\n   * @default #ffeaea\n   * @type Input\n   */\n  @Input() secondaryColor: string = '#ffc1c1';\n  /**\n   * Suggestions for chatbot :: **Optional**\n   * @default : ['Add suggestion 1', 'Add suggestion 2', 'Add suggestion 3']\n   * @type Input\n   */\n  @Input() suggestions: string[] = [\n    'Add suggestion 1',\n    'Add suggestion 2',\n    'Add suggestion 3',\n  ];\n  /**\n   * Title for chatbot :: **Optional**\n   * @default Chatbot\n   * @type Input\n   */\n  @Input() chatBotTitle: string = 'Chatbot';\n  /**\n   * @internal\n   */\n  title = '';\n  /**\n   * @internal\n   */\n  subtitle = '';\n  /**\n   * @internal\n   */\n  referenceId: number = 0;\n  /**\n   * @internal\n   */\n  eventsToListen = ['action', 'action_status', 'complete', 'data'];\n  /**\n   * @internal\n   */\n  botMessages: string[] = [];\n  /**\n   * @internal\n   */\n  suggestionQuestions: string[] = [];\n  /**\n   * @internal\n   */\n  questionsAsked: string[] = [];\n  /**\n   * @internal\n   */\n  private fullTitle = '';\n  /**\n   * @internal\n   */\n  private fullSubtitle = 'How can I help you today?';\n  /**\n   * @internal\n   */\n  apiSubscription!: Subscription;\n  /**\n   * @internal\n   */\n  showSuggestionQuestions: boolean = false;\n  /**\n   * @internal\n   */\n  messages: { errorClass: boolean; role: string; parts: { text: string }[] }[] =\n    [];\n  /**\n   * @internal\n   */\n  sqlData: {\n    contents: {\n      errorClass: boolean;\n      role: string;\n      parts: { text: string }[];\n    }[];\n  } = { contents: [] };\n  /**\n   * @internal\n   */\n  newMessage: string = '';\n  /**\n   * @internal\n   */\n  isChatOpen: boolean = false;\n  /**\n   * @internal\n   */\n  isGeneratingResponse: boolean = false;\n  /**\n   * @internal\n   */\n  isTypingStopped: boolean = false;\n  /**\n   * @internal\n   */\n  private typingInterval: any;\n  /**\n   * @internal\n   */\n  showSuggestions: boolean = false;\n  /**\n   * @internal\n   */\n  private destroy$ = new Subject<void>();\n\n  /**\n   * @internal\n   */\n  constructor(\n    /**\n     * @internal\n     */\n    public chatbotService: ChatbotService,\n    /**\n     * @internal\n     */\n    private cdRef: ChangeDetectorRef\n  ) {}\n\n  /**\n   * OnInit lifecycle hook\n   * For Chatbot\n   */\n  ngOnInit() {\n    this.subscribeToObservables();\n    this.fullTitle = `Hello, ${this.userName || 'Guest'}`;\n  }\n\n  /**\n   * OnDestroy lifecycle hook\n   * For Chatbot\n   */\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  /**\n   * AfterViewInit lifecycle hook\n   * For Chatbot\n   */\n  ngAfterViewInit(): void {\n    this.applyCustomColors();\n  }\n\n  /**\n   * @internal\n   */\n  private subscribeToObservables() {\n    this.chatbotService.chatOpen$\n      .pipe(takeUntil(this.destroy$))\n      .subscribe((isOpen) => {\n        this.isChatOpen = isOpen;\n        if (isOpen) {\n          this.focusMessageInput();\n        }\n      });\n    this.chatbotService.initialMessage$\n      .pipe(takeUntil(this.destroy$))\n      .subscribe((message) => {\n        this.referenceId = message?.referenceId;\n        if (message?.message) {\n          this.messages = [];\n          this.messages.push({\n            errorClass: false,\n            role: 'user',\n            parts: [{ text: message.message }],\n          });\n\n          this.generate();\n        }\n      });\n  }\n\n  /**\n   * @internal\n   */\n  private applyCustomColors(): void {\n    let primaryColor = '#d9232d';\n    let secondaryColor = '#ffeaea';\n    if (this.primaryColor) {\n      primaryColor = this.primaryColor;\n    }\n    if (this.secondaryColor) {\n      secondaryColor = this.secondaryColor;\n    }\n    document.documentElement.style.setProperty('--primary-color', primaryColor);\n    document.documentElement.style.setProperty('--secondary-color',secondaryColor);\n  }\n  /**\n   * @internal\n   */\n  focusMessageInput(): void {\n    if (!this.chatInput || this.isChatOpen === undefined) {\n      return;\n    }\n    setTimeout(() => {\n      this.chatInput.nativeElement.focus();\n    }, 0);\n  }\n\n  /**\n   * @internal\n   */\n  private showTypingEffect(text: string) {\n    this.chatbotService.setBotTyping(true);\n    let index = 0;\n    const typingMessage = {\n      errorClass: false,\n      role: 'model',\n      parts: [{ text: '' }],\n    };\n\n    this.messages.push(typingMessage);\n    if (this.typingInterval) {\n      clearInterval(this.typingInterval);\n    }\n\n    this.typingInterval = setInterval(() => {\n      if (this.isTypingStopped) {\n        clearInterval(this.typingInterval);\n        return;\n      }\n\n      if (index <= text.length) {\n        typingMessage.parts[0].text = text.substring(0, index);\n        index++;\n        this.cdRef.detectChanges();\n      } else {\n        clearInterval(this.typingInterval);\n        typingMessage.parts[0].text = text;\n        this.chatbotService.setBotTyping(false);\n        this.isTypingStopped = false;\n        this.showSuggestionQuestions = true;\n        this.focusMessageInput();\n        this.cdRef.detectChanges();\n      }\n    }, Math.max(30, 100 / text.length));\n  }\n  /**\n   * @internal\n   */\n  stopMessage() {\n    if (this.isTypingStopped) {\n      return;\n    }\n\n    this.isTypingStopped = true;\n\n    if (this.typingInterval) {\n      clearInterval(this.typingInterval);\n    }\n\n    if (this.apiSubscription) {\n      this.apiSubscription.unsubscribe();\n    }\n\n    this.chatbotService.setBotTyping(false);\n    this.botMessages = [];\n    this.chatbotService.setGenerateResponse(false);\n    this.cdRef.detectChanges();\n  }\n  /**\n   * @internal\n   */\n  startConversation(message: string) {\n    this.addUserMessage(message);\n    this.generate();\n  }\n  /**\n   * @internal\n   */\n  private addUserMessage(message: string) {\n    this.messages.push({\n      errorClass: false,\n      role: 'user',\n      parts: [{ text: message }],\n    });\n  }\n  /**\n   * @internal\n   */\n  generate() {\n    if (this.chatApiUrl === '') {\n      this.handleErrorResponse(\n        'Implement Backend Api for content generation, check documentation for more info'\n      );\n      return;\n    }\n    this.suggestionQuestions = [];\n    const user = this.messages[this.messages.length - 1];\n    const users = [user];\n    this.chatbotService.setGenerateResponse(true);\n    const object = { contents: users };\n    const obj = {\n      data: object,\n      referenceId: this.referenceId,\n      sqlData: this.sqlData,\n    };\n    this.apiSubscription = this.chatbotService\n      .generateResponse(this.chatApiUrl, obj, this.eventsToListen)\n      .subscribe({\n        next: (result: any) => {\n          this.handleEvent(result.eventName, result.data);\n        },\n        error: (error: any) => {\n          console.log('error', error);\n          this.handleErrorResponse(\n            'There was an error generating response, Kindly refresh chat!',\n            error\n          );\n        },\n      });\n  }\n  /**\n   * @internal\n   */\n  private handleEvent(eventName: string, data: any) {\n    switch (eventName) {\n      case 'action':\n        this.botMessages.push(data.response);\n        break;\n      case 'action_status':\n        const length = this.botMessages.length;\n        this.botMessages[length - 1] += data.response;\n        break;\n      case 'data':\n        this.botMessages = [];\n        this.isTypingStopped = false;\n        this.showTypingEffect(data.response);\n        this.getSuggestions(data.response);\n        this.sqlData = data.aiDataAgent;\n        if (this.sqlData.contents.length > 2) {\n          this.sqlData.contents = this.sqlData.contents.slice(-2);\n        }\n        this.chatbotService.setGenerateResponse(false);\n        break;\n      case 'complete':\n        break;\n      default:\n        break;\n    }\n  }\n  /**\n   * @internal\n   */\n  private handleErrorResponse(message: string, error?: any) {\n    this.messages.push({\n      errorClass: true,\n      role: 'model',\n      parts: [{ text: message }],\n    });\n  }\n  /**\n   * @internal\n   */\n  sendMessageQuestion(comment: string) {\n    this.questionsAsked.push(comment);\n    this.stopMessage();\n    this.addUserMessage(comment);\n    this.generate();\n  }\n  /**\n   * @internal\n   */\n  getSuggestions(answer: string) {\n    this.suggestionQuestions = [];\n    let obj = {\n      answer: answer,\n      referenceId: this.referenceId,\n      questionsAsked: this.questionsAsked,\n    };\n\n    this.chatbotService\n      .getSuggestions(this.suggestionApiUrl, obj)\n      .pipe(takeUntil(this.destroy$))\n      .subscribe({\n        next: (response: any) => {\n          if (response.success) {\n            this.suggestionQuestions = response.data;\n          }\n        },\n      });\n  }\n  /**\n   * @internal\n   */\n  sendMessage() {\n    if (this.newMessage.trim() && !this.chatbotService.isBotTyping()) {\n      this.questionsAsked.push(this.newMessage);\n      this.addUserMessage(this.newMessage);\n      this.newMessage = '';\n      this.generate();\n    } else {\n      this.stopMessage();\n    }\n  }\n  /**\n   * @internal\n   */\n  refreshChat() {\n    this.questionsAsked = [];\n    this.suggestionQuestions = [];\n    this.messages = [];\n    this.referenceId = 0;\n    this.showSuggestions = true;\n    this.sqlData = { contents: [] };\n    this.resetChat();\n  }\n  /**\n   * @internal\n   */\n  resetChat() {\n    this.newMessage = '';\n    this.referenceId = 0;\n    this.isTypingStopped = false;\n    this.apiSubscription?.unsubscribe();\n    this.chatbotService.setBotTyping(false);\n    this.chatbotService.setGenerateResponse(false);\n    this.cdRef.detectChanges();\n  }\n\n  /**\n   * @internal\n   */\n  toggleChat() {\n    this.suggestionQuestions = [];\n    this.isChatOpen = !this.isChatOpen;\n    if (this.isChatOpen) {\n      this.focusMessageInput();\n      this.typeEffect(\n        this.fullTitle,\n        (text: string) => {\n          this.title = text;\n        },\n        50,\n        () => {\n          this.typeEffect(\n            this.fullSubtitle,\n            (text: string) => {\n              this.subtitle = text;\n            },\n            20\n          );\n        }\n      );\n    } else {\n      this.resetChat();\n      this.title = '';\n      this.subtitle = '';\n    }\n    this.cdRef.detectChanges();\n  }\n\n  /**\n   * @internal\n   */\n  private typeEffect(\n    fullText: string,\n    updateFunc: (text: string) => void,\n    speed: number,\n    callback?: () => void\n  ): void {\n    let i = 0;\n    const typing = () => {\n      if (i <= fullText.length) {\n        updateFunc(fullText.substring(0, i));\n        i++;\n        setTimeout(typing, speed);\n      } else if (callback) {\n        callback();\n        this.showSuggestions = true;\n        this.cdRef.detectChanges();\n      }\n    };\n    typing();\n  }\n}\n","<div class=\"chat-container\" [ngClass]=\"{'open': isChatOpen, 'closed': !isChatOpen}\">\n  <div class=\"chat-header\" *ngIf=\"isChatOpen\">\n    <div class=\"chat-info\">\n      <span class=\"header\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M17 2H13V1H11V2H7C5.34315 2 4 3.34315 4 5V8C4 10.7614 6.23858 13 9 13H15C17.7614 13 20 10.7614 20 8V5C20 3.34315 18.6569 2 17 2ZM11 7.5C11 8.32843 10.3284 9 9.5 9C8.67157 9 8 8.32843 8 7.5C8 6.67157 8.67157 6 9.5 6C10.3284 6 11 6.67157 11 7.5ZM16 7.5C16 8.32843 15.3284 9 14.5 9C13.6716 9 13 8.32843 13 7.5C13 6.67157 13.6716 6 14.5 6C15.3284 6 16 6.67157 16 7.5ZM4 22C4 17.5817 7.58172 14 12 14C16.4183 14 20 17.5817 20 22H4Z\"></path></svg>&nbsp;{{chatBotTitle}}</span><button type=\"button\" class=\"button\"\n        (click)=\"refreshChat()\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"10\" fill=\"currentColor\" class=\"bi bi-arrow-repeat\"\n          viewBox=\"0 0 16 16\">\n          <path\n            d=\"M11.534 7h3.932a.25.25 0 0 1 .192.41l-1.966 2.36a.25.25 0 0 1-.384 0l-1.966-2.36a.25.25 0 0 1 .192-.41zm-11 2h3.932a.25.25 0 0 0 .192-.41L2.692 6.23a.25.25 0 0 0-.384 0L.342 8.59A.25.25 0 0 0 .534 9z\">\n          </path>\n          <path fill-rule=\"evenodd\"\n            d=\"M8 3c-1.552 0-2.94.707-3.857 1.818a.5.5 0 1 1-.771-.636A6.002 6.002 0 0 1 13.917 7H12.9A5.002 5.002 0 0 0 8 3zM3.1 9a5.002 5.002 0 0 0 8.757 2.182.5.5 0 1 1 .771.636A6.002 6.002 0 0 1 2.083 9H3.1z\">\n          </path>\n        </svg>\n      </button>\n    </div>\n    <div class=\"close-button\">\n      <button class=\"close-btn\" (click)=\"toggleChat()\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M11.9997 10.5865L16.9495 5.63672L18.3637 7.05093L13.4139 12.0007L18.3637 16.9504L16.9495 18.3646L11.9997 13.4149L7.04996 18.3646L5.63574 16.9504L10.5855 12.0007L5.63574 7.05093L7.04996 5.63672L11.9997 10.5865Z\"></path></svg></button>\n    </div>\n  </div>\n  <div class=\"chat-window\" *ngIf=\"isChatOpen\" appAutoScroll>\n    <ng-container *ngIf=\"messages.length === 0\">\n      <div class=\"outer-container\">\n        <div class=\"inner-container\">\n          <div class=\"header\">\n            <div class=\"title\" [ngStyle]=\"{'transition': 'all 0.1s ease-in-out'}\">{{ title }}</div>\n            <div class=\"subtitle\" [ngStyle]=\"{'transition': 'all 0.1s ease-in-out'}\">{{ subtitle }}</div>\n          </div>\n          <div class=\"contents\">\n            <ng-container *ngIf=\"showSuggestions\">\n              <div *ngFor=\"let suggestion of suggestions\" class=\"tab\" (click)=\"startConversation(suggestion)\" [@fadeIn]>\n                {{suggestion}}\n              </div>\n            </ng-container>\n          </div>\n        </div>\n      </div>\n    </ng-container>\n    <div *ngFor=\"let message of messages\" [@fadeInOut]\n      [ngClass]=\"{'user-message': message.role === 'user', 'bot-message': message.role === 'model'}\">\n      <div class=\"message-content\" [class.error]=\"message.errorClass\">\n        <div *ngFor=\"let part of message.parts\">\n          <ng-container *ngIf=\"part.text.length != 0; else noText\">\n            <markdown class=\"variable-binding\" [data]=\"part.text\"></markdown>\n          </ng-container>\n          <ng-template #noText>\n            <span>Didnt find anything, try asking again ..!!</span>\n            &nbsp;\n            <div class=\"loader\">\n              <div class=\"line\">\n                <div class=\"dot\"></div>\n                <div class=\"dot\"></div>\n                <div class=\"dot\"></div>\n              </div>\n            </div>\n          </ng-template>\n        </div>\n      </div>\n    </div>\n    <div class=\"bot-message\" *ngIf=\"chatbotService.isGeneratingResponse()\">\n      <div class=\"message-content\">\n        <ng-container *ngIf=\"botMessages.length == 0; else noText2\">\n          <div class=\"loader\">\n            <div class=\"line\">\n              <div class=\"dot\"></div>\n              <div class=\"dot\"></div>\n              <div class=\"dot\"></div>\n            </div>\n          </div>\n        </ng-container>\n        <ng-template #noText2>\n          <div class=\"bot-messages\">\n            <div *ngFor=\"let message of botMessages\">\n              <ng-container *ngIf=\"message !== botMessages[botMessages.length - 1]; else loader\">\n                <div class=\"bot-message-content\">\n                  <span [innerHTML]=\"message\"></span>\n                </div>\n              </ng-container>\n              <ng-template #loader>\n                <div class=\"bot-message-content\">\n                  <span [innerHTML]=\"message\"></span>\n                  &nbsp; <div class=\"loader\">\n                    <div class=\"line\">\n                      <div class=\"dot\"></div>\n                      <div class=\"dot\"></div>\n                      <div class=\"dot\"></div>\n                    </div>\n                  </div>\n                </div>\n              </ng-template>\n            </div>\n          </div>\n        </ng-template>\n      </div>\n    </div>\n  </div>\n  <div *ngIf=\"showSuggestionQuestions &&suggestionQuestions && suggestionQuestions.length > 0\"\n    class=\"bubble-comment-content\">\n    <div class=\"bubble-comment\" *ngFor=\"let comment of suggestionQuestions\" [@fadeInOut]>\n      <div class=\"bubble-comment-text\" (click)=\"sendMessageQuestion(comment)\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M23.9996 12.0235C17.5625 12.4117 12.4114 17.563 12.0232 24H11.9762C11.588 17.563 6.4369 12.4117 0 12.0235V11.9765C6.4369 11.5883 11.588 6.43719 11.9762 0H12.0232C12.4114 6.43719 17.5625 11.5883 23.9996 11.9765V12.0235Z\"></path></svg><span class=\"text-sm lh-160\">{{ comment }}</span>\n      </div>\n    </div>\n  </div>\n  <div class=\"chat-input\" *ngIf=\"isChatOpen\">\n    <ng-container *ngIf=\"!chatbotService.isBotTyping()\">\n      <input #chatInput type=\"text\" [(ngModel)]=\"newMessage\" [maxlength]=\"255\" (keyup.enter)=\"sendMessage()\"\n        placeholder=\"Message {{chatBotTitle}}...\" />\n    </ng-container>\n    <ng-container *ngIf=\"!chatbotService.isBotTyping();else pauseIcon\">\n      <button class=\"play-button\" (click)=\"sendMessage()\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M13.0001 7.82843V20H11.0001V7.82843L5.63614 13.1924L4.22192 11.7782L12.0001 4L19.7783 11.7782L18.3641 13.1924L13.0001 7.82843Z\"></path></svg>\n      </button>\n    </ng-container>\n    <ng-template #pauseIcon>\n      <button class=\"stop-button\" (click)=\"stopMessage()\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M6 5H18C18.5523 5 19 5.44772 19 6V18C19 18.5523 18.5523 19 18 19H6C5.44772 19 5 18.5523 5 18V6C5 5.44772 5.44772 5 6 5Z\"></path></svg>\n      </button>\n    </ng-template>\n  </div>\n  <div *ngIf=\"!isChatOpen\" class=\"chat-toggle\" (click)=\"toggleChat()\">\n    Ask&nbsp;<span class=\"header\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M17 2H13V1H11V2H7C5.34315 2 4 3.34315 4 5V8C4 10.7614 6.23858 13 9 13H15C17.7614 13 20 10.7614 20 8V5C20 3.34315 18.6569 2 17 2ZM11 7.5C11 8.32843 10.3284 9 9.5 9C8.67157 9 8 8.32843 8 7.5C8 6.67157 8.67157 6 9.5 6C10.3284 6 11 6.67157 11 7.5ZM16 7.5C16 8.32843 15.3284 9 14.5 9C13.6716 9 13 8.32843 13 7.5C13 6.67157 13.6716 6 14.5 6C15.3284 6 16 6.67157 16 7.5ZM4 22C4 17.5817 7.58172 14 12 14C16.4183 14 20 17.5817 20 22H4Z\"></path></svg></span>\n  </div>\n</div>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ChatbotComponent } from './component/chatbot.component';\nimport { FormsModule } from '@angular/forms';\nimport { MarkdownModule } from 'ngx-markdown';\nimport { AutoScrollDirective } from './auto-scroll.directive';\n@NgModule({\n  imports: [\n    CommonModule,\n    FormsModule,\n    MarkdownModule.forChild()\n],\n  declarations: [ChatbotComponent,AutoScrollDirective],\n  exports: [ChatbotComponent]\n})\nexport class ChatbotModule { }\n","// Export the main module\nexport * from './lib/chatbot.module';\n\n// Export components\nexport * from './lib/component/chatbot.component';\n\n// Export services\nexport * from './lib/chatbot.service';\n\n// Export directives\nexport * from './lib/auto-scroll.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ApiService","i1.ChatbotService","i2","i5.AutoScrollDirective"],"mappings":";;;;;;;;;;;;;;;;MAea,UAAU,CAAA;AAGrB,IAAA,WAAA,CACU,IAAgB,EACjB,MAAc,EACb,MAAc,EAAA;QAFd,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QACjB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACb,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KACpB;AAEG,IAAA,IAAI,CAAC,GAAW,EAAE,IAAS,EAAE,OAAa,EAAA;QAC/C,OAAO,IAAI,CAAC,IAAI;AACb,aAAA,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC;AACxB,aAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;KACpD;AAEM,IAAA,WAAW,CAAC,GAAW,EAAE,QAAa,EAAE,OAAa,EAAA;QAC1D,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE;AACjD,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,cAAc,EAAE,IAAI;AACrB,SAAA,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,IAAI;aACb,OAAO,CAAC,GAAG,CAAC;AACZ,aAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;KACpD;IAEM,kBAAkB,CAAC,GAAW,EAAE,UAAqB,EAAA;AAC1D,QAAA,OAAO,IAAI,UAAU,CAAC,QAAQ,IAAG;YAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC,UAAU,EAAE;gBACf,UAAU,GAAG,CAAC,SAAS,EAAC,UAAU,EAAC,OAAO,CAAC,CAAC;AAC7C,aAAA;AACD,YAAA,UAAU,CAAC,OAAO,CAAC,SAAS,IAAG;gBAC7B,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAmB,KAAI;AACnE,oBAAA,IAAI,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,OAAO,EAAE;AACrD,wBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;AAC1B,qBAAA;AACD,oBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;AACnB,wBAAA,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AACtB,wBAAA,IAAI,IAAI,EAAC;AACP,4BAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACzB,yBAAA;wBACD,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,qBAAC,CAAC,CAAC;AACL,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;YAEH,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,KAAK,KAAI;AACnC,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;AACnB,oBAAA,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACtB,oBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;AAC3B,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC;YAEF,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;AACxC,SAAC,CAAC,CAAC;KACJ;IAEM,qBAAqB,GAAA;QAC1B,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;AAC1B,SAAA;KACF;AAEO,IAAA,aAAa,CAAC,MAAW,EAAA;AAC/B,QAAA,OAAO,MAAM,CAAC;KACf;AAEO,IAAA,WAAW,CAAC,KAAwB,EAAA;AAC1C,QAAA,IAAI,KAAK,CAAC,KAAK,YAAY,aAAa,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;AACxE,YAAA,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;AACtE,SAAA;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE;AAChD,YAAA,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;AACzD,SAAA;AAAM,aAAA,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,EAAE;YAChE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACtC,SAAA;AAAM,aAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;AACtE,SAAA;AAAM,aAAA;YACL,IAAI,aAAa,GAAG,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,yCAAyC,CAAC;AAC/I,YAAA,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC5B,SAAA;AAED,QAAA,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;KAC1B;;uGArFU,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAV,UAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFT,MAAM,EAAA,CAAA,CAAA;2FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCPY,cAAc,CAAA;AAEzB,IAAA,WAAA,CAAoB,UAAsB,EAAA;QAAtB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AAE1C;;;AAGG;AACK,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAE9D;;;AAGG;AACH,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;AAEhD;;;AAGG;AACK,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,eAAe,CAAa,IAAI,CAAC,CAAC;AAEtE;;;AAGG;AACH,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,CAAC;AAE5D;;;AAGG;AACK,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAE/D;;;AAGG;AACH,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;AAElD;;;AAGG;AACK,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAEtE;;;AAGG;AACH,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,CAAC;KAhDjB;AAkD/C;;;AAGG;AACH,IAAA,mBAAmB,CAAC,MAAe,EAAA;AACjC,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC3C;AAED;;;AAGG;IACH,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;KAC3C;AAED;;;;;AAKG;IACH,mBAAmB,CAAC,OAAe,EAAE,WAAmB,EAAA;AACtD,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACvB,YAAA,IAAI,MAAM,GAAG;AACX,gBAAA,aAAa,EAAE,WAAW;AAC1B,gBAAA,SAAS,EAAE,OAAO;aACnB,CAAC;AACF,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAChC,SAAA;KACF;AAED;;;AAGG;AACH,IAAA,YAAY,CAAC,MAAe,EAAA;AAC1B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACpC;AAED;;;AAGG;IACH,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;KAC1E;AAED;;;;;;;AAOG;AACH,IAAA,gBAAgB,CAAC,GAAW,EAAE,OAAY,EAAE,MAAgB,EAAA;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAC3C,QAAA,MAAM,QAAQ,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;AAChD,QAAA,GAAG,GAAG,GAAG,GAAG,YAAY,GAAG,QAAQ,CAAC;QACpC,OAAO,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;KACxD;AAED;;;;;AAKG;IACH,cAAc,CAAC,GAAW,EAAE,GAAQ,EAAA;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KACvC;;2GA7HU,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA;2FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCDc,mBAAmB,CAAA;AAG9B,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QAF1B,IAAY,CAAA,YAAA,GAAY,IAAI,CAAC;KAGpC;IAED,kBAAkB,GAAA;QAChB,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC;AACtE,SAAA;KACF;IAEO,gBAAgB,GAAA;QACtB,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC;QACtF,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC;AAClD,QAAA,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AACjD,QAAA,OAAO,UAAU,CAAC;KACnB;IAGD,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;KAC7C;;gHAvBU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;oGAAnB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,YAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC5B,iBAAA,CAAA;iGAsBC,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,QAAQ,CAAA;;;MC0Bb,gBAAgB,CAAA;AAmJ3B;;AAEG;AACH,IAAA,WAAA;AACE;;AAEG;IACI,cAA8B;AACrC;;AAEG;IACK,KAAwB,EAAA;QAJzB,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAI7B,IAAK,CAAA,KAAA,GAAL,KAAK,CAAmB;AAxJlC;;;;;;AAMG;QACM,IAAgB,CAAA,gBAAA,GAAW,EAAE,CAAC;AAGvC;;;;;;AAMG;QACM,IAAU,CAAA,UAAA,GAAW,EAAE,CAAC;AACjC;;;;AAIG;QACM,IAAQ,CAAA,QAAA,GAAW,EAAE,CAAC;AAE/B;;;;AAIG;QACM,IAAY,CAAA,YAAA,GAAW,SAAS,CAAC;AAC1C;;;;AAIG;QACM,IAAc,CAAA,cAAA,GAAW,SAAS,CAAC;AAC5C;;;;AAIG;AACM,QAAA,IAAA,CAAA,WAAW,GAAa;YAC/B,kBAAkB;YAClB,kBAAkB;YAClB,kBAAkB;SACnB,CAAC;AACF;;;;AAIG;QACM,IAAY,CAAA,YAAA,GAAW,SAAS,CAAC;AAC1C;;AAEG;QACH,IAAK,CAAA,KAAA,GAAG,EAAE,CAAC;AACX;;AAEG;QACH,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAC;AACd;;AAEG;QACH,IAAW,CAAA,WAAA,GAAW,CAAC,CAAC;AACxB;;AAEG;QACH,IAAc,CAAA,cAAA,GAAG,CAAC,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AACjE;;AAEG;QACH,IAAW,CAAA,WAAA,GAAa,EAAE,CAAC;AAC3B;;AAEG;QACH,IAAmB,CAAA,mBAAA,GAAa,EAAE,CAAC;AACnC;;AAEG;QACH,IAAc,CAAA,cAAA,GAAa,EAAE,CAAC;AAC9B;;AAEG;QACK,IAAS,CAAA,SAAA,GAAG,EAAE,CAAC;AACvB;;AAEG;QACK,IAAY,CAAA,YAAA,GAAG,2BAA2B,CAAC;AAKnD;;AAEG;QACH,IAAuB,CAAA,uBAAA,GAAY,KAAK,CAAC;AACzC;;AAEG;QACH,IAAQ,CAAA,QAAA,GACN,EAAE,CAAC;AACL;;AAEG;AACH,QAAA,IAAA,CAAA,OAAO,GAMH,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AACrB;;AAEG;QACH,IAAU,CAAA,UAAA,GAAW,EAAE,CAAC;AACxB;;AAEG;QACH,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;AAC5B;;AAEG;QACH,IAAoB,CAAA,oBAAA,GAAY,KAAK,CAAC;AACtC;;AAEG;QACH,IAAe,CAAA,eAAA,GAAY,KAAK,CAAC;AAKjC;;AAEG;QACH,IAAe,CAAA,eAAA,GAAY,KAAK,CAAC;AACjC;;AAEG;AACK,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;KAcnC;AAEJ;;;AAGG;IACH,QAAQ,GAAA;QACN,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,CAAU,OAAA,EAAA,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAA,CAAE,CAAC;KACvD;AAED;;;AAGG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;AAED;;;AAGG;IACH,eAAe,GAAA;QACb,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;AAED;;AAEG;IACK,sBAAsB,GAAA;QAC5B,IAAI,CAAC,cAAc,CAAC,SAAS;AAC1B,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;AACpB,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;AACzB,YAAA,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC1B,aAAA;AACH,SAAC,CAAC,CAAC;QACL,IAAI,CAAC,cAAc,CAAC,eAAe;AAChC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,OAAO,KAAI;AACrB,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,WAAW,CAAC;YACxC,IAAI,OAAO,EAAE,OAAO,EAAE;AACpB,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjB,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;AACnC,iBAAA,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjB,aAAA;AACH,SAAC,CAAC,CAAC;KACN;AAED;;AAEG;IACK,iBAAiB,GAAA;QACvB,IAAI,YAAY,GAAG,SAAS,CAAC;QAC7B,IAAI,cAAc,GAAG,SAAS,CAAC;QAC/B,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;AAClC,SAAA;QACD,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AACtC,SAAA;QACD,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;QAC5E,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAC,cAAc,CAAC,CAAC;KAChF;AACD;;AAEG;IACH,iBAAiB,GAAA;QACf,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;YACpD,OAAO;AACR,SAAA;QACD,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SACtC,EAAE,CAAC,CAAC,CAAC;KACP;AAED;;AAEG;AACK,IAAA,gBAAgB,CAAC,IAAY,EAAA;AACnC,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,QAAA,MAAM,aAAa,GAAG;AACpB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;SACtB,CAAC;AAEF,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACpC,SAAA;AAED,QAAA,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,MAAK;YACrC,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,gBAAA,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACnC,OAAO;AACR,aAAA;AAED,YAAA,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AACxB,gBAAA,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACvD,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;AAC5B,aAAA;AAAM,iBAAA;AACL,gBAAA,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACnC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;AACnC,gBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACxC,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AAC7B,gBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;gBACpC,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;AAC5B,aAAA;AACH,SAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;KACrC;AACD;;AAEG;IACH,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAE5B,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACpC,SAAA;QAED,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;AACpC,SAAA;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;KAC5B;AACD;;AAEG;AACH,IAAA,iBAAiB,CAAC,OAAe,EAAA;AAC/B,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;AACD;;AAEG;AACK,IAAA,cAAc,CAAC,OAAe,EAAA;AACpC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,SAAA,CAAC,CAAC;KACJ;AACD;;AAEG;IACH,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,mBAAmB,CACtB,iFAAiF,CAClF,CAAC;YACF,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAC9B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACrD,QAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAC9C,QAAA,MAAM,MAAM,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACnC,QAAA,MAAM,GAAG,GAAG;AACV,YAAA,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;AACF,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc;aACvC,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC;AAC3D,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,MAAW,KAAI;gBACpB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;aACjD;AACD,YAAA,KAAK,EAAE,CAAC,KAAU,KAAI;AACpB,gBAAA,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC5B,gBAAA,IAAI,CAAC,mBAAmB,CACtB,8DAA8D,EAC9D,KAAK,CACN,CAAC;aACH;AACF,SAAA,CAAC,CAAC;KACN;AACD;;AAEG;IACK,WAAW,CAAC,SAAiB,EAAE,IAAS,EAAA;AAC9C,QAAA,QAAQ,SAAS;AACf,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACrC,MAAM;AACR,YAAA,KAAK,eAAe;AAClB,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACvC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;gBAC9C,MAAM;AACR,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AAC7B,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrC,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;gBAChC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACpC,oBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,iBAAA;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;gBAC/C,MAAM;AACR,YAAA,KAAK,UAAU;gBACb,MAAM;AACR,YAAA;gBACE,MAAM;AACT,SAAA;KACF;AACD;;AAEG;IACK,mBAAmB,CAAC,OAAe,EAAE,KAAW,EAAA;AACtD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,SAAA,CAAC,CAAC;KACJ;AACD;;AAEG;AACH,IAAA,mBAAmB,CAAC,OAAe,EAAA;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;AACD;;AAEG;AACH,IAAA,cAAc,CAAC,MAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAC9B,QAAA,IAAI,GAAG,GAAG;AACR,YAAA,MAAM,EAAE,MAAM;YACd,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc;AAChB,aAAA,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC;AAC1C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;gBACtB,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,oBAAA,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC;AAC1C,iBAAA;aACF;AACF,SAAA,CAAC,CAAC;KACN;AACD;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE;YAChE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjB,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,SAAA;KACF;AACD;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QAChC,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AACD;;AAEG;IACH,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;KAC5B;AAED;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,UAAU,CACb,IAAI,CAAC,SAAS,EACd,CAAC,IAAY,KAAI;AACf,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACpB,aAAC,EACD,EAAE,EACF,MAAK;gBACH,IAAI,CAAC,UAAU,CACb,IAAI,CAAC,YAAY,EACjB,CAAC,IAAY,KAAI;AACf,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;iBACtB,EACD,EAAE,CACH,CAAC;AACJ,aAAC,CACF,CAAC;AACH,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAChB,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACpB,SAAA;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;KAC5B;AAED;;AAEG;AACK,IAAA,UAAU,CAChB,QAAgB,EAChB,UAAkC,EAClC,KAAa,EACb,QAAqB,EAAA;QAErB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,MAAM,MAAM,GAAG,MAAK;AAClB,YAAA,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE;gBACxB,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACrC,gBAAA,CAAC,EAAE,CAAC;AACJ,gBAAA,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC3B,aAAA;AAAM,iBAAA,IAAI,QAAQ,EAAE;AACnB,gBAAA,QAAQ,EAAE,CAAC;AACX,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;AAC5B,aAAA;AACH,SAAC,CAAC;AACF,QAAA,MAAM,EAAE,CAAC;KACV;;6GAtgBU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;iGAAhB,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnD7B,6jPA2HM,EDjGQ,MAAA,EAAA,CAAA,knPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,cAAA,EAAA,eAAA,EAAA,MAAA,EAAA,YAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,UAAA,EAAA;QACV,OAAO,CAAC,QAAQ,EAAE;YAChB,UAAU,CAAC,QAAQ,EAAE;AACnB,gBAAA,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;aACxC,CAAC;SACH,CAAC;QACF,OAAO,CAAC,WAAW,EAAE;YACnB,UAAU,CAAC,QAAQ,EAAE;AACnB,gBAAA,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;aAChD,CAAC;AACF,YAAA,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SACzE,CAAC;QACF,OAAO,CAAC,eAAe,EAAE;YACvB,UAAU,CAAC,QAAQ,EAAE;AACnB,gBAAA,KAAK,CACH,QAAQ,EACR,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EACzD,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB;aACF,CAAC;SACH,CAAC;AACH,KAAA,EAAA,CAAA,CAAA;2FAEU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBA7B5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAGX,UAAA,EAAA;wBACV,OAAO,CAAC,QAAQ,EAAE;4BAChB,UAAU,CAAC,QAAQ,EAAE;AACnB,gCAAA,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gCACrB,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;6BACxC,CAAC;yBACH,CAAC;wBACF,OAAO,CAAC,WAAW,EAAE;4BACnB,UAAU,CAAC,QAAQ,EAAE;AACnB,gCAAA,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gCACrB,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;6BAChD,CAAC;AACF,4BAAA,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;yBACzE,CAAC;wBACF,OAAO,CAAC,eAAe,EAAE;4BACvB,UAAU,CAAC,QAAQ,EAAE;AACnB,gCAAA,KAAK,CACH,QAAQ,EACR,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EACzD,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB;6BACF,CAAC;yBACH,CAAC;AACH,qBAAA,EAAA,QAAA,EAAA,6jPAAA,EAAA,MAAA,EAAA,CAAA,knPAAA,CAAA,EAAA,CAAA;kIAM+B,SAAS,EAAA,CAAA;sBAAxC,SAAS;uBAAC,WAAW,CAAA;gBASb,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAUG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAMG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAOG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAMG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAMG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAUG,YAAY,EAAA,CAAA;sBAApB,KAAK;;;ME9FK,aAAa,CAAA;;0GAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAb,aAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,EAHT,YAAA,EAAA,CAAA,gBAAgB,EAAC,mBAAmB,aAJjD,YAAY;AACZ,QAAA,WAAW,gCAIH,gBAAgB,CAAA,EAAA,CAAA,CAAA;AAEf,aAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,YAPtB,YAAY;QACZ,WAAW;QACX,cAAc,CAAC,QAAQ,EAAE,CAAA,EAAA,CAAA,CAAA;2FAKhB,aAAa,EAAA,UAAA,EAAA,CAAA;kBATzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,cAAc,CAAC,QAAQ,EAAE;AAC5B,qBAAA;AACC,oBAAA,YAAY,EAAE,CAAC,gBAAgB,EAAC,mBAAmB,CAAC;oBACpD,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC5B,iBAAA,CAAA;;;ACdD;;ACAA;;AAEG;;;;"}