{"version":3,"file":"NodeCanvasElement.mjs","sources":["../../src/adapter/NodeCanvasElement.ts"],"sourcesContent":["import canvasModule from 'canvas';\nimport createGLContext from 'gl';\nimport { utils } from 'pixijs/core';\n\nimport type {\n    CanvasRenderingContext2D, JpegConfig, NodeCanvasRenderingContext2DSettings, PdfConfig, PngConfig,\n} from 'canvas';\nimport type {\n    STACKGL_resize_drawingbuffer, // eslint-disable-line camelcase\n    StackGLExtension,\n} from 'gl';\nimport type { ContextIds, ContextSettings, ICanvas, ICanvasRenderingContext2DSettings } from 'pixijs/core';\n\nconst { Canvas, Image, createImageData } = canvasModule;\n\n/** Obtain the parameters of a function type in a tuple, except the first one */\ntype ParametersExceptFirst<T extends (...args: any) => any> = T extends (arg0: any, ...args: infer P) => any ? P : never;\n\n/**\n * A node implementation of a canvas element.\n * Uses node-canvas and gl packages to provide the same\n * functionality as a normal HTMLCanvasElement.\n * @class\n * @memberof PIXI\n */\nexport class NodeCanvasElement implements ICanvas\n{\n    /** Style of the canvas. */\n    public style: Record<string, any>;\n\n    private _canvas: canvasModule.Canvas;\n    private _event: utils.EventEmitter;\n    private _contextType?: ContextIds;\n    private _ctx?: CanvasRenderingContext2D;\n    private _gl?: WebGLRenderingContext & StackGLExtension;\n    private _glExtensions?: {\n        resizeDrawingBuffer?: STACKGL_resize_drawingbuffer; // eslint-disable-line camelcase\n    };\n\n    constructor(width = 1, height = 1, type?: 'image' | 'pdf' | 'svg')\n    {\n        this._canvas = new Canvas(width, height, type);\n        this._event = new utils.EventEmitter();\n        this.style = {};\n    }\n\n    get width()\n    {\n        return this._canvas.width;\n    }\n\n    set width(value)\n    {\n        this._glExtensions?.resizeDrawingBuffer?.resize(value, this.height);\n        this._canvas.width = value;\n    }\n\n    get height()\n    {\n        return this._canvas.height;\n    }\n\n    set height(value)\n    {\n        this._glExtensions?.resizeDrawingBuffer?.resize(this.width, value);\n        this._canvas.height = value;\n    }\n\n    get clientWidth()\n    {\n        return this._canvas.width;\n    }\n\n    get clientHeight()\n    {\n        return this._canvas.height;\n    }\n\n    getContext(\n        contextId: '2d',\n        options?: ICanvasRenderingContext2DSettings | NodeCanvasRenderingContext2DSettings,\n    ): CanvasRenderingContext2D | null;\n    getContext(\n        contextId: 'bitmaprenderer',\n        options?: ImageBitmapRenderingContextSettings | NodeCanvasRenderingContext2DSettings,\n    ): null;\n    getContext(\n        contextId: 'webgl' | 'experimental-webgl',\n        options?: WebGLContextAttributes | NodeCanvasRenderingContext2DSettings,\n    ): WebGLRenderingContext | null;\n    getContext(\n        contextId: 'webgl2' | 'experimental-webgl2',\n        options?: WebGLContextAttributes | NodeCanvasRenderingContext2DSettings,\n    ): null;\n    getContext(\n        type: ContextIds,\n        options?: ContextSettings | NodeCanvasRenderingContext2DSettings,\n    ): CanvasRenderingContext2D | WebGLRenderingContext | null\n    {\n        switch (type)\n        {\n            case '2d':\n            {\n                if (this._contextType && this._contextType !== '2d') return null;\n                if (this._ctx) return this._ctx;\n\n                const ctx = this._canvas.getContext('2d', options as NodeCanvasRenderingContext2DSettings);\n\n                this._patch2DContext(ctx);\n\n                this._ctx = ctx;\n                this._contextType = '2d';\n\n                return ctx;\n            }\n            case 'webgl':\n            case 'experimental-webgl':\n            {\n                if (this._contextType && this._contextType !== 'webgl') return null;\n                if (this._gl) return this._gl;\n\n                const { width, height } = this;\n\n                const ctx = this._canvas.getContext('2d', options as NodeCanvasRenderingContext2DSettings);\n                const gl = createGLContext(width, height, options as WebGLContextAttributes);\n\n                this._patchGLContext(gl);\n\n                this._ctx = ctx;\n                this._gl = gl;\n                this._glExtensions = {\n                    resizeDrawingBuffer: gl.getExtension('STACKGL_resize_drawingbuffer'),\n                };\n                this._contextType = 'webgl';\n\n                return gl;\n            }\n            default: return null;\n        }\n    }\n\n    /**\n     * For image canvases, encodes the canvas as a PNG. For PDF canvases,\n     * encodes the canvas as a PDF. For SVG canvases, encodes the canvas as an\n     * SVG.\n     */\n    toBuffer(cb: (err: Error | null, result: Buffer) => void): void;\n    toBuffer(cb: (err: Error | null, result: Buffer) => void, mimeType: 'image/png', config?: PngConfig): void;\n    toBuffer(cb: (err: Error | null, result: Buffer) => void, mimeType: 'image/jpeg', config?: JpegConfig): void;\n    /**\n     * For image canvases, encodes the canvas as a PNG. For PDF canvases,\n     * encodes the canvas as a PDF. For SVG canvases, encodes the canvas as an\n     * SVG.\n     */\n    toBuffer(): Buffer;\n    toBuffer(mimeType: 'image/png', config?: PngConfig): Buffer;\n    toBuffer(mimeType: 'image/jpeg', config?: JpegConfig): Buffer;\n    toBuffer(mimeType: 'application/pdf', config?: PdfConfig): Buffer;\n    /**\n     * Returns the unencoded pixel data, top-to-bottom. On little-endian (most)\n     * systems, the array will be ordered BGRA; on big-endian systems, it will\n     * be ARGB.\n     */\n    toBuffer(mimeType: 'raw'): Buffer;\n    /**\n     * Returns a buffer of the canvas contents.\n     * @param args - the arguments to pass to the toBuffer method\n     */\n    toBuffer(...args: any): Buffer | void\n    {\n        this._updateContext();\n\n        return this._canvas.toBuffer(...args as Parameters<typeof canvasModule.Canvas.prototype.toBuffer>);\n    }\n\n    /** Defaults to PNG image. */\n    toDataURL(): string;\n    toDataURL(mimeType: 'image/png'): string;\n    toDataURL(mimeType: 'image/jpeg', quality?: number): string;\n    /** _Non-standard._ Defaults to PNG image. */\n    toDataURL(cb: (err: Error | null, result: string) => void): void;\n    /** _Non-standard._ */\n    toDataURL(mimeType: 'image/png', cb: (err: Error | null, result: string) => void): void;\n    /** _Non-standard._ */\n    toDataURL(mimeType: 'image/jpeg', cb: (err: Error | null, result: string) => void): void;\n    /** _Non-standard._ */\n    toDataURL(mimeType: 'image/jpeg', config: JpegConfig, cb: (err: Error | null, result: string) => void): void;\n    /** _Non-standard._ */\n    toDataURL(mimeType: 'image/jpeg', quality: number, cb: (err: Error | null, result: string) => void): void;\n    /**\n     * Returns a base64 encoded string representation of the canvas.\n     * @param args - The arguments to pass to the toDataURL method.\n     */\n    toDataURL(...args: any): string | void\n    {\n        this._updateContext();\n\n        return this._canvas.toDataURL(...args as Parameters<typeof canvasModule.Canvas.prototype.toDataURL>);\n    }\n\n    /**\n     * Adds the listener for the specified event.\n     * @param type - The type of event to listen for.\n     * @param listener - The callback to invoke when the event is fired.\n     */\n    addEventListener(type: string, listener: (...args: any[]) => void)\n    {\n        return this._event.addListener(type, listener);\n    }\n\n    /**\n     * Removes the listener for the specified event.\n     * @param type - The type of event to listen for.\n     * @param listener - The callback to invoke when the event is fired.\n     */\n    removeEventListener(type: string, listener: (...args: any[]) => void)\n    {\n        if (listener)\n        {\n            return this._event.removeListener(type, listener);\n        }\n\n        return this._event.removeAllListeners(type);\n    }\n\n    /**\n     * Dispatches the specified event.\n     * @param event - The event to emit.\n     * @param event.type - The type of event.\n     */\n    dispatchEvent(event: {type: string, [key: string]: any})\n    {\n        event.target = this;\n\n        return this._event.emit(event.type, event);\n    }\n\n    /** Read canvas pixels as Uint8Array. */\n    private _getPixels(): Uint8Array\n    {\n        switch (this._contextType)\n        {\n            case '2d':\n            {\n                const { width, height, _ctx: ctx } = this;\n\n                const imageData = ctx.getImageData(0, 0, width, height);\n                const { buffer, byteOffset, length } = imageData.data;\n\n                return new Uint8Array(buffer, byteOffset, length);\n            }\n            case 'webgl':\n            {\n                const { width, height, _gl: gl } = this;\n\n                const lineByteCount = 4 * width;\n                const pixels = new Uint8Array(height * lineByteCount);\n\n                gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n\n                const tmp = new Uint8Array(lineByteCount);\n\n                // Reverse row order\n                for (let srcRow = 0; srcRow < height >> 1; srcRow++)\n                {\n                    const dstRow = height - srcRow - 1;\n                    const srcIndex = srcRow * lineByteCount;\n                    const dstIndex = dstRow * lineByteCount;\n                    const src = pixels.subarray(srcIndex, srcIndex + lineByteCount);\n                    const dst = pixels.subarray(dstIndex, dstIndex + lineByteCount);\n\n                    tmp.set(dst);\n                    dst.set(src);\n                    src.set(tmp);\n                }\n\n                return pixels;\n            }\n            default:\n            {\n                throw new Error('getContext() has not been called');\n            }\n        }\n    }\n\n    /** Copy pixels from GL context to 2D context. */\n    private _updateContext()\n    {\n        if (this._contextType === 'webgl')\n        {\n            const { width, height, _ctx: ctx } = this;\n\n            const pixels = this._getPixels();\n            const imageData = createImageData(new Uint8ClampedArray(pixels.buffer), width, height);\n\n            ctx.putImageData(imageData, 0, 0);\n        }\n    }\n\n    /**\n     * Patch the 2D context.\n     * @param ctx - The 2D context.\n     */\n    private _patch2DContext(ctx: CanvasRenderingContext2D)\n    {\n        const _drawImage = ctx.drawImage;\n\n        ctx.drawImage = function drawImage(image: any, ...args: any)\n        {\n            if (image instanceof NodeCanvasElement)\n            {\n                image._updateContext();\n                image = image._canvas;\n            }\n\n            return _drawImage.call(this, image, ...args as ParametersExceptFirst<typeof _drawImage>);\n        };\n\n        const _createPattern = ctx.createPattern;\n\n        ctx.createPattern = function createPattern(image: any, ...args: any)\n        {\n            if (image instanceof NodeCanvasElement)\n            {\n                image._updateContext();\n                image = image._canvas;\n            }\n\n            return _createPattern.call(this, image, ...args as ParametersExceptFirst<typeof _createPattern>);\n        };\n    }\n\n    /**\n     * Patch the GL context.\n     * @param gl - The GL context.\n     */\n    private _patchGLContext(gl: WebGLRenderingContext & StackGLExtension)\n    {\n        const _getUniformLocation = gl.getUniformLocation;\n\n        type Program = WebGLProgram & { _uniforms: any[] };\n        // Temporary fix https://github.com/stackgl/headless-gl/issues/170\n        gl.getUniformLocation = function getUniformLocation(program: Program, name)\n        {\n            if (program._uniforms && !(/\\[\\d+\\]$/).test(name))\n            {\n                const reg = new RegExp(`${name}\\\\[\\\\d+\\\\]$`);\n\n                for (let i = 0; i < program._uniforms.length; i++)\n                {\n                    const _name = program._uniforms[i].name;\n\n                    if (reg.test(_name))\n                    {\n                        name = _name;\n                    }\n                }\n            }\n\n            return _getUniformLocation.call(this, program, name);\n        };\n\n        /**\n         * Convert TexImageSource argument for GL context.\n         * @param source\n         */\n        function convertTexImageSource(source: any): any\n        {\n            if (source instanceof NodeCanvasElement)\n            {\n                source._updateContext();\n\n                return source;\n            }\n            if (source instanceof Image)\n            {\n                const { width, height } = source;\n                const canvas = new Canvas(width, height);\n\n                canvas.getContext('2d').drawImage(source, 0, 0);\n\n                return source;\n            }\n\n            return source;\n        }\n\n        const _texImage2D = gl.texImage2D;\n\n        gl.texImage2D = function texImage2D(...args: any)\n        {\n            args[args.length - 1] = convertTexImageSource(args[args.length - 1]);\n\n            return _texImage2D.apply(this, args);\n        };\n\n        const _texSubImage2D = gl.texSubImage2D;\n\n        gl.texSubImage2D = function texSubImage2D(...args: any)\n        {\n            args[args.length - 1] = convertTexImageSource(args[args.length - 1]);\n\n            return _texSubImage2D.apply(this, args);\n        };\n    }\n}\n"],"names":[],"mappings":";;;;AAaA,MAAM,EAAE,MAAQ,EAAA,KAAA,EAAO,eAAoB,EAAA,GAAA,YAAA,CAAA;AAYpC,MAAM,iBACb,CAAA;AAAA,EAaI,WAAY,CAAA,KAAA,GAAQ,CAAG,EAAA,MAAA,GAAS,GAAG,IACnC,EAAA;AACI,IAAA,IAAA,CAAK,OAAU,GAAA,IAAI,MAAO,CAAA,KAAA,EAAO,QAAQ,IAAI,CAAA,CAAA;AAC7C,IAAK,IAAA,CAAA,MAAA,GAAS,IAAI,KAAA,CAAM,YAAa,EAAA,CAAA;AACrC,IAAA,IAAA,CAAK,QAAQ,EAAC,CAAA;AAAA,GAClB;AAAA,EAEA,IAAI,KACJ,GAAA;AACI,IAAA,OAAO,KAAK,OAAQ,CAAA,KAAA,CAAA;AAAA,GACxB;AAAA,EAEA,IAAI,MAAM,KACV,EAAA;AACI,IAAA,IAAA,CAAK,aAAe,EAAA,mBAAA,EAAqB,MAAO,CAAA,KAAA,EAAO,KAAK,MAAM,CAAA,CAAA;AAClE,IAAA,IAAA,CAAK,QAAQ,KAAQ,GAAA,KAAA,CAAA;AAAA,GACzB;AAAA,EAEA,IAAI,MACJ,GAAA;AACI,IAAA,OAAO,KAAK,OAAQ,CAAA,MAAA,CAAA;AAAA,GACxB;AAAA,EAEA,IAAI,OAAO,KACX,EAAA;AACI,IAAA,IAAA,CAAK,aAAe,EAAA,mBAAA,EAAqB,MAAO,CAAA,IAAA,CAAK,OAAO,KAAK,CAAA,CAAA;AACjE,IAAA,IAAA,CAAK,QAAQ,MAAS,GAAA,KAAA,CAAA;AAAA,GAC1B;AAAA,EAEA,IAAI,WACJ,GAAA;AACI,IAAA,OAAO,KAAK,OAAQ,CAAA,KAAA,CAAA;AAAA,GACxB;AAAA,EAEA,IAAI,YACJ,GAAA;AACI,IAAA,OAAO,KAAK,OAAQ,CAAA,MAAA,CAAA;AAAA,GACxB;AAAA,EAkBA,UAAA,CACI,MACA,OAEJ,EAAA;AACI,IAAQ,QAAA,IAAA;AAAA,MAAA,KAEC,IACL,EAAA;AACI,QAAI,IAAA,IAAA,CAAK,YAAgB,IAAA,IAAA,CAAK,YAAiB,KAAA,IAAA;AAAM,UAAO,OAAA,IAAA,CAAA;AAC5D,QAAA,IAAI,IAAK,CAAA,IAAA;AAAM,UAAA,OAAO,IAAK,CAAA,IAAA,CAAA;AAE3B,QAAA,MAAM,GAAM,GAAA,IAAA,CAAK,OAAQ,CAAA,UAAA,CAAW,MAAM,OAA+C,CAAA,CAAA;AAEzF,QAAA,IAAA,CAAK,gBAAgB,GAAG,CAAA,CAAA;AAExB,QAAA,IAAA,CAAK,IAAO,GAAA,GAAA,CAAA;AACZ,QAAA,IAAA,CAAK,YAAe,GAAA,IAAA,CAAA;AAEpB,QAAO,OAAA,GAAA,CAAA;AAAA,OACX;AAAA,MACK,KAAA,OAAA,CAAA;AAAA,MAAA,KACA,oBACL,EAAA;AACI,QAAI,IAAA,IAAA,CAAK,YAAgB,IAAA,IAAA,CAAK,YAAiB,KAAA,OAAA;AAAS,UAAO,OAAA,IAAA,CAAA;AAC/D,QAAA,IAAI,IAAK,CAAA,GAAA;AAAK,UAAA,OAAO,IAAK,CAAA,GAAA,CAAA;AAE1B,QAAM,MAAA,EAAE,OAAO,MAAW,EAAA,GAAA,IAAA,CAAA;AAE1B,QAAA,MAAM,GAAM,GAAA,IAAA,CAAK,OAAQ,CAAA,UAAA,CAAW,MAAM,OAA+C,CAAA,CAAA;AACzF,QAAA,MAAM,EAAK,GAAA,eAAA,CAAgB,KAAO,EAAA,MAAA,EAAQ,OAAiC,CAAA,CAAA;AAE3E,QAAA,IAAA,CAAK,gBAAgB,EAAE,CAAA,CAAA;AAEvB,QAAA,IAAA,CAAK,IAAO,GAAA,GAAA,CAAA;AACZ,QAAA,IAAA,CAAK,GAAM,GAAA,EAAA,CAAA;AACX,QAAA,IAAA,CAAK,aAAgB,GAAA;AAAA,UACjB,mBAAA,EAAqB,EAAG,CAAA,YAAA,CAAa,8BAA8B,CAAA;AAAA,SACvE,CAAA;AACA,QAAA,IAAA,CAAK,YAAe,GAAA,OAAA,CAAA;AAEpB,QAAO,OAAA,EAAA,CAAA;AAAA,OACX;AAAA,MAAA;AACS,QAAO,OAAA,IAAA,CAAA;AAAA,KAAA;AAAA,GAExB;AAAA,EA6BA,YAAY,IACZ,EAAA;AACI,IAAA,IAAA,CAAK,cAAe,EAAA,CAAA;AAEpB,IAAA,OAAO,IAAK,CAAA,OAAA,CAAQ,QAAS,CAAA,GAAG,IAAiE,CAAA,CAAA;AAAA,GACrG;AAAA,EAoBA,aAAa,IACb,EAAA;AACI,IAAA,IAAA,CAAK,cAAe,EAAA,CAAA;AAEpB,IAAA,OAAO,IAAK,CAAA,OAAA,CAAQ,SAAU,CAAA,GAAG,IAAkE,CAAA,CAAA;AAAA,GACvG;AAAA,EAOA,gBAAA,CAAiB,MAAc,QAC/B,EAAA;AACI,IAAA,OAAO,IAAK,CAAA,MAAA,CAAO,WAAY,CAAA,IAAA,EAAM,QAAQ,CAAA,CAAA;AAAA,GACjD;AAAA,EAOA,mBAAA,CAAoB,MAAc,QAClC,EAAA;AACI,IAAA,IAAI,QACJ,EAAA;AACI,MAAA,OAAO,IAAK,CAAA,MAAA,CAAO,cAAe,CAAA,IAAA,EAAM,QAAQ,CAAA,CAAA;AAAA,KACpD;AAEA,IAAO,OAAA,IAAA,CAAK,MAAO,CAAA,kBAAA,CAAmB,IAAI,CAAA,CAAA;AAAA,GAC9C;AAAA,EAOA,cAAc,KACd,EAAA;AACI,IAAA,KAAA,CAAM,MAAS,GAAA,IAAA,CAAA;AAEf,IAAA,OAAO,IAAK,CAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,MAAM,KAAK,CAAA,CAAA;AAAA,GAC7C;AAAA,EAGA,UACA,GAAA;AACI,IAAA,QAAQ,IAAK,CAAA,YAAA;AAAA,MAAA,KAEJ,IACL,EAAA;AACI,QAAA,MAAM,EAAE,KAAA,EAAO,MAAQ,EAAA,IAAA,EAAM,GAAQ,EAAA,GAAA,IAAA,CAAA;AAErC,QAAA,MAAM,YAAY,GAAI,CAAA,YAAA,CAAa,CAAG,EAAA,CAAA,EAAG,OAAO,MAAM,CAAA,CAAA;AACtD,QAAA,MAAM,EAAE,MAAA,EAAQ,UAAY,EAAA,MAAA,EAAA,GAAW,SAAU,CAAA,IAAA,CAAA;AAEjD,QAAA,OAAO,IAAI,UAAA,CAAW,MAAQ,EAAA,UAAA,EAAY,MAAM,CAAA,CAAA;AAAA,OACpD;AAAA,MAAA,KACK,OACL,EAAA;AACI,QAAA,MAAM,EAAE,KAAA,EAAO,MAAQ,EAAA,GAAA,EAAK,EAAO,EAAA,GAAA,IAAA,CAAA;AAEnC,QAAA,MAAM,gBAAgB,CAAI,GAAA,KAAA,CAAA;AAC1B,QAAA,MAAM,MAAS,GAAA,IAAI,UAAW,CAAA,MAAA,GAAS,aAAa,CAAA,CAAA;AAEpD,QAAG,EAAA,CAAA,UAAA,CAAW,GAAG,CAAG,EAAA,KAAA,EAAO,QAAQ,EAAG,CAAA,IAAA,EAAM,EAAG,CAAA,aAAA,EAAe,MAAM,CAAA,CAAA;AAEpE,QAAM,MAAA,GAAA,GAAM,IAAI,UAAA,CAAW,aAAa,CAAA,CAAA;AAGxC,QAAA,KAAA,IAAS,MAAS,GAAA,CAAA,EAAG,MAAS,GAAA,MAAA,IAAU,GAAG,MAC3C,EAAA,EAAA;AACI,UAAM,MAAA,MAAA,GAAS,SAAS,MAAS,GAAA,CAAA,CAAA;AACjC,UAAA,MAAM,WAAW,MAAS,GAAA,aAAA,CAAA;AAC1B,UAAA,MAAM,WAAW,MAAS,GAAA,aAAA,CAAA;AAC1B,UAAA,MAAM,GAAM,GAAA,MAAA,CAAO,QAAS,CAAA,QAAA,EAAU,WAAW,aAAa,CAAA,CAAA;AAC9D,UAAA,MAAM,GAAM,GAAA,MAAA,CAAO,QAAS,CAAA,QAAA,EAAU,WAAW,aAAa,CAAA,CAAA;AAE9D,UAAA,GAAA,CAAI,IAAI,GAAG,CAAA,CAAA;AACX,UAAA,GAAA,CAAI,IAAI,GAAG,CAAA,CAAA;AACX,UAAA,GAAA,CAAI,IAAI,GAAG,CAAA,CAAA;AAAA,SACf;AAEA,QAAO,OAAA,MAAA,CAAA;AAAA,OACX;AAAA,MAEA,SAAA;AACI,QAAM,MAAA,IAAI,MAAM,kCAAkC,CAAA,CAAA;AAAA,OACtD;AAAA,KAAA;AAAA,GAER;AAAA,EAGA,cACA,GAAA;AACI,IAAI,IAAA,IAAA,CAAK,iBAAiB,OAC1B,EAAA;AACI,MAAA,MAAM,EAAE,KAAA,EAAO,MAAQ,EAAA,IAAA,EAAM,GAAQ,EAAA,GAAA,IAAA,CAAA;AAErC,MAAM,MAAA,MAAA,GAAS,KAAK,UAAW,EAAA,CAAA;AAC/B,MAAM,MAAA,SAAA,GAAY,gBAAgB,IAAI,iBAAA,CAAkB,OAAO,MAAM,CAAA,EAAG,OAAO,MAAM,CAAA,CAAA;AAErF,MAAI,GAAA,CAAA,YAAA,CAAa,SAAW,EAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAAA,KACpC;AAAA,GACJ;AAAA,EAMQ,gBAAgB,GACxB,EAAA;AACI,IAAA,MAAM,aAAa,GAAI,CAAA,SAAA,CAAA;AAEvB,IAAI,GAAA,CAAA,SAAA,GAAY,SAAmB,SAAA,CAAA,KAAA,EAAA,GAAe,IAClD,EAAA;AACI,MAAA,IAAI,iBAAiB,iBACrB,EAAA;AACI,QAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,QAAA,KAAA,GAAQ,KAAM,CAAA,OAAA,CAAA;AAAA,OAClB;AAEA,MAAA,OAAO,UAAW,CAAA,IAAA,CAAK,IAAM,EAAA,KAAA,EAAO,GAAG,IAAgD,CAAA,CAAA;AAAA,KAC3F,CAAA;AAEA,IAAA,MAAM,iBAAiB,GAAI,CAAA,aAAA,CAAA;AAE3B,IAAI,GAAA,CAAA,aAAA,GAAgB,SAAuB,aAAA,CAAA,KAAA,EAAA,GAAe,IAC1D,EAAA;AACI,MAAA,IAAI,iBAAiB,iBACrB,EAAA;AACI,QAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,QAAA,KAAA,GAAQ,KAAM,CAAA,OAAA,CAAA;AAAA,OAClB;AAEA,MAAA,OAAO,cAAe,CAAA,IAAA,CAAK,IAAM,EAAA,KAAA,EAAO,GAAG,IAAoD,CAAA,CAAA;AAAA,KACnG,CAAA;AAAA,GACJ;AAAA,EAMQ,gBAAgB,EACxB,EAAA;AACI,IAAA,MAAM,sBAAsB,EAAG,CAAA,kBAAA,CAAA;AAI/B,IAAG,EAAA,CAAA,kBAAA,GAAqB,SAA4B,kBAAA,CAAA,OAAA,EAAkB,IACtE,EAAA;AACI,MAAA,IAAI,QAAQ,SAAa,IAAA,CAAE,UAAY,CAAA,IAAA,CAAK,IAAI,CAChD,EAAA;AACI,QAAA,MAAM,GAAM,GAAA,IAAI,MAAO,CAAA,CAAA,EAAG,IAAiB,CAAA,WAAA,CAAA,CAAA,CAAA;AAE3C,QAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,OAAQ,CAAA,SAAA,CAAU,QAAQ,CAC9C,EAAA,EAAA;AACI,UAAM,MAAA,KAAA,GAAQ,OAAQ,CAAA,SAAA,CAAU,CAAG,CAAA,CAAA,IAAA,CAAA;AAEnC,UAAI,IAAA,GAAA,CAAI,IAAK,CAAA,KAAK,CAClB,EAAA;AACI,YAAO,IAAA,GAAA,KAAA,CAAA;AAAA,WACX;AAAA,SACJ;AAAA,OACJ;AAEA,MAAA,OAAO,mBAAoB,CAAA,IAAA,CAAK,IAAM,EAAA,OAAA,EAAS,IAAI,CAAA,CAAA;AAAA,KACvD,CAAA;AAMA,IAAA,SAAA,qBAAA,CAA+B,MAC/B,EAAA;AACI,MAAA,IAAI,kBAAkB,iBACtB,EAAA;AACI,QAAA,MAAA,CAAO,cAAe,EAAA,CAAA;AAEtB,QAAO,OAAA,MAAA,CAAA;AAAA,OACX;AACA,MAAA,IAAI,kBAAkB,KACtB,EAAA;AACI,QAAM,MAAA,EAAE,OAAO,MAAW,EAAA,GAAA,MAAA,CAAA;AAC1B,QAAA,MAAM,MAAS,GAAA,IAAI,MAAO,CAAA,KAAA,EAAO,MAAM,CAAA,CAAA;AAEvC,QAAA,MAAA,CAAO,WAAW,IAAI,CAAA,CAAE,SAAU,CAAA,MAAA,EAAQ,GAAG,CAAC,CAAA,CAAA;AAE9C,QAAO,OAAA,MAAA,CAAA;AAAA,OACX;AAEA,MAAO,OAAA,MAAA,CAAA;AAAA,KACX;AAEA,IAAA,MAAM,cAAc,EAAG,CAAA,UAAA,CAAA;AAEvB,IAAG,EAAA,CAAA,UAAA,GAAa,uBAAuB,IACvC,EAAA;AACI,MAAA,IAAA,CAAK,KAAK,MAAS,GAAA,CAAA,CAAA,GAAK,sBAAsB,IAAK,CAAA,IAAA,CAAK,SAAS,CAAE,CAAA,CAAA,CAAA;AAEnE,MAAO,OAAA,WAAA,CAAY,KAAM,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAAA,KACvC,CAAA;AAEA,IAAA,MAAM,iBAAiB,EAAG,CAAA,aAAA,CAAA;AAE1B,IAAG,EAAA,CAAA,aAAA,GAAgB,0BAA0B,IAC7C,EAAA;AACI,MAAA,IAAA,CAAK,KAAK,MAAS,GAAA,CAAA,CAAA,GAAK,sBAAsB,IAAK,CAAA,IAAA,CAAK,SAAS,CAAE,CAAA,CAAA,CAAA;AAEnE,MAAO,OAAA,cAAA,CAAe,KAAM,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAAA,KAC1C,CAAA;AAAA,GACJ;AACJ;;;;"}