{"version":3,"file":"ngx-segment-analytics.mjs","sources":["../../src/ngx-segment-analytics.config.ts","../../src/ngx-segment-analytics.service.ts","../../src/ngx-segment-analytics.module.ts","../../src/window-wrapper.ts","../../src/ngx-segment-analytics.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\nimport type {Plugin} from '@segment/analytics-next';\n\n/**\n * Segment Configuration Interface\n */\nexport interface SegmentConfig {\n    /** API Key for Segment.io */\n    apiKey?: string;\n    /** Debug mode status */\n    debug?: boolean;\n    /** Load Segment configuration on initialization */\n    loadOnInitialization?: boolean;\n    /**\n     * Segment Host if requests are proxied\n     * @deprecated Use cdnURL instead.\n     **/\n    segmentHost?: string;\n    /**\n     *  Segment Custom URI\n     *  @deprecated Use cdnURL instead.\n     **/\n    segmentUri?: string;\n    /** CDN host if requests are proxied */\n    cdnURL?: string;\n    /** Plugins **/\n    plugins?: Plugin[];\n}\n\n/** Segment Configuration Injection Token */\nexport const SEGMENT_CONFIG: InjectionToken<SegmentConfig> = new InjectionToken<SegmentConfig>('ngx-segment-analytics.config');\n\nexport const DEFAULT_CONFIG: SegmentConfig = {\n    debug: false,\n    loadOnInitialization: true, // Compatibility < 1.2.5\n    cdnURL: 'https://cdn.segment.com',\n    segmentUri: '/analytics.js/v1/$API_KEY$/analytics.min.js',\n    plugins: [],\n};\n","import {Inject, Injectable} from '@angular/core';\nimport {DEFAULT_CONFIG, SEGMENT_CONFIG, SegmentConfig} from './ngx-segment-analytics.config';\nimport {AnalyticsBrowser} from '@segment/analytics-next';\nimport type {User, AnalyticsBrowserSettings, Analytics, InitOptions, Plugin as NewSegmentPlugin} from '@segment/analytics-next';\n\nexport interface SegmentPlugin {\n    // Video Plugins\n    new(player: any, accessToken: string): any;\n\n    // Others plugins\n    new(): any;\n}\n\nexport type SegmentNextMiddleware = (payload: any) => void;\nexport type SourceMiddleware = ({integrations, payload, next}: {\n    integrations: { [key: string]: any },\n    payload: any,\n    next: SegmentNextMiddleware,\n}) => void;\nexport type DestinationMiddleware = ({integration, payload, next}: {\n    integration: string,\n    payload: any,\n    next: SegmentNextMiddleware,\n}) => void;\n\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class SegmentService {\n\n    protected readonly _config: SegmentConfig;\n    protected static readonly _segmentInstance: AnalyticsBrowser = new AnalyticsBrowser();\n\n    /**\n     * @param userConfig Segment configuration\n     */\n    constructor(\n        @Inject(SEGMENT_CONFIG) userConfig: SegmentConfig\n    ) {\n        this._config = {...DEFAULT_CONFIG, ...userConfig};\n\n        if (this._config.loadOnInitialization && (typeof this._config.apiKey === 'undefined' || this._config.apiKey === '')) {\n            console.error('The API Key cannot be an empty string if Segment must be loaded on initialization.');\n            return;\n        }\n\n        if (true === this._config.debug) {\n            console.log('Segment initialization...');\n        }\n\n        if (this._config.loadOnInitialization && !SegmentService._segmentInstance.instance?.initialized) {\n            let cdnUrl: string | undefined;\n\n            if (this._config.cdnURL) {\n                cdnUrl = this._config.cdnURL;\n            }\n\n            if (this._config.segmentHost) {\n                // Deprecated option\n                cdnUrl = 'https://' + this._config.segmentHost;\n            }\n\n            this.load({writeKey: this._config.apiKey, cdnURL: cdnUrl});\n        }\n    }\n\n    /**\n     * Load Segment configuration.\n     *\n     * @param settingsOrApiKey Write API Key or Segment settings.\n     * @param options Optional parameters.\n     */\n    public load(settingsOrApiKey: AnalyticsBrowserSettings | string, options: InitOptions = {}): void {\n        let settings: AnalyticsBrowserSettings;\n        if (typeof settingsOrApiKey === 'string') {\n            settings = {writeKey: settingsOrApiKey};\n        } else {\n            settings = settingsOrApiKey;\n        }\n\n        SegmentService._segmentInstance.load(settings, options)\n            .then(() => {\n                if (this._config.debug) {\n                    console.log('Segment initialized');\n                }\n            });\n\n        this.debug(this._config.debug);\n    }\n\n    /**\n     * The identify method is how you associate your users and their actions to a recognizable userId and traits.\n     *\n     * @param traits A dictionary of traits you know about the user, like their email or name.\n     * @param options A dictionary of options.\n     *\n     * @returns\n     */\n    public async identify(traits: any, options?: any): Promise<SegmentService>;\n\n    /**\n     * The identify method is how you associate your users and their actions to a recognizable userId and traits.\n     *\n     * @param userId The database ID for the user.\n     * @param traits A dictionary of traits you know about the user, like their email or name.\n     * @param options A dictionary of options.\n     *\n     * @returns\n     */\n    public async identify(userId: string, traits?: any, options?: any): Promise<SegmentService>;\n    public async identify(userId: string, traits?: any, options?: any): Promise<SegmentService> {\n        await SegmentService._segmentInstance.identify(userId, traits, options);\n\n        return this;\n    }\n\n    /**\n     * The track method lets you record any actions your users perform.\n     *\n     * @param event The name of the event you’re tracking.\n     * @param properties A dictionary of properties for the event.\n     * @param options A dictionary of options.\n     *\n     * @returns\n     */\n    public async track(event: string, properties?: any, options?: any): Promise<SegmentService> {\n        await SegmentService._segmentInstance.track(event, properties, options);\n\n        return this;\n    }\n\n    /**\n     * The page method lets you record page views on your website, along with optional extra information about the page being viewed.\n     *\n     * @param name The name of the page.\n     * @param properties A dictionary of properties of the page.\n     * @param options A dictionary of options.\n     *\n     * @returns\n     */\n    public async page(name?: string, properties?: any, options?: any): Promise<SegmentService>;\n\n    /**\n     * The page method lets you record page views on your website, along with optional extra information about the page being viewed.\n     *\n     * @param category The category of the page.\n     * @param name The name of the page.\n     * @param properties A dictionary of properties of the page.\n     * @param options A dictionary of options.\n     *\n     * @returns\n     */\n    public async page(category: string, name: string, properties?: any, options?: any): Promise<SegmentService>;\n\n    /**\n     * The page method lets you record page views on your website, along with optional extra information about the page being viewed.\n     *\n     * @param category The category of the page.\n     * @param name The name of the page.\n     * @param properties A dictionary of properties of the page.\n     * @param options A dictionary of options.\n     *\n     * @returns\n     */\n    public async page(category?: string, name?: string, properties?: any, options?: any): Promise<SegmentService> {\n        await SegmentService._segmentInstance.page(category, name, properties, options);\n\n        return this;\n    }\n\n    /**\n     * The group method associates an identified user with a company, organization, project, workspace, team, tribe, platoon,\n     * assemblage, cluster, troop, gang, party, society or any other name you came up with for the same concept.\n     *\n     * @param groupId The Group ID to associate with the current user.\n     * @param traits A dictionary of traits for the group.\n     *\n     * @returns\n     */\n    public async group(groupId: string, traits?: any): Promise<SegmentService> {\n        await SegmentService._segmentInstance.group(groupId, traits);\n\n        return this;\n    }\n\n    /**\n     * The alias method combines two previously unassociated user identities.\n     *\n     * @param userId The new user ID you want to associate with the user.\n     * @param previousId The previous ID that the user was recognized by. This defaults to the currently identified user’s ID.\n     * @param options A dictionary of options.\n     *\n     * @returns\n     */\n    public async alias(userId: string, previousId?: string, options?: any): Promise<SegmentService> {\n        await SegmentService._segmentInstance.alias(userId, previousId, options);\n\n        return this;\n    }\n\n    /**\n     * The ready method allows you execute a promise that will be called as soon as all of your enabled destinations have loaded\n     * and analytics.js has completed initialization.\n     *\n     * @returns\n     */\n    public async ready(): Promise<SegmentService> {\n        await SegmentService._segmentInstance.ready();\n\n        return this;\n    }\n\n    /**\n     * Return information about the currently identified user\n     *\n     * @returns Informations about the currently identified user\n     */\n    public user(): User | null {\n        return SegmentService._segmentInstance.instance.user();\n    }\n\n    /**\n     * Return identifier about the currently identified user\n     *\n     * @returns Identifier about the currently identified user\n     */\n    public id(): string | null {\n        return this.user()?.id();\n    }\n\n    /**\n     * Override the default Anonymous ID\n     *\n     * @param anonymousId New anonymous ID\n     */\n    public setAnonymousId(anonymousId: string): void {\n        SegmentService._segmentInstance.setAnonymousId(anonymousId);\n    }\n\n    /**\n     * Return traits about the currently identified user\n     *\n     * @returns Traits about the currently identified user\n     */\n    public traits(): any {\n        return this.user()?.traits();\n    }\n\n    /**\n     * Reset the id, including anonymousId, and clear traits for the currently identified user and group.\n     */\n    public reset(): void {\n        SegmentService._segmentInstance.reset();\n    }\n\n    /**\n     * Turn on/off debug mode, logging helpful messages to the console.\n     *\n     * @param enabled Enable or not the debug mode\n     */\n    public debug(enabled?: boolean): void {\n        SegmentService._segmentInstance.debug(enabled);\n    }\n\n    /**\n     * Set listeners for these events and run your own custom code.\n     *\n     * @param method Name of the method to listen for\n     * @param callback A function to execute after each the emitted method\n     */\n    public on(method: string, callback: (event?: string, properties?: any, options?: any) => any): void {\n        SegmentService._segmentInstance.on(method, callback);\n    }\n\n    /**\n     * Attaches the `track` call as a handler to a link\n     *\n     * @param elements DOM element or an array of DOM elements to be bound with track method.\n     * @param event The name of the event, passed to the `track` method or a function that returns a string to be used\n     *              as the name of the track event.\n     * @param properties A dictionary of properties to pass with the `track` method.\n     */\n    public trackLink(elements: HTMLElement | HTMLElement[], event: string | Function, properties?: any | Function): void {\n        SegmentService._segmentInstance.trackLink(elements, event, properties);\n    }\n\n    /**\n     * Binds a `track` call to a form submission.\n     *\n     * @param forms The form element to track or an array of form\n     * @param event The name of the event, passed to the `track` method.\n     * @param properties A dictionary of properties to pass with the `track` method.\n     */\n    public trackForm(forms: HTMLFormElement | HTMLFormElement[], event: string | Function, properties?: any | Function): void {\n        SegmentService._segmentInstance.trackSubmit(forms, event, properties);\n    }\n\n    /**\n     * Add a source middleware called on events\n     *\n     * @param middleware Custom function\n     */\n    public addSourceMiddleware(middleware: SourceMiddleware): void {\n        SegmentService._segmentInstance.addSourceMiddleware(middleware);\n    }\n\n    /**\n     * Add destination middlewares called on events\n     *\n     * @param integration Integration name\n     * @param middlewares Custom functions\n     */\n    public addDestinationMiddleware(integration: string, ...middlewares: DestinationMiddleware[]): void {\n        SegmentService._segmentInstance.addDestinationMiddleware(integration, ...middlewares);\n    }\n\n    /**\n     * Register plugins\n     *\n     * @param plugins\n     */\n    public async register(...plugins: NewSegmentPlugin[]): Promise<void> {\n        await SegmentService._segmentInstance.register(...plugins);\n\n        return;\n    }\n\n    public get segmentInstance(): Analytics {\n        return SegmentService._segmentInstance.instance;\n    }\n}\n","import {ModuleWithProviders, NgModule, Optional, SkipSelf} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SegmentService} from './ngx-segment-analytics.service';\nimport {SEGMENT_CONFIG, SegmentConfig} from './ngx-segment-analytics.config';\n\n/**\n * Segment Module\n */\n@NgModule({\n    imports: [CommonModule],\n})\nexport class SegmentModule {\n\n    /**\n     * Segment Module Initialisation\n     *\n     * @param config Segment Configuration\n     * @returns Segment Module\n     */\n    public static forRoot(config?: SegmentConfig): ModuleWithProviders<SegmentModule> {\n        return {\n            ngModule: SegmentModule,\n            providers: [\n                {provide: SEGMENT_CONFIG, useValue: config},\n                SegmentService,\n            ],\n        };\n    }\n\n    /**\n     * Segment Module Constructor\n     *\n     * @param parentModule Must be null\n     */\n    constructor(@Optional() @SkipSelf() parentModule: SegmentModule) {\n        if (parentModule) {\n            throw new Error('SegmentModule is already loaded. Import it in the AppModule only');\n        }\n    }\n}\n","import {Injectable} from '@angular/core';\nimport type { AnalyticsSnippet } from '@segment/analytics-next';\n\n/**\n * Window Wrapper for Angular AOT\n */\n@Injectable()\nexport class WindowWrapper {\n    /** Segment Analytics.js instance */\n    public analytics: AnalyticsSnippet;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AA6BA;MACa,cAAc,GAAkC,IAAI,cAAc,CAAgB,8BAA8B;AAEhH,MAAA,cAAc,GAAkB;AACzC,IAAA,KAAK,EAAE,KAAK;IACZ,oBAAoB,EAAE,IAAI;AAC1B,IAAA,MAAM,EAAE,yBAAyB;AACjC,IAAA,UAAU,EAAE,6CAA6C;AACzD,IAAA,OAAO,EAAE,EAAE;;;MCRF,cAAc,CAAA;AAEJ,IAAA,OAAO;AAChB,IAAA,OAAgB,gBAAgB,GAAqB,IAAI,gBAAgB,EAAE;AAErF;;AAEG;AACH,IAAA,WAAA,CAC4B,UAAyB,EAAA;QAEjD,IAAI,CAAC,OAAO,GAAG,EAAC,GAAG,cAAc,EAAE,GAAG,UAAU,EAAC;QAEjD,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,EAAE,CAAC,EAAE;AACjH,YAAA,OAAO,CAAC,KAAK,CAAC,oFAAoF,CAAC;YACnG;;QAGJ,IAAI,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;;AAG5C,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,WAAW,EAAE;AAC7F,YAAA,IAAI,MAA0B;AAE9B,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACrB,gBAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;;AAGhC,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;;gBAE1B,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW;;AAGlD,YAAA,IAAI,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAC,CAAC;;;AAIlE;;;;;AAKG;AACI,IAAA,IAAI,CAAC,gBAAmD,EAAE,OAAA,GAAuB,EAAE,EAAA;AACtF,QAAA,IAAI,QAAkC;AACtC,QAAA,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE;AACtC,YAAA,QAAQ,GAAG,EAAC,QAAQ,EAAE,gBAAgB,EAAC;;aACpC;YACH,QAAQ,GAAG,gBAAgB;;QAG/B,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO;aACjD,IAAI,CAAC,MAAK;AACP,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,gBAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;;AAE1C,SAAC,CAAC;QAEN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;;AAuB3B,IAAA,MAAM,QAAQ,CAAC,MAAc,EAAE,MAAY,EAAE,OAAa,EAAA;AAC7D,QAAA,MAAM,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;AAEvE,QAAA,OAAO,IAAI;;AAGf;;;;;;;;AAQG;AACI,IAAA,MAAM,KAAK,CAAC,KAAa,EAAE,UAAgB,EAAE,OAAa,EAAA;AAC7D,QAAA,MAAM,cAAc,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC;AAEvE,QAAA,OAAO,IAAI;;AA0Bf;;;;;;;;;AASG;IACI,MAAM,IAAI,CAAC,QAAiB,EAAE,IAAa,EAAE,UAAgB,EAAE,OAAa,EAAA;AAC/E,QAAA,MAAM,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC;AAE/E,QAAA,OAAO,IAAI;;AAGf;;;;;;;;AAQG;AACI,IAAA,MAAM,KAAK,CAAC,OAAe,EAAE,MAAY,EAAA;QAC5C,MAAM,cAAc,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;AAE5D,QAAA,OAAO,IAAI;;AAGf;;;;;;;;AAQG;AACI,IAAA,MAAM,KAAK,CAAC,MAAc,EAAE,UAAmB,EAAE,OAAa,EAAA;AACjE,QAAA,MAAM,cAAc,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC;AAExE,QAAA,OAAO,IAAI;;AAGf;;;;;AAKG;AACI,IAAA,MAAM,KAAK,GAAA;AACd,QAAA,MAAM,cAAc,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAE7C,QAAA,OAAO,IAAI;;AAGf;;;;AAIG;IACI,IAAI,GAAA;QACP,OAAO,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE;;AAG1D;;;;AAIG;IACI,EAAE,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;;AAG5B;;;;AAIG;AACI,IAAA,cAAc,CAAC,WAAmB,EAAA;AACrC,QAAA,cAAc,CAAC,gBAAgB,CAAC,cAAc,CAAC,WAAW,CAAC;;AAG/D;;;;AAIG;IACI,MAAM,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE;;AAGhC;;AAEG;IACI,KAAK,GAAA;AACR,QAAA,cAAc,CAAC,gBAAgB,CAAC,KAAK,EAAE;;AAG3C;;;;AAIG;AACI,IAAA,KAAK,CAAC,OAAiB,EAAA;AAC1B,QAAA,cAAc,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC;;AAGlD;;;;;AAKG;IACI,EAAE,CAAC,MAAc,EAAE,QAAkE,EAAA;QACxF,cAAc,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;;AAGxD;;;;;;;AAOG;AACI,IAAA,SAAS,CAAC,QAAqC,EAAE,KAAwB,EAAE,UAA2B,EAAA;QACzG,cAAc,CAAC,gBAAgB,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC;;AAG1E;;;;;;AAMG;AACI,IAAA,SAAS,CAAC,KAA0C,EAAE,KAAwB,EAAE,UAA2B,EAAA;QAC9G,cAAc,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC;;AAGzE;;;;AAIG;AACI,IAAA,mBAAmB,CAAC,UAA4B,EAAA;AACnD,QAAA,cAAc,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,UAAU,CAAC;;AAGnE;;;;;AAKG;AACI,IAAA,wBAAwB,CAAC,WAAmB,EAAE,GAAG,WAAoC,EAAA;QACxF,cAAc,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC;;AAGzF;;;;AAIG;AACI,IAAA,MAAM,QAAQ,CAAC,GAAG,OAA2B,EAAA;QAChD,MAAM,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;QAE1D;;AAGJ,IAAA,IAAW,eAAe,GAAA;AACtB,QAAA,OAAO,cAAc,CAAC,gBAAgB,CAAC,QAAQ;;AA5S1C,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,kBASX,cAAc,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AATjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFX,MAAM,EAAA,CAAA;;2FAET,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;0BAUQ,MAAM;2BAAC,cAAc;;;ACjC9B;;AAEG;MAIU,aAAa,CAAA;AAEtB;;;;;AAKG;IACI,OAAO,OAAO,CAAC,MAAsB,EAAA;QACxC,OAAO;AACH,YAAA,QAAQ,EAAE,aAAa;AACvB,YAAA,SAAS,EAAE;AACP,gBAAA,EAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAC;gBAC3C,cAAc;AACjB,aAAA;SACJ;;AAGL;;;;AAIG;AACH,IAAA,WAAA,CAAoC,YAA2B,EAAA;QAC3D,IAAI,YAAY,EAAE;AACd,YAAA,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC;;;uGAzBlF,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,YAFZ,YAAY,CAAA,EAAA,CAAA;AAEb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,YAFZ,YAAY,CAAA,EAAA,CAAA;;2FAEb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;AAC1B,iBAAA;;0BAwBgB;;0BAAY;;;AC/B7B;;AAEG;MAEU,aAAa,CAAA;;AAEf,IAAA,SAAS;uGAFP,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAb,aAAa,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB;;;ACND;;AAEG;;;;"}