diff --git a/cli/rollup.config.js b/cli/rollup.config.js index 64fe6d1f..97ee5c30 100644 --- a/cli/rollup.config.js +++ b/cli/rollup.config.js @@ -1,21 +1,21 @@ -import resolve from "@rollup/plugin-node-resolve"; -import cjs from "@rollup/plugin-commonjs"; -import asset from "./lib/asset-plugin.js"; -import json from "./lib/json-plugin.js"; -import autojson from "./lib/autojson-plugin.js"; -import { getBabelOutputPlugin } from "@rollup/plugin-babel"; -import { builtinModules } from "module"; +import resolve from '@rollup/plugin-node-resolve'; +import cjs from '@rollup/plugin-commonjs'; +import asset from './lib/asset-plugin.js'; +import json from './lib/json-plugin.js'; +import autojson from './lib/autojson-plugin.js'; +import { getBabelOutputPlugin } from '@rollup/plugin-babel'; +import { builtinModules } from 'module'; /** @type {import('rollup').RollupOptions} */ -export default ({ - input: "src/index.js", +export default { + input: 'src/index.js', output: { - dir: "build", - format: "cjs", - assetFileNames: "[name]-[hash][extname]", + dir: 'build', + format: 'cjs', + assetFileNames: '[name]-[hash][extname]', // This is needed so the resulting `index.js` can be // executed by `npx`. - banner: "#!/usr/bin/env node" + banner: '#!/usr/bin/env node', }, plugins: [ resolve(), @@ -26,20 +26,20 @@ export default ({ getBabelOutputPlugin({ babelrc: false, configFile: false, - minified: true, + minified: process.env.DEBUG != '', comments: false, presets: [ [ - "@babel/preset-env", + '@babel/preset-env', { targets: { - node: 12 + node: 12, }, - loose: true - } - ] - ] - }) + loose: true, + }, + ], + ], + }), ], - external: builtinModules -}); + external: builtinModules, +}; diff --git a/cli/src/codecs.js b/cli/src/codecs.js index 62e02487..4302e3c5 100644 --- a/cli/src/codecs.js +++ b/cli/src/codecs.js @@ -1,62 +1,62 @@ -import { promises as fsp } from "fs"; -import { instantiateEmscriptenWasm, pathify } from "./emscripten-utils.js"; +import { promises as fsp } from 'fs'; +import { instantiateEmscriptenWasm, pathify } from './emscripten-utils.js'; // MozJPEG -import mozEnc from "../../codecs/mozjpeg/enc/mozjpeg_enc.js"; -import mozEncWasm from "asset-url:../../codecs/mozjpeg/enc/mozjpeg_enc.wasm"; -import mozDec from "../../codecs/mozjpeg/dec/mozjpeg_dec.js"; -import mozDecWasm from "asset-url:../../codecs/mozjpeg/dec/mozjpeg_dec.wasm"; +// import mozEnc from '../../codecs/mozjpeg/enc/mozjpeg_enc.js'; +// import mozEncWasm from 'asset-url:../../codecs/mozjpeg/enc/mozjpeg_enc.wasm'; +// import mozDec from '../../codecs/mozjpeg/dec/mozjpeg_dec.js'; +// import mozDecWasm from 'asset-url:../../codecs/mozjpeg/dec/mozjpeg_dec.wasm'; // WebP -import webpEnc from "../../codecs/webp/enc/webp_enc.js"; -import webpEncWasm from "asset-url:../../codecs/webp/enc/webp_enc.wasm"; -import webpDec from "../../codecs/webp/dec/webp_dec.js"; -import webpDecWasm from "asset-url:../../codecs/webp/dec/webp_dec.wasm"; +import webpEnc from '../../codecs/webp/enc/webp_enc.js'; +import webpEncWasm from 'asset-url:../../codecs/webp/enc/webp_enc.wasm'; +import webpDec from '../../codecs/webp/dec/webp_dec.js'; +import webpDecWasm from 'asset-url:../../codecs/webp/dec/webp_dec.wasm'; // AVIF -import avifEnc from "../../codecs/avif/enc/avif_enc.js"; -import avifEncWasm from "asset-url:../../codecs/avif/enc/avif_enc.wasm"; -import avifDec from "../../codecs/avif/dec/avif_dec.js"; -import avifDecWasm from "asset-url:../../codecs/avif/dec/avif_dec.wasm"; +import avifEnc from '../../codecs/avif/enc/avif_node_enc.js'; +import avifEncWasm from 'asset-url:../../codecs/avif/enc/avif_node_enc.wasm'; +import avifDec from '../../codecs/avif/dec/avif_node_dec.js'; +import avifDecWasm from 'asset-url:../../codecs/avif/dec/avif_node_dec.wasm'; // PNG -import * as pngEncDec from "../../codecs/png/pkg/squoosh_png.js"; -import pngEncDecWasm from "asset-url:../../codecs/png/pkg/squoosh_png_bg.wasm"; -const pngEncDecPromise = pngEncDec.default( - fsp.readFile(pathify(pngEncDecWasm)) -); +import * as pngEncDec from '../../codecs/png/pkg/squoosh_png.js'; +import pngEncDecWasm from 'asset-url:../../codecs/png/pkg/squoosh_png_bg.wasm'; +// const pngEncDecPromise = pngEncDec.default( +// fsp.readFile(pathify(pngEncDecWasm)) +// ); // OxiPNG -import * as oxipng from "../../codecs/oxipng/pkg/squoosh_oxipng.js"; -import oxipngWasm from "asset-url:../../codecs/oxipng/pkg/squoosh_oxipng_bg.wasm"; -const oxipngPromise = oxipng.default(fsp.readFile(pathify(oxipngWasm))); +import * as oxipng from '../../codecs/oxipng/pkg/squoosh_oxipng.js'; +import oxipngWasm from 'asset-url:../../codecs/oxipng/pkg/squoosh_oxipng_bg.wasm'; +// const oxipngPromise = oxipng.default(fsp.readFile(pathify(oxipngWasm))); // Resize -import * as resize from "../../codecs/resize/pkg/squoosh_resize.js"; -import resizeWasm from "asset-url:../../codecs/resize/pkg/squoosh_resize_bg.wasm"; -const resizePromise = resize.default(fsp.readFile(pathify(resizeWasm))); +import * as resize from '../../codecs/resize/pkg/squoosh_resize.js'; +import resizeWasm from 'asset-url:../../codecs/resize/pkg/squoosh_resize_bg.wasm'; +// const resizePromise = resize.default(fsp.readFile(pathify(resizeWasm))); // rotate -import rotateWasm from "asset-url:../../codecs/rotate/rotate.wasm"; +import rotateWasm from 'asset-url:../../codecs/rotate/rotate.wasm'; // ImageQuant -import imageQuant from "../../codecs/imagequant/imagequant.js"; -import imageQuantWasm from "asset-url:../../codecs/imagequant/imagequant.wasm"; -const imageQuantPromise = instantiateEmscriptenWasm(imageQuant, imageQuantWasm); +import imageQuant from '../../codecs/imagequant/imagequant.js'; +import imageQuantWasm from 'asset-url:../../codecs/imagequant/imagequant.wasm'; +// const imageQuantPromise = instantiateEmscriptenWasm(imageQuant, imageQuantWasm); // Our decoders currently rely on a `ImageData` global. -import ImageData from "./image_data.js"; +import ImageData from './image_data.js'; globalThis.ImageData = ImageData; function resizeNameToIndex(name) { switch (name) { - case "triangle": + case 'triangle': return 0; - case "catrom": + case 'catrom': return 1; - case "mitchell": + case 'mitchell': return 2; - case "lanczos3": + case 'lanczos3': return 3; default: throw Error(`Unknown resize algorithm "${name}"`); @@ -67,10 +67,10 @@ function resizeWithAspect({ input_width, input_height, target_width, - target_height + target_height, }) { if (!target_width && !target_height) { - throw Error("Need to specify at least width or height when resizing"); + throw Error('Need to specify at least width or height when resizing'); } if (target_width && target_height) { return { width: target_width, height: target_height }; @@ -78,226 +78,228 @@ function resizeWithAspect({ if (!target_width) { return { width: Math.round((input_width / input_height) * target_height), - height: target_height + height: target_height, }; } if (!target_height) { return { width: target_width, - height: Math.round((input_height / input_width) * target_width) + height: Math.round((input_height / input_width) * target_width), }; } } export const preprocessors = { - resize: { - name: "Resize", - description: "Resize the image before compressing", - instantiate: async () => { - await resizePromise; - return ( - buffer, - input_width, - input_height, - { width, height, method, premultiply, linearRGB } - ) => { - ({ width, height } = resizeWithAspect({ - input_width, - input_height, - target_width: width, - target_height: height - })); - return new ImageData( - resize.resize( - buffer, - input_width, - input_height, - width, - height, - resizeNameToIndex(method), - premultiply, - linearRGB - ), - width, - height - ); - }; - }, - defaultOptions: { - method: "lanczos3", - fitMethod: "stretch", - premultiply: true, - linearRGB: true - } - }, - // TODO: Need to handle SVGs and HQX - quant: { - name: "ImageQuant", - description: "Reduce the number of colors used (aka. paletting)", - instantiate: async () => { - const imageQuant = await imageQuantPromise; - return (buffer, width, height, { numColors, dither }) => - new ImageData( - imageQuant.quantize(buffer, width, height, numColors, dither), - width, - height - ); - }, - defaultOptions: { - numColors: 255, - dither: 1.0 - } - }, - rotate: { - name: "Rotate", - description: "Rotate image", - instantiate: async () => { - return async (buffer, width, height, { degrees }) => { - const sameDimensions = degrees == 0 || degrees == 180; - const size = width * height * 4; - const { instance } = await WebAssembly.instantiate( - await fsp.readFile(pathify(rotateWasm)) - ); - const { memory } = instance.exports; - const pagesNeeded = Math.ceil( - (size * 2 - memory.buffer.byteLength) / (64 * 1024) - ); - memory.grow(pagesNeeded); - const view = new Uint8ClampedArray(memory.buffer); - view.set(buffer, 8); - instance.exports.rotate(width, height, degrees); - return new ImageData( - new Uint8ClampedArray(view.slice(size + 8, size * 2 + 8)), - sameDimensions ? width : height, - sameDimensions ? height : width - ); - }; - }, - defaultOptions: { - numRotations: 0 - } - } + // resize: { + // name: "Resize", + // description: "Resize the image before compressing", + // instantiate: async () => { + // await resizePromise; + // return ( + // buffer, + // input_width, + // input_height, + // { width, height, method, premultiply, linearRGB } + // ) => { + // ({ width, height } = resizeWithAspect({ + // input_width, + // input_height, + // target_width: width, + // target_height: height + // })); + // return new ImageData( + // resize.resize( + // buffer, + // input_width, + // input_height, + // width, + // height, + // resizeNameToIndex(method), + // premultiply, + // linearRGB + // ), + // width, + // height + // ); + // }; + // }, + // defaultOptions: { + // method: "lanczos3", + // fitMethod: "stretch", + // premultiply: true, + // linearRGB: true + // } + // }, + // // TODO: Need to handle SVGs and HQX + // quant: { + // name: "ImageQuant", + // description: "Reduce the number of colors used (aka. paletting)", + // instantiate: async () => { + // const imageQuant = await imageQuantPromise; + // return (buffer, width, height, { numColors, dither }) => + // new ImageData( + // imageQuant.quantize(buffer, width, height, numColors, dither), + // width, + // height + // ); + // }, + // defaultOptions: { + // numColors: 255, + // dither: 1.0 + // } + // }, + // rotate: { + // name: "Rotate", + // description: "Rotate image", + // instantiate: async () => { + // return async (buffer, width, height, { degrees }) => { + // const sameDimensions = degrees == 0 || degrees == 180; + // const size = width * height * 4; + // const { instance } = await WebAssembly.instantiate( + // await fsp.readFile(pathify(rotateWasm)) + // ); + // const { memory } = instance.exports; + // const pagesNeeded = Math.ceil( + // (size * 2 - memory.buffer.byteLength) / (64 * 1024) + // ); + // memory.grow(pagesNeeded); + // const view = new Uint8ClampedArray(memory.buffer); + // view.set(buffer, 8); + // instance.exports.rotate(width, height, degrees); + // return new ImageData( + // new Uint8ClampedArray(view.slice(size + 8, size * 2 + 8)), + // sameDimensions ? width : height, + // sameDimensions ? height : width + // ); + // }; + // }, + // defaultOptions: { + // numRotations: 0 + // } + // } }; export const codecs = { - mozjpeg: { - name: "MozJPEG", - extension: "jpg", - detectors: [/^\xFF\xD8\xFF/], - dec: () => instantiateEmscriptenWasm(mozDec, mozDecWasm), - enc: () => instantiateEmscriptenWasm(mozEnc, mozEncWasm), - defaultEncoderOptions: { - quality: 75, - baseline: false, - arithmetic: false, - progressive: true, - optimize_coding: true, - smoothing: 0, - color_space: 3 /*YCbCr*/, - quant_table: 3, - trellis_multipass: false, - trellis_opt_zero: false, - trellis_opt_table: false, - trellis_loops: 1, - auto_subsample: true, - chroma_subsample: 2, - separate_chroma_quality: false, - chroma_quality: 75 - }, - autoOptimize: { - option: "quality", - min: 0, - max: 100 - } - }, - webp: { - name: "WebP", - extension: "webp", - detectors: [/^RIFF....WEBPVP8[LX ]/], - dec: () => instantiateEmscriptenWasm(webpDec, webpDecWasm), - enc: () => instantiateEmscriptenWasm(webpEnc, webpEncWasm), - defaultEncoderOptions: { - quality: 75, - target_size: 0, - target_PSNR: 0, - method: 4, - sns_strength: 50, - filter_strength: 60, - filter_sharpness: 0, - filter_type: 1, - partitions: 0, - segments: 4, - pass: 1, - show_compressed: 0, - preprocessing: 0, - autofilter: 0, - partition_limit: 0, - alpha_compression: 1, - alpha_filtering: 1, - alpha_quality: 100, - lossless: 0, - exact: 0, - image_hint: 0, - emulate_jpeg_size: 0, - thread_level: 0, - low_memory: 0, - near_lossless: 100, - use_delta_palette: 0, - use_sharp_yuv: 0 - }, - autoOptimize: { - option: "quality", - min: 0, - max: 100 - } - }, + // mozjpeg: { + // name: "MozJPEG", + // extension: "jpg", + // detectors: [/^\xFF\xD8\xFF/], + // dec: () => instantiateEmscriptenWasm(mozDec, mozDecWasm), + // enc: () => instantiateEmscriptenWasm(mozEnc, mozEncWasm), + // defaultEncoderOptions: { + // quality: 75, + // baseline: false, + // arithmetic: false, + // progressive: true, + // optimize_coding: true, + // smoothing: 0, + // color_space: 3 /*YCbCr*/, + // quant_table: 3, + // trellis_multipass: false, + // trellis_opt_zero: false, + // trellis_opt_table: false, + // trellis_loops: 1, + // auto_subsample: true, + // chroma_subsample: 2, + // separate_chroma_quality: false, + // chroma_quality: 75 + // }, + // autoOptimize: { + // option: "quality", + // min: 0, + // max: 100 + // } + // }, + // webp: { + // name: "WebP", + // extension: "webp", + // detectors: [/^RIFF....WEBPVP8[LX ]/], + // dec: () => instantiateEmscriptenWasm(webpDec, webpDecWasm), + // enc: () => instantiateEmscriptenWasm(webpEnc, webpEncWasm), + // defaultEncoderOptions: { + // quality: 75, + // target_size: 0, + // target_PSNR: 0, + // method: 4, + // sns_strength: 50, + // filter_strength: 60, + // filter_sharpness: 0, + // filter_type: 1, + // partitions: 0, + // segments: 4, + // pass: 1, + // show_compressed: 0, + // preprocessing: 0, + // autofilter: 0, + // partition_limit: 0, + // alpha_compression: 1, + // alpha_filtering: 1, + // alpha_quality: 100, + // lossless: 0, + // exact: 0, + // image_hint: 0, + // emulate_jpeg_size: 0, + // thread_level: 0, + // low_memory: 0, + // near_lossless: 100, + // use_delta_palette: 0, + // use_sharp_yuv: 0 + // }, + // autoOptimize: { + // option: "quality", + // min: 0, + // max: 100 + // } + // }, avif: { - name: "AVIF", - extension: "avif", + name: 'AVIF', + extension: 'avif', detectors: [/^\x00\x00\x00 ftypavif\x00\x00\x00\x00/], dec: () => instantiateEmscriptenWasm(avifDec, avifDecWasm), enc: () => instantiateEmscriptenWasm(avifEnc, avifEncWasm), defaultEncoderOptions: { - minQuantizer: 16, - maxQuantizer: 16, + minQuantizer: 33, + maxQuantizer: 63, + minQuantizerAlpha: 33, + maxQuantizerAlpha: 63, tileColsLog2: 0, tileRowsLog2: 0, - speed: 10, - subsample: 0 + speed: 8, + subsample: 1, }, autoOptimize: { - option: "maxQuantizer", + option: 'maxQuantizer', min: 0, - max: 62 - } + max: 62, + }, }, - oxipng: { - name: "OxiPNG", - extension: "png", - detectors: [/^\x89PNG\x0D\x0A\x1A\x0A/], - dec: async () => { - await pngEncDecPromise; - return { decode: pngEncDec.decode }; - }, - enc: async () => { - await pngEncDecPromise; - await oxipngPromise; - return { - encode: (buffer, width, height, opts) => { - const simplePng = new Uint8Array( - pngEncDec.encode(new Uint8Array(buffer), width, height) - ); - return new Uint8Array(oxipng.optimise(simplePng, opts.level)); - } - }; - }, - defaultEncoderOptions: { - level: 2 - }, - autoOptimize: { - option: "level", - min: 6, - max: 1 - } - } + // oxipng: { + // name: "OxiPNG", + // extension: "png", + // detectors: [/^\x89PNG\x0D\x0A\x1A\x0A/], + // dec: async () => { + // await pngEncDecPromise; + // return { decode: pngEncDec.decode }; + // }, + // enc: async () => { + // await pngEncDecPromise; + // await oxipngPromise; + // return { + // encode: (buffer, width, height, opts) => { + // const simplePng = new Uint8Array( + // pngEncDec.encode(new Uint8Array(buffer), width, height) + // ); + // return new Uint8Array(oxipng.optimise(simplePng, opts.level)); + // } + // }; + // }, + // defaultEncoderOptions: { + // level: 2 + // }, + // autoOptimize: { + // option: "level", + // min: 6, + // max: 1 + // } + // } }; diff --git a/codecs/avif/Makefile b/codecs/avif/Makefile index d5b5cec8..85457381 100644 --- a/codecs/avif/Makefile +++ b/codecs/avif/Makefile @@ -9,9 +9,12 @@ export BUILD_DIR = node_modules/build export LIBAOM_DIR = node_modules/libaom OUT_ENC_JS = enc/avif_enc.js +OUT_NODE_ENC_JS = enc/avif_node_enc.js OUT_ENC_MT_JS = enc/avif_enc_mt.js OUT_DEC_JS = dec/avif_dec.js +OUT_NODE_DEC_JS = dec/avif_node_dec.js +OUT_ENC_CPP = enc/avif_enc.cpp OUT_ENC_CPP = enc/avif_enc.cpp OUT_DEC_CPP = dec/avif_dec.cpp @@ -19,7 +22,7 @@ HELPER_MAKEFLAGS := -f helper.Makefile .PHONY: all clean -all: $(OUT_ENC_JS) $(OUT_DEC_JS) $(OUT_ENC_MT_JS) +all: $(OUT_ENC_JS) $(OUT_DEC_JS) $(OUT_ENC_MT_JS) $(OUT_NODE_ENC_JS) $(OUT_NODE_DEC_JS) $(OUT_ENC_JS): $(OUT_ENC_CPP) $(CODEC_DIR)/CMakeLists.txt $(LIBAOM_DIR)/CMakeLists.txt $(MAKE) \ @@ -31,6 +34,20 @@ $(OUT_ENC_JS): $(OUT_ENC_CPP) $(CODEC_DIR)/CMakeLists.txt $(LIBAOM_DIR)/CMakeLis -DCONFIG_MULTITHREAD=0 \ -DCONFIG_AV1_HIGHBITDEPTH=0 \ " \ + ENVIRONMENT="worker" \ + LIBAVIF_FLAGS="-DAVIF_CODEC_AOM_DECODE=0" + +$(OUT_NODE_ENC_JS): $(OUT_ENC_CPP) $(CODEC_DIR)/CMakeLists.txt $(LIBAOM_DIR)/CMakeLists.txt + $(MAKE) \ + $(HELPER_MAKEFLAGS) \ + OUT_JS=$@ \ + OUT_CPP=$< \ + LIBAOM_FLAGS="\ + -DCONFIG_AV1_DECODER=0 \ + -DCONFIG_MULTITHREAD=0 \ + -DCONFIG_AV1_HIGHBITDEPTH=0 \ + " \ + ENVIRONMENT="node" \ LIBAVIF_FLAGS="-DAVIF_CODEC_AOM_DECODE=0" $(OUT_ENC_MT_JS): $(OUT_ENC_CPP) $(CODEC_DIR)/CMakeLists.txt $(LIBAOM_DIR)/CMakeLists.txt @@ -42,6 +59,7 @@ $(OUT_ENC_MT_JS): $(OUT_ENC_CPP) $(CODEC_DIR)/CMakeLists.txt $(LIBAOM_DIR)/CMake -DCONFIG_AV1_DECODER=0 \ -DCONFIG_AV1_HIGHBITDEPTH=0 \ " \ + ENVIRONMENT="worker" \ LIBAVIF_FLAGS="-DAVIF_CODEC_AOM_DECODE=0" \ OUT_FLAGS="-pthread" @@ -54,6 +72,19 @@ $(OUT_DEC_JS): $(OUT_DEC_CPP) $(CODEC_DIR)/CMakeLists.txt $(LIBAOM_DIR)/CMakeLis -DCONFIG_AV1_ENCODER=0 \ -DCONFIG_MULTITHREAD=0 \ " \ + ENVIRONMENT="worker" \ + LIBAVIF_FLAGS="-DAVIF_CODEC_AOM_ENCODE=0" + +$(OUT_NODE_DEC_JS): + $(MAKE) \ + $(HELPER_MAKEFLAGS) \ + OUT_JS=$@ \ + OUT_CPP=$< \ + LIBAOM_FLAGS="\ + -DCONFIG_AV1_ENCODER=0 \ + -DCONFIG_MULTITHREAD=0 \ + " \ + ENVIRONMENT="node" \ LIBAVIF_FLAGS="-DAVIF_CODEC_AOM_ENCODE=0" $(CODEC_PACKAGE): diff --git a/codecs/avif/dec/avif_node_dec.js b/codecs/avif/dec/avif_node_dec.js new file mode 100644 index 00000000..0e1bfeb3 --- /dev/null +++ b/codecs/avif/dec/avif_node_dec.js @@ -0,0 +1,45 @@ + +var avif_node_dec = (function() { + var _scriptDir = import.meta.url; + + return ( +function(avif_node_dec) { + avif_node_dec = avif_node_dec || {}; + + +var d;d||(d=typeof avif_node_dec !== 'undefined' ? avif_node_dec : {});var aa,q;d.ready=new Promise(function(a,b){aa=a;q=b});var r={},t;for(t in d)d.hasOwnProperty(t)&&(r[t]=d[t]);var u="",ba,v,w,x;u=__dirname+"/";ba=function(a){w||(w=require("fs"));x||(x=require("path"));a=x.normalize(a);return w.readFileSync(a,null)};v=function(a){a=ba(a);a.buffer||(a=new Uint8Array(a));a.buffer||y("Assertion failed: undefined");return a};1=g){var h=a.charCodeAt(++f);g=65536+((g&1023)<<10)|h&1023}if(127>=g){if(b>=c)break;e[b++]=g}else{if(2047>=g){if(b+1>=c)break;e[b++]=192|g>>6}else{if(65535>=g){if(b+2>=c)break;e[b++]=224|g>>12}else{if(b+3>=c)break;e[b++]=240|g>>18;e[b++]=128|g>>12&63}e[b++]=128|g>>6&63}e[b++]=128|g&63}}e[b]=0}}var ha=new TextDecoder("utf-16le"); +function ia(a,b){var c=a>>1;for(b=c+b/2;!(c>=b)&&E[c];)++c;return ha.decode(D.subarray(a,c<<1))}function ja(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var e=b;c=c<2*a.length?c/2:a.length;for(var f=0;f>1]=a.charCodeAt(f),b+=2;F[b>>1]=0;return b-e}function ka(a){return 2*a.length}function la(a,b){for(var c=0,e="";!(c>=b/4);){var f=G[a+4*c>>2];if(0==f)break;++c;65536<=f?(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023)):e+=String.fromCharCode(f)}return e} +function ma(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var e=b;c=e+c-4;for(var f=0;f=g){var h=a.charCodeAt(++f);g=65536+((g&1023)<<10)|h&1023}G[b>>2]=g;b+=4;if(b+4>c)break}G[b>>2]=0;return b-e}function na(a){for(var b=0,c=0;c=e&&++c;b+=4}return b}var H,I,D,F,E,G,J,oa,pa; +function qa(a){H=a;d.HEAP8=I=new Int8Array(a);d.HEAP16=F=new Int16Array(a);d.HEAP32=G=new Int32Array(a);d.HEAPU8=D=new Uint8Array(a);d.HEAPU16=E=new Uint16Array(a);d.HEAPU32=J=new Uint32Array(a);d.HEAPF32=oa=new Float32Array(a);d.HEAPF64=pa=new Float64Array(a)}var ra=d.INITIAL_MEMORY||16777216;d.wasmMemory?B=d.wasmMemory:B=new WebAssembly.Memory({initial:ra/65536,maximum:32768});B&&(H=B.buffer);ra=H.byteLength;qa(H);var K,sa=[],ta=[],ua=[],va=[]; +function wa(){var a=d.preRun.shift();sa.unshift(a)}var L=0,M=null,N=null;d.preloadedImages={};d.preloadedAudios={};function y(a){if(d.onAbort)d.onAbort(a);z(a);ca=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");q(a);throw a;}function xa(){var a=P;return String.prototype.startsWith?a.startsWith("data:application/octet-stream;base64,"):0===a.indexOf("data:application/octet-stream;base64,")}var P="avif_node_dec.wasm"; +if(!xa()){var ya=P;P=d.locateFile?d.locateFile(ya,u):u+ya}function za(){try{if(A)return new Uint8Array(A);if(v)return v(P);throw"both async and sync fetching of the wasm failed";}catch(a){y(a)}}function Q(a){for(;0=c?"_"+a:a}return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)} +function Ea(a){var b=Error,c=Da(a,function(e){this.name=a;this.message=e;e=Error(e).stack;void 0!==e&&(this.stack=this.toString()+"\n"+e.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var Fa=void 0;function U(a){throw new Fa(a);} +function V(a,b,c){c=c||{};if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var e=b.name;a||U('type "'+e+'" must have a positive integer typeid pointer');if(Ba.hasOwnProperty(a)){if(c.A)return;U("Cannot register type '"+e+"' twice")}Ba[a]=b;delete Ca[a];T.hasOwnProperty(a)&&(b=T[a],delete T[a],b.forEach(function(f){f()}))}var Ga=[],W=[{},{value:void 0},{value:null},{value:!0},{value:!1}]; +function Ha(a){switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Ga.length?Ga.pop():W.length;W[b]={B:1,value:a};return b}}function Ia(a){return this.fromWireType(J[a>>2])}function Ja(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a} +function Ka(a,b){switch(b){case 2:return function(c){return this.fromWireType(oa[c>>2])};case 3:return function(c){return this.fromWireType(pa[c>>3])};default:throw new TypeError("Unknown float type: "+a);}} +function La(a,b,c){switch(b){case 0:return c?function(e){return I[e]}:function(e){return D[e]};case 1:return c?function(e){return F[e>>1]}:function(e){return E[e>>1]};case 2:return c?function(e){return G[e>>2]}:function(e){return J[e>>2]};default:throw new TypeError("Unknown integer type: "+a);}}for(var Ma=Array(256),X=0;256>X;++X)Ma[X]=String.fromCharCode(X);Aa=Ma;Fa=d.BindingError=Ea("BindingError");d.InternalError=Ea("InternalError"); +d.count_emval_handles=function(){for(var a=0,b=5;b>g])},s:null})},i:function(a,b){b=S(b);V(a,{name:b,fromWireType:function(c){var e=W[c].value;4>>l}}var p=-1!=b.indexOf("unsigned"); +V(a,{name:b,fromWireType:g,toWireType:function(m,k){if("number"!==typeof k&&"boolean"!==typeof k)throw new TypeError('Cannot convert "'+Ja(k)+'" to '+this.name);if(kf)throw new TypeError('Passing a number "'+Ja(k)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+e+", "+f+"]!");return p?k>>>0:k|0},argPackAdvance:8,readValueFromPointer:La(b,h,0!==e),s:null})},b:function(a,b,c){function e(g){g>>=2;var h=J;return new f(H,h[g+1],h[g])}var f=[Int8Array, +Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=S(c);V(a,{name:c,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{A:!0})},g:function(a,b){b=S(b);var c="std::string"===b;V(a,{name:b,fromWireType:function(e){var f=J[e>>2];if(c)for(var g=e+4,h=0;h<=f;++h){var l=e+4+h;if(h==f||0==D[l]){if(g){for(var p=g+(l-g),m=g;!(m>=p)&&D[m];)++m;g=da.decode(D.subarray(g,m))}else g="";if(void 0===k)var k=g;else k+=String.fromCharCode(0),k+=g;g=l+1}}else{k=Array(f);for(h= +0;h=n&&(n=65536+((n&1023)<<10)|f.charCodeAt(++k)&1023);127>=n?++m:m=2047>=n?m+2:65535>=n?m+3:m+4}return m}:function(){return f.length})(), +l=Oa(4+h+1);J[l>>2]=h;if(c&&g)fa(f,l+4,h+1);else if(g)for(g=0;g>2],k=h(),n,C=p+4,O=0;O<=m;++O){var ea=p+4+O*b;if(O==m||0==k[ea>>l])C=e(C,ea-C),void 0===n?n=C:(n+=String.fromCharCode(0),n+=C),C=ea+b}Y(p);return n},toWireType:function(p,m){"string"!==typeof m&&U("Cannot pass non-string to C++ string type "+c);var k=g(m),n=Oa(4+k+b);J[n>>2]=k>>l;f(m,n+4,k+b);null!==p&&p.push(Y,n);return n},argPackAdvance:8,readValueFromPointer:Ia,s:function(p){Y(p)}})},k:function(a,b){b=S(b);V(a,{C:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})}, +h:function(a,b,c){D.copyWithin(a,b,b+c)},d:function(a){a>>>=0;var b=D.length;if(2147483648=c;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);e=Math.max(16777216,a,e);0>>16);qa(B.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},a:B}; +(function(){function a(f){d.asm=f.exports;K=d.asm.l;L--;d.monitorRunDependencies&&d.monitorRunDependencies(L);0==L&&(null!==M&&(clearInterval(M),M=null),N&&(f=N,N=null,f()))}function b(f){a(f.instance)}function c(f){return Promise.resolve().then(za).then(function(g){return WebAssembly.instantiate(g,e)}).then(f,function(g){z("failed to asynchronously prepare wasm: "+g);y(g)})}var e={a:Pa};L++;d.monitorRunDependencies&&d.monitorRunDependencies(L);if(d.instantiateWasm)try{return d.instantiateWasm(e, +a)}catch(f){return z("Module.instantiateWasm callback failed with error: "+f),!1}(function(){return A||"function"!==typeof WebAssembly.instantiateStreaming||xa()||"function"!==typeof fetch?c(b):fetch(P,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(b,function(g){z("wasm streaming compile failed: "+g);z("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(q);return{}})(); +var Na=d.___wasm_call_ctors=function(){return(Na=d.___wasm_call_ctors=d.asm.m).apply(null,arguments)};d.___getTypeName=function(){return(d.___getTypeName=d.asm.n).apply(null,arguments)};d.___embind_register_native_and_builtin_types=function(){return(d.___embind_register_native_and_builtin_types=d.asm.o).apply(null,arguments)};var Oa=d._malloc=function(){return(Oa=d._malloc=d.asm.p).apply(null,arguments)},Y=d._free=function(){return(Y=d._free=d.asm.q).apply(null,arguments)},Z; +N=function Qa(){Z||Ra();Z||(N=Qa)}; +function Ra(){function a(){if(!Z&&(Z=!0,d.calledRun=!0,!ca)){Q(ta);Q(ua);aa(d);if(d.onRuntimeInitialized)d.onRuntimeInitialized();if(d.postRun)for("function"==typeof d.postRun&&(d.postRun=[d.postRun]);d.postRun.length;){var b=d.postRun.shift();va.unshift(b)}Q(va)}}if(!(0=b)&&z[c];)++c;return oa.decode(z.subarray(a,c))} +function ra(a,b,c,d){if(!(0=h){var k=a.charCodeAt(++f);h=65536+((h&1023)<<10)|k&1023}if(127>=h){if(c>=d)break;b[c++]=h}else{if(2047>=h){if(c+1>=d)break;b[c++]=192|h>>6}else{if(65535>=h){if(c+2>=d)break;b[c++]=224|h>>12}else{if(c+3>=d)break;b[c++]=240|h>>18;b[c++]=128|h>>12&63}b[c++]=128|h>>6&63}b[c++]=128|h&63}}b[c]=0;return c-e} +function sa(a){for(var b=0,c=0;c=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++c)&1023);127>=d?++b:b=2047>=d?b+2:65535>=d?b+3:b+4}return b}var ta=new TextDecoder("utf-16le");function ua(a,b){var c=a>>1;for(b=c+b/2;!(c>=b)&&va[c];)++c;return ta.decode(z.subarray(a,c<<1))}function wa(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=a.charCodeAt(e),b+=2;A[b>>1]=0;return b-d} +function xa(a){return 2*a.length}function ya(a,b){for(var c=0,d="";!(c>=b/4);){var e=B[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d}function za(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e=f){var h=a.charCodeAt(++e);f=65536+((f&1023)<<10)|h&1023}B[b>>2]=f;b+=4;if(b+4>c)break}B[b>>2]=0;return b-d} +function Aa(a){for(var b=0,c=0;c=d&&++c;b+=4}return b}var C,D,z,A,va,B,F,Ba,Ca;function Da(a){C=a;g.HEAP8=D=new Int8Array(a);g.HEAP16=A=new Int16Array(a);g.HEAP32=B=new Int32Array(a);g.HEAPU8=z=new Uint8Array(a);g.HEAPU16=va=new Uint16Array(a);g.HEAPU32=F=new Uint32Array(a);g.HEAPF32=Ba=new Float32Array(a);g.HEAPF64=Ca=new Float64Array(a)}var Ea=g.INITIAL_MEMORY||16777216;g.wasmMemory?x=g.wasmMemory:x=new WebAssembly.Memory({initial:Ea/65536,maximum:32768}); +x&&(C=x.buffer);Ea=C.byteLength;Da(C);var G,Fa=[],Ga=[],Ha=[],Ia=[];function Ja(){var a=g.preRun.shift();Fa.unshift(a)}var H=0,Ka=null,La=null;g.preloadedImages={};g.preloadedAudios={};function r(a){if(g.onAbort)g.onAbort(a);v(a);na=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");ba(a);throw a;} +function Ma(){var a=Na;return String.prototype.startsWith?a.startsWith("data:application/octet-stream;base64,"):0===a.indexOf("data:application/octet-stream;base64,")}var Na="avif_node_enc.wasm";if(!Ma()){var Oa=Na;Na=g.locateFile?g.locateFile(Oa,da):da+Oa}function Pa(){try{if(ma)return new Uint8Array(ma);if(fa)return fa(Na);throw"both async and sync fetching of the wasm failed";}catch(a){r(a)}}var I,Qa; +function Ra(a){for(;0=b||(b=Math.max(b, +c*(1048576>c?2:1.125)>>>0),0!=c&&(b=Math.max(b,256)),c=a.da,a.da=new Uint8Array(b),0b)a.da.length=b;else for(;a.da.length=a.node.ga)return 0;a=Math.min(a.node.ga-e,d);if(8b)throw new J(28);return b},ya:function(a,b,c){K.Aa(a.node,b+c);a.node.ga=Math.max(a.node.ga,b+c)},Fa:function(a,b,c,d,e,f){assert(0===b);if(32768!==(a.node.mode&61440))throw new J(43);a=a.node.da;if(f&2||a.buffer!==C){if(0>>0)%mb.length}function gb(a,b){var c;if(c=(c=sb(a,"x"))?c:a.ea.lookup?0:2)throw new J(c,a);for(c=mb[rb(a.id,b)];c;c=c.Ta){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.ea.lookup(a,b)} +function eb(a,b,c,d){a=new tb(a,b,c,d);b=rb(a.parent.id,a.name);a.Ta=mb[b];return mb[b]=a}var ub={r:0,rs:1052672,"r+":2,w:577,wx:705,xw:705,"w+":578,"wx+":706,"xw+":706,a:1089,ax:1217,xa:1217,"a+":1090,"ax+":1218,"xa+":1218};function vb(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function sb(a,b){if(nb)return 0;if(-1===b.indexOf("r")||a.mode&292){if(-1!==b.indexOf("w")&&!(a.mode&146)||-1!==b.indexOf("x")&&!(a.mode&73))return 2}else return 2;return 0} +function wb(a,b){try{return gb(a,b),20}catch(c){}return sb(a,"wx")}function xb(a){var b=4096;for(a=a||0;a<=b;a++)if(!kb[a])return a;throw new J(33);}function yb(a,b){zb||(zb=function(){},zb.prototype={});var c=new zb,d;for(d in a)c[d]=a[d];a=c;b=xb(b);a.fd=b;return kb[b]=a}var db={open:function(a){a.fa=jb[a.node.rdev].fa;a.fa.open&&a.fa.open(a)},oa:function(){throw new J(70);}};function $a(a,b){jb[a]={fa:b}} +function Ab(a,b){var c="/"===b,d=!b;if(c&&ib)throw new J(10);if(!c&&!d){var e=L(b,{Da:!1});b=e.path;e=e.node;if(e.ra)throw new J(10);if(16384!==(e.mode&61440))throw new J(54);}b={type:a,hb:{},Ga:b,Sa:[]};a=a.la(b);a.la=b;b.root=a;c?ib=a:e&&(e.ra=b,e.la&&e.la.Sa.push(b))}function Bb(a,b,c){var d=L(a,{parent:!0}).node;a=Va(a);if(!a||"."===a||".."===a)throw new J(28);var e=wb(d,a);if(e)throw new J(e);if(!d.ea.qa)throw new J(63);return d.ea.qa(d,a,b,c)}function M(a){Bb(a,16895,0)} +function Cb(a,b,c){"undefined"===typeof c&&(c=b,b=438);Bb(a,b|8192,c)}function Db(a,b){if(!Xa(a))throw new J(44);var c=L(b,{parent:!0}).node;if(!c)throw new J(44);b=Va(b);var d=wb(c,b);if(d)throw new J(d);if(!c.ea.symlink)throw new J(63);c.ea.symlink(c,b,a)}function pb(a){a=L(a).node;if(!a)throw new J(44);if(!a.ea.readlink)throw new J(28);return Xa(qb(a.parent),a.ea.readlink(a))} +function Eb(a,b,c,d){if(""===a)throw new J(44);if("string"===typeof b){var e=ub[b];if("undefined"===typeof e)throw Error("Unknown file open mode: "+b);b=e}c=b&64?("undefined"===typeof c?438:c)&4095|32768:0;if("object"===typeof a)var f=a;else{a=Ta(a);try{f=L(a,{Ca:!(b&131072)}).node}catch(k){}}e=!1;if(b&64)if(f){if(b&128)throw new J(20);}else f=Bb(a,c,0),e=!0;if(!f)throw new J(44);8192===(f.mode&61440)&&(b&=-513);if(b&65536&&16384!==(f.mode&61440))throw new J(54);if(!e&&(c=f?40960===(f.mode&61440)? +32:16384===(f.mode&61440)&&("r"!==vb(b)||b&512)?31:sb(f,vb(b)):44))throw new J(c);if(b&512){c=f;var h;"string"===typeof c?h=L(c,{Ca:!0}).node:h=c;if(!h.ea.ja)throw new J(63);if(16384===(h.mode&61440))throw new J(31);if(32768!==(h.mode&61440))throw new J(28);if(c=sb(h,"w"))throw new J(c);h.ea.ja(h,{size:0,timestamp:Date.now()})}b&=-131713;d=yb({node:f,path:qb(f),flags:b,seekable:!0,position:0,fa:f.fa,ab:[],error:!1},d);d.fa.open&&d.fa.open(d);!g.logReadFiles||b&1||(Fb||(Fb={}),a in Fb||(Fb[a]=1,v("FS.trackingDelegate error on read file: "+ +a)));try{ob.onOpenFile&&(f=0,1!==(b&2097155)&&(f|=1),0!==(b&2097155)&&(f|=2),ob.onOpenFile(a,f))}catch(k){v("FS.trackingDelegate['onOpenFile']('"+a+"', flags) threw an exception: "+k.message)}return d}function Gb(a,b,c){if(null===a.fd)throw new J(8);if(!a.seekable||!a.fa.oa)throw new J(70);if(0!=c&&1!=c&&2!=c)throw new J(28);a.position=a.fa.oa(a,b,c);a.ab=[]} +function Hb(){J||(J=function(a,b){this.node=b;this.Xa=function(c){this.na=c};this.Xa(a);this.message="FS error"},J.prototype=Error(),J.prototype.constructor=J,[44].forEach(function(a){fb[a]=new J(a);fb[a].stack=""}))}var Ib;function Jb(a,b){var c=0;a&&(c|=365);b&&(c|=146);return c} +function Kb(a,b,c){a=Ta("/dev/"+a);var d=Jb(!!b,!!c);Lb||(Lb=64);var e=Lb++<<8|0;$a(e,{open:function(f){f.seekable=!1},close:function(){c&&c.buffer&&c.buffer.length&&c(10)},read:function(f,h,k,l){for(var n=0,p=0;p>2]}function Q(a){a=kb[a];if(!a)throw new J(8);return a}var Nb={};function Ob(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function Pb(a){return this.fromWireType(F[a>>2])}var Qb={},R={},Rb={};function Sb(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a} +function Tb(a,b){a=Sb(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}function Ub(a){var b=Error,c=Tb(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c} +var Vb=void 0;function Wb(a,b,c){function d(k){k=c(k);if(k.length!==a.length)throw new Vb("Mismatched type converter count");for(var l=0;l>2])};case 3:return function(c){return this.fromWireType(Ca[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function ec(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Tb(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c} +function fc(a,b){var c=g;if(void 0===c[a].ia){var d=c[a];c[a]=function(){c[a].ia.hasOwnProperty(arguments.length)||U("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].ia+")!");return c[a].ia[arguments.length].apply(this,arguments)};c[a].ia=[];c[a].ia[d.Ia]=d}} +function gc(a,b,c){g.hasOwnProperty(a)?((void 0===c||void 0!==g[a].ia&&void 0!==g[a].ia[c])&&U("Cannot register public name '"+a+"' twice"),fc(a,a),g.hasOwnProperty(c)&&U("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),g[a].ia[c]=b):(g[a]=b,void 0!==c&&(g[a].gb=c))}function hc(a,b){for(var c=[],d=0;d>2)+d]);return c} +function ic(a,b){assert(0<=a.indexOf("j"),"getDynCaller should only be called with i64 sigs");var c=[];return function(){c.length=arguments.length;for(var d=0;d>1]}:function(d){return va[d>>1]};case 2:return c?function(d){return B[d>>2]}:function(d){return F[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var pc={};function qc(){return"object"===typeof globalThis?globalThis:Function("return this")()}function rc(a,b){var c=R[a];void 0===c&&U(b+" has unknown type "+lc(a));return c}var sc={}; +function tb(a,b,c,d){a||(a=this);this.parent=a;this.la=a.la;this.ra=null;this.id=lb++;this.name=b;this.mode=c;this.ea={};this.fa={};this.rdev=d}Object.defineProperties(tb.prototype,{read:{get:function(){return 365===(this.mode&365)},set:function(a){a?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146===(this.mode&146)},set:function(a){a?this.mode|=146:this.mode&=-147}}});Hb();mb=Array(4096);Ab(K,"/");M("/tmp");M("/home");M("/home/web_user"); +(function(){M("/dev");$a(259,{read:function(){return 0},write:function(b,c,d,e){return e}});Cb("/dev/null",259);Za(1280,bb);Za(1536,cb);Cb("/dev/tty",1280);Cb("/dev/tty1",1536);var a=Wa();Kb("random",a);Kb("urandom",a);M("/dev/shm");M("/dev/shm/tmp")})();M("/proc");M("/proc/self");M("/proc/self/fd"); +Ab({la:function(){var a=eb("/proc/self","fd",16895,73);a.ea={lookup:function(b,c){var d=kb[+c];if(!d)throw new J(8);b={parent:null,la:{Ga:"fake"},ea:{readlink:function(){return d.path}}};return b.parent=b}};return a}},"/proc/self/fd");Vb=g.InternalError=Ub("InternalError");for(var tc=Array(256),uc=0;256>uc;++uc)tc[uc]=String.fromCharCode(uc);Yb=tc;Zb=g.BindingError=Ub("BindingError");g.count_emval_handles=function(){for(var a=0,b=5;be?-28:Eb(d.path,d.flags,0,e).fd;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=O(),d.flags|=e,0;case 12:return e=O(),A[e+0>>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-28;case 9:return B[wc()>>2]=28,-1;default:return-28}}catch(f){return"undefined"!==typeof N&&f instanceof J||r(f),-f.na}},G:function(a,b,c){Mb=c;try{var d=Q(a);switch(b){case 21509:case 21505:return d.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return d.tty? +0:-59;case 21519:if(!d.tty)return-59;var e=O();return B[e>>2]=0;case 21520:return d.tty?-28:-59;case 21531:a=e=O();if(!d.fa.Ra)throw new J(59);return d.fa.Ra(d,b,a);case 21523:return d.tty?0:-59;case 21524:return d.tty?0:-59;default:r("bad ioctl syscall "+b)}}catch(f){return"undefined"!==typeof N&&f instanceof J||r(f),-f.na}},H:function(a,b,c){Mb=c;try{var d=qa(a),e=O();return Eb(d,b,e).fd}catch(f){return"undefined"!==typeof N&&f instanceof J||r(f),-f.na}},z:function(a){var b=Nb[a];delete Nb[a];var c= +b.Ua,d=b.Va,e=b.Ba,f=e.map(function(h){return h.Pa}).concat(e.map(function(h){return h.Za}));Wb([a],f,function(h){var k={};e.forEach(function(l,n){var p=h[n],t=l.Na,u=l.Oa,w=h[n+e.length],q=l.Ya,E=l.$a;k[l.La]={read:function(y){return p.fromWireType(t(u,y))},write:function(y,P){var la=[];q(E,y,w.toWireType(la,P));Ob(la)}}});return[{name:b.name,fromWireType:function(l){var n={},p;for(p in k)n[p]=k[p].read(l);d(l);return n},toWireType:function(l,n){for(var p in k)if(!(p in n))throw new TypeError('Missing field: "'+ +p+'"');var t=c();for(p in k)k[p].write(t,n[p]);null!==l&&l.push(d,t);return t},argPackAdvance:8,readValueFromPointer:Pb,ka:d}]})},J:function(a,b,c,d,e){var f=Xb(c);b=T(b);S(a,{name:b,fromWireType:function(h){return!!h},toWireType:function(h,k){return k?d:e},argPackAdvance:8,readValueFromPointer:function(h){if(1===c)var k=D;else if(2===c)k=A;else if(4===c)k=B;else throw new TypeError("Unknown boolean type size: "+b);return this.fromWireType(k[h>>f])},ka:null})},I:function(a,b){b=T(b);S(a,{name:b,fromWireType:function(c){var d= +V[c].value;ac(c);return d},toWireType:function(c,d){return bc(d)},argPackAdvance:8,readValueFromPointer:Pb,ka:null})},v:function(a,b,c){c=Xb(c);b=T(b);S(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,e){if("number"!==typeof e&&"boolean"!==typeof e)throw new TypeError('Cannot convert "'+cc(e)+'" to '+this.name);return e},argPackAdvance:8,readValueFromPointer:dc(b,c),ka:null})},y:function(a,b,c,d,e,f){var h=hc(b,c);a=T(a);e=jc(d,e);gc(a,function(){nc("Cannot call "+a+" due to unbound types", +h)},b-1);Wb([],h,function(k){var l=[k[0],null].concat(k.slice(1)),n=k=a,p=e,t=l.length;2>t&&U("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var u=null!==l[1]&&!1,w=!1,q=1;q>>k}}var l=-1!=b.indexOf("unsigned");S(a,{name:b,fromWireType:f,toWireType:function(n,p){if("number"!==typeof p&&"boolean"!==typeof p)throw new TypeError('Cannot convert "'+cc(p)+'" to '+this.name);if(pe)throw new TypeError('Passing a number "'+cc(p)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+e+"]!");return l?p>>>0:p|0},argPackAdvance:8,readValueFromPointer:oc(b, +h,0!==d),ka:null})},f:function(a,b,c){function d(f){f>>=2;var h=F;return new e(C,h[f+1],h[f])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=T(c);S(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{Qa:!0})},w:function(a,b){b=T(b);var c="std::string"===b;S(a,{name:b,fromWireType:function(d){var e=F[d>>2];if(c)for(var f=d+4,h=0;h<=e;++h){var k=d+4+h;if(h==e||0==z[k]){f=qa(f,k-f);if(void 0===l)var l=f;else l+=String.fromCharCode(0), +l+=f;f=k+1}}else{l=Array(e);for(h=0;h>2]=h;if(c&&f)ra(e,z,k+4,h+1);else if(f)for(f=0;f>2],p=h(),t,u=l+4,w=0;w<=n;++w){var q=l+4+w*b;if(w==n||0==p[q>>k])u=d(u,q-u),void 0=== +t?t=u:(t+=String.fromCharCode(0),t+=u),u=q+b}W(l);return t},toWireType:function(l,n){"string"!==typeof n&&U("Cannot pass non-string to C++ string type "+c);var p=f(n),t=hb(4+p+b);F[t>>2]=p>>k;e(n,t+4,p+b);null!==l&&l.push(W,t);return t},argPackAdvance:8,readValueFromPointer:Pb,ka:function(l){W(l)}})},A:function(a,b,c,d,e,f){Nb[a]={name:T(b),Ua:jc(c,d),Va:jc(e,f),Ba:[]}},j:function(a,b,c,d,e,f,h,k,l,n){Nb[a].Ba.push({La:T(b),Pa:c,Na:jc(d,e),Oa:f,Za:h,Ya:jc(k,l),$a:n})},K:function(a,b){b=T(b);S(a,{fb:!0, +name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},m:ac,M:function(a){if(0===a)return bc(qc());var b=pc[a];a=void 0===b?T(a):b;return bc(qc()[a])},x:function(a){4>> 2) + "+ +f+'], "parameter '+f+'");\nvar arg'+f+" = argType"+f+".readValueFromPointer(args);\nargs += argType"+f+"['argPackAdvance'];\n";e=(new Function("requireRegisteredType","Module","__emval_register",h+("var obj = new constructor("+e+");\nreturn __emval_register(obj);\n}\n")))(rc,g,bc);sc[b]=e}return e(a,c,d)},h:function(){r()},e:function(a,b){X(a,b||1);throw"longjmp";},E:function(a,b,c){z.copyWithin(a,b,b+c)},k:function(a){a>>>=0;var b=z.length;if(2147483648=c;c*=2){var d=b* +(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,a,d);0>>16);Da(x.buffer);var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},u:function(a){try{var b=Q(a);if(null===b.fd)throw new J(8);b.ta&&(b.ta=null);try{b.fa.close&&b.fa.close(b)}catch(c){throw c;}finally{kb[b.fd]=null}b.fd=null;return 0}catch(c){return"undefined"!==typeof N&&c instanceof J||r(c),c.na}},F:function(a,b,c,d){try{a:{for(var e=Q(a),f= +a=0;f>2],k=e,l=B[b+8*f>>2],n=h,p=void 0,t=D;if(0>n||0>p)throw new J(28);if(null===k.fd)throw new J(8);if(1===(k.flags&2097155))throw new J(8);if(16384===(k.node.mode&61440))throw new J(31);if(!k.fa.read)throw new J(28);var u="undefined"!==typeof p;if(!u)p=k.position;else if(!k.seekable)throw new J(70);var w=k.fa.read(k,t,l,n,p);u||(k.position+=w);var q=w;if(0>q){var E=-1;break a}a+=q;if(q>2]=E;return 0}catch(y){return"undefined"!==typeof N&&y instanceof J|| +r(y),y.na}},B:function(a,b,c,d,e){try{var f=Q(a);a=4294967296*c+(b>>>0);if(-9007199254740992>=a||9007199254740992<=a)return-61;Gb(f,a,d);Qa=[f.position>>>0,(I=f.position,1<=+Math.abs(I)?0>>0:~~+Math.ceil((I-+(~~I>>>0))/4294967296)>>>0:0)];B[e>>2]=Qa[0];B[e+4>>2]=Qa[1];f.ta&&0===a&&0===d&&(f.ta=null);return 0}catch(h){return"undefined"!==typeof N&&h instanceof J||r(h),h.na}},t:function(a,b,c,d){try{a:{for(var e=Q(a),f=a=0;f>2],l=B[b+(8*f+4)>>2],n=void 0,p=D;if(0>l||0>n)throw new J(28);if(null===h.fd)throw new J(8);if(0===(h.flags&2097155))throw new J(8);if(16384===(h.node.mode&61440))throw new J(31);if(!h.fa.write)throw new J(28);h.seekable&&h.flags&1024&&Gb(h,0,2);var t="undefined"!==typeof n;if(!t)n=h.position;else if(!h.seekable)throw new J(70);var u=h.fa.write(h,p,k,l,n,void 0);t||(h.position+=u);try{if(h.path&&ob.onWriteToFile)ob.onWriteToFile(h.path)}catch(E){v("FS.trackingDelegate['onWriteToFile']('"+h.path+ +"') threw an exception: "+E.message)}var w=u;if(0>w){var q=-1;break a}a+=w}q=a}B[d>>2]=q;return 0}catch(E){return"undefined"!==typeof N&&E instanceof J||r(E),E.na}},c:function(){return ka|0},r:xc,C:yc,q:zc,l:Ac,o:Bc,g:Cc,d:Dc,n:Ec,a:x,b:function(a){ka=a|0},L:function(a){var b=Date.now()/1E3|0;a&&(B[a>>2]=b);return b}}; +(function(){function a(e){g.asm=e.exports;G=g.asm.O;H--;g.monitorRunDependencies&&g.monitorRunDependencies(H);0==H&&(null!==Ka&&(clearInterval(Ka),Ka=null),La&&(e=La,La=null,e()))}function b(e){a(e.instance)}function c(e){return Promise.resolve().then(Pa).then(function(f){return WebAssembly.instantiate(f,d)}).then(e,function(f){v("failed to asynchronously prepare wasm: "+f);r(f)})}var d={a:Fc};H++;g.monitorRunDependencies&&g.monitorRunDependencies(H);if(g.instantiateWasm)try{return g.instantiateWasm(d, +a)}catch(e){return v("Module.instantiateWasm callback failed with error: "+e),!1}(function(){return ma||"function"!==typeof WebAssembly.instantiateStreaming||Ma()||"function"!==typeof fetch?c(b):fetch(Na,{credentials:"same-origin"}).then(function(e){return WebAssembly.instantiateStreaming(e,d).then(b,function(f){v("wasm streaming compile failed: "+f);v("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(ba);return{}})(); +var vc=g.___wasm_call_ctors=function(){return(vc=g.___wasm_call_ctors=g.asm.P).apply(null,arguments)},hb=g._malloc=function(){return(hb=g._malloc=g.asm.Q).apply(null,arguments)},W=g._free=function(){return(W=g._free=g.asm.R).apply(null,arguments)},mc=g.___getTypeName=function(){return(mc=g.___getTypeName=g.asm.S).apply(null,arguments)};g.___embind_register_native_and_builtin_types=function(){return(g.___embind_register_native_and_builtin_types=g.asm.T).apply(null,arguments)}; +var wc=g.___errno_location=function(){return(wc=g.___errno_location=g.asm.U).apply(null,arguments)},Y=g.stackSave=function(){return(Y=g.stackSave=g.asm.V).apply(null,arguments)},Z=g.stackRestore=function(){return(Z=g.stackRestore=g.asm.W).apply(null,arguments)},X=g._setThrew=function(){return(X=g._setThrew=g.asm.X).apply(null,arguments)};g.dynCall_jiiiiiiiii=function(){return(g.dynCall_jiiiiiiiii=g.asm.Y).apply(null,arguments)};g.dynCall_jiji=function(){return(g.dynCall_jiji=g.asm.Z).apply(null,arguments)}; +g.dynCall_jiiiiiiii=function(){return(g.dynCall_jiiiiiiii=g.asm._).apply(null,arguments)};g.dynCall_jiiiiii=function(){return(g.dynCall_jiiiiii=g.asm.$).apply(null,arguments)};g.dynCall_jiiiii=function(){return(g.dynCall_jiiiii=g.asm.aa).apply(null,arguments)};g.dynCall_iiijii=function(){return(g.dynCall_iiijii=g.asm.ba).apply(null,arguments)};function Bc(a,b){var c=Y();try{G.get(a)(b)}catch(d){Z(c);if(d!==d+0&&"longjmp"!==d)throw d;X(1,0)}} +function Dc(a,b,c,d,e){var f=Y();try{G.get(a)(b,c,d,e)}catch(h){Z(f);if(h!==h+0&&"longjmp"!==h)throw h;X(1,0)}}function Cc(a,b,c){var d=Y();try{G.get(a)(b,c)}catch(e){Z(d);if(e!==e+0&&"longjmp"!==e)throw e;X(1,0)}}function Ac(a,b,c,d,e,f,h,k,l){var n=Y();try{return G.get(a)(b,c,d,e,f,h,k,l)}catch(p){Z(n);if(p!==p+0&&"longjmp"!==p)throw p;X(1,0)}}function xc(a,b,c){var d=Y();try{return G.get(a)(b,c)}catch(e){Z(d);if(e!==e+0&&"longjmp"!==e)throw e;X(1,0)}} +function zc(a,b,c,d,e){var f=Y();try{return G.get(a)(b,c,d,e)}catch(h){Z(f);if(h!==h+0&&"longjmp"!==h)throw h;X(1,0)}}function yc(a,b,c,d){var e=Y();try{return G.get(a)(b,c,d)}catch(f){Z(e);if(f!==f+0&&"longjmp"!==f)throw f;X(1,0)}}function Ec(a,b,c,d,e,f,h,k,l,n,p){var t=Y();try{G.get(a)(b,c,d,e,f,h,k,l,n,p)}catch(u){Z(t);if(u!==u+0&&"longjmp"!==u)throw u;X(1,0)}}var Gc;La=function Hc(){Gc||Ic();Gc||(La=Hc)}; +function Ic(){function a(){if(!Gc&&(Gc=!0,g.calledRun=!0,!na)){g.noFSInit||Ib||(Ib=!0,Hb(),g.stdin=g.stdin,g.stdout=g.stdout,g.stderr=g.stderr,g.stdin?Kb("stdin",g.stdin):Db("/dev/tty","/dev/stdin"),g.stdout?Kb("stdout",null,g.stdout):Db("/dev/tty","/dev/stdout"),g.stderr?Kb("stderr",null,g.stderr):Db("/dev/tty1","/dev/stderr"),Eb("/dev/stdin","r"),Eb("/dev/stdout","w"),Eb("/dev/stderr","w"));Ra(Ga);nb=!1;Ra(Ha);aa(g);if(g.onRuntimeInitialized)g.onRuntimeInitialized();if(g.postRun)for("function"== +typeof g.postRun&&(g.postRun=[g.postRun]);g.postRun.length;){var b=g.postRun.shift();Ia.unshift(b)}Ra(Ia)}}if(!(0