From f5e94665612f041fb6b1434b1a51da77f6d444ab Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Thu, 7 Jan 2021 15:33:27 +0100 Subject: [PATCH 001/120] browser support --- .github/workflows/node.js.yml | 28 ---- .github/workflows/webpack.yml | 29 ++++ .gitignore | 2 +- ImageScript.js | 2 +- README.md | 4 +- example/index.html | 13 ++ example/runner.js | 3 + example/worker.js | 13 ++ package.json | 4 +- tests/averageColor.js | 8 - tests/circle.js | 46 ------ tests/crop.js | 13 -- tests/decode.js | 29 ---- tests/fill.js | 29 ---- tests/font.js | 31 ---- tests/fonts/carbon phyber.ttf | Bin 150340 -> 0 bytes tests/fonts/ethnocentric rg.ttf | Bin 71268 -> 0 bytes tests/gif.js | 17 --- tests/image.js | 13 -- tests/invert.js | 59 -------- tests/jpeg.js | 19 --- tests/misc.js | 210 --------------------------- tests/readme.js | 108 -------------- tests/resize.js | 11 -- tests/rotate.js | 51 ------- tests/run.js | 37 ----- tests/svg.js | 11 -- tests/svgs/background.svg | 7 - tests/svgs/cigarette.svg | 7 - tests/svgs/crown.svg | 21 --- tests/svgs/mask.svg | 8 - tests/svgs/microbe.svg | 25 ---- tests/svgs/petri_dish.svg | 16 -- tests/svgs/potato.svg | 10 -- tests/svgs/thermometer.svg | 8 - tests/targets/circle.png | Bin 6939 -> 0 bytes tests/targets/circle2.png | Bin 8528 -> 0 bytes tests/targets/circle3.png | Bin 4559 -> 0 bytes tests/targets/circle4.png | Bin 85122 -> 0 bytes tests/targets/crop.png | Bin 2488 -> 0 bytes tests/targets/external.jpg | Bin 103965 -> 0 bytes tests/targets/external.png | Bin 493736 -> 0 bytes tests/targets/fill-func.png | Bin 45683 -> 0 bytes tests/targets/fill-static.png | Bin 10559 -> 0 bytes tests/targets/font-1.png | Bin 22301 -> 0 bytes tests/targets/font-2.png | Bin 21105 -> 0 bytes tests/targets/gif.gif | Bin 400688 -> 0 bytes tests/targets/image.png | Bin 1155 -> 0 bytes tests/targets/invert-hue.png | Bin 10289 -> 0 bytes tests/targets/invert-hueshift.png | Bin 7927 -> 0 bytes tests/targets/invert-saturation.png | Bin 8641 -> 0 bytes tests/targets/invert-value.png | Bin 10559 -> 0 bytes tests/targets/invert.png | Bin 7927 -> 0 bytes tests/targets/issues.png | Bin 2511 -> 0 bytes tests/targets/potato.png | Bin 6032 -> 0 bytes tests/targets/readme.png | Bin 254532 -> 0 bytes tests/targets/resize.png | Bin 191 -> 0 bytes tests/targets/rotate-180.png | Bin 1119 -> 0 bytes tests/targets/rotate-45-noresize.png | Bin 2226 -> 0 bytes tests/targets/rotate-45.png | Bin 3544 -> 0 bytes tests/targets/twemoji.png | Bin 6783 -> 0 bytes utils/wasm/font.js | 8 +- utils/wasm/gif.js | 10 +- utils/wasm/jpeg.js | 8 +- utils/wasm/svg.js | 8 +- utils/wasm/tiff.js | 8 +- utils/wasm/zlib.js | 8 +- webpack.config.js | 12 ++ 68 files changed, 95 insertions(+), 859 deletions(-) delete mode 100644 .github/workflows/node.js.yml create mode 100644 .github/workflows/webpack.yml create mode 100644 example/index.html create mode 100644 example/runner.js create mode 100644 example/worker.js delete mode 100644 tests/averageColor.js delete mode 100644 tests/circle.js delete mode 100644 tests/crop.js delete mode 100644 tests/decode.js delete mode 100644 tests/fill.js delete mode 100644 tests/font.js delete mode 100644 tests/fonts/carbon phyber.ttf delete mode 100644 tests/fonts/ethnocentric rg.ttf delete mode 100644 tests/gif.js delete mode 100644 tests/image.js delete mode 100644 tests/invert.js delete mode 100644 tests/jpeg.js delete mode 100644 tests/misc.js delete mode 100644 tests/readme.js delete mode 100644 tests/resize.js delete mode 100644 tests/rotate.js delete mode 100644 tests/run.js delete mode 100644 tests/svg.js delete mode 100644 tests/svgs/background.svg delete mode 100644 tests/svgs/cigarette.svg delete mode 100644 tests/svgs/crown.svg delete mode 100644 tests/svgs/mask.svg delete mode 100644 tests/svgs/microbe.svg delete mode 100644 tests/svgs/petri_dish.svg delete mode 100644 tests/svgs/potato.svg delete mode 100644 tests/svgs/thermometer.svg delete mode 100644 tests/targets/circle.png delete mode 100644 tests/targets/circle2.png delete mode 100644 tests/targets/circle3.png delete mode 100644 tests/targets/circle4.png delete mode 100644 tests/targets/crop.png delete mode 100644 tests/targets/external.jpg delete mode 100644 tests/targets/external.png delete mode 100644 tests/targets/fill-func.png delete mode 100644 tests/targets/fill-static.png delete mode 100644 tests/targets/font-1.png delete mode 100644 tests/targets/font-2.png delete mode 100644 tests/targets/gif.gif delete mode 100644 tests/targets/image.png delete mode 100644 tests/targets/invert-hue.png delete mode 100644 tests/targets/invert-hueshift.png delete mode 100644 tests/targets/invert-saturation.png delete mode 100644 tests/targets/invert-value.png delete mode 100644 tests/targets/invert.png delete mode 100644 tests/targets/issues.png delete mode 100644 tests/targets/potato.png delete mode 100644 tests/targets/readme.png delete mode 100644 tests/targets/resize.png delete mode 100644 tests/targets/rotate-180.png delete mode 100644 tests/targets/rotate-45-noresize.png delete mode 100644 tests/targets/rotate-45.png delete mode 100644 tests/targets/twemoji.png create mode 100644 webpack.config.js diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml deleted file mode 100644 index c26282d..0000000 --- a/.github/workflows/node.js.yml +++ /dev/null @@ -1,28 +0,0 @@ -# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions - -name: Node.js CI - -on: - push: - branches: [ master, dev ] - pull_request: - branches: [ master, dev ] - -jobs: - build: - - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [12.x, 14.x, 15.x] - - steps: - - uses: actions/checkout@v2 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - run: npm run build --if-present - - run: npm test diff --git a/.github/workflows/webpack.yml b/.github/workflows/webpack.yml new file mode 100644 index 0000000..73a6cfb --- /dev/null +++ b/.github/workflows/webpack.yml @@ -0,0 +1,29 @@ +name: Webpack CI + +on: + push: + branches: [ browser ] + pull_request: + branches: [ browser ] + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [ 15.x ] + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - run: npm i --global webpack + - run: npm run build + - run: git config --local user.name "github-actions[bot]" + - run: git config --local user.email "github-actions[bot]@users.noreply.github.com" + - run: git commit -m "Update bundle" -a + - run: git push diff --git a/.gitignore b/.gitignore index 4f4dcc2..4d53757 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ .idea/ .nyc_output/ coverage/ -.node_modules/ \ No newline at end of file +node_modules/ diff --git a/ImageScript.js b/ImageScript.js index e2acb0b..2096cd5 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1351,4 +1351,4 @@ class GIF extends Array { } } -module.exports = {Image, GIF, Frame}; \ No newline at end of file +module.exports = {Image, GIF, Frame}; diff --git a/README.md b/README.md index 167cc70..7ca5a06 100644 --- a/README.md +++ b/README.md @@ -28,8 +28,8 @@ It can achieve much more performant results by utilizing lower-level memory acce --- ### Example -[![Example](./tests/targets/readme.png)](./tests/readme.js) +An example on how to use ImageScript in your web project can be found in [/example/](/example/). --- -If you have any additional questions, feel free to join the [discord support server](https://discord.gg/8hPrwAH). \ No newline at end of file +If you have any additional questions, feel free to join the [discord support server](https://discord.gg/8hPrwAH). diff --git a/example/index.html b/example/index.html new file mode 100644 index 0000000..78b44e3 --- /dev/null +++ b/example/index.html @@ -0,0 +1,13 @@ + + + ImageScript Example + + +

ImageScript example

+

Simple example showing integration of ImageScript into an application (load image, modify, encode, convert to blob, + display)

+

You can find more examples on GitHub

+ImageScript Example Result + + + diff --git a/example/runner.js b/example/runner.js new file mode 100644 index 0000000..60cc435 --- /dev/null +++ b/example/runner.js @@ -0,0 +1,3 @@ +const worker = new Worker('worker.js'); +// worker threads dont have access to the document, so we just receive the blob URI and use it as src +worker.onmessage = msg => document.querySelector('#image').src = msg.data; diff --git a/example/worker.js b/example/worker.js new file mode 100644 index 0000000..c970698 --- /dev/null +++ b/example/worker.js @@ -0,0 +1,13 @@ +(async () => { + const avatar = await fetch('https://raw.githubusercontent.com/matmen/ImageScript/master/tests/targets/readme.png').then(r => r.arrayBuffer()); + const image = await ImageScript.Image.decode(avatar); + + image.saturation(0); + + const encoded = await image.encode(); + + // need to pass data to main thread as blob URI, cannot access document directly + const blob = new Blob([encoded], {type: 'image/png'}); + const url = URL.createObjectURL(blob); + postMessage(url); +})(); diff --git a/package.json b/package.json index 67fbdb8..b97bdeb 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,9 @@ "version": "1.1.14", "description": "zero-dependency javascript image manipulation", "main": "ImageScript.js", + "type": "commonjs", "scripts": { - "test": "node ./tests/run.js", - "coverage": "nyc --reporter=html npm test" + "build": "webpack" }, "repository": { "type": "git", diff --git a/tests/averageColor.js b/tests/averageColor.js deleted file mode 100644 index 6d34582..0000000 --- a/tests/averageColor.js +++ /dev/null @@ -1,8 +0,0 @@ -const fs = require('fs').promises; -const {Image} = require('../ImageScript'); -(async () => { - const binary = await fs.readFile('./tests/targets/readme.png'); - const image = await Image.decode(binary); - const avgColor = image.averageColor(); - if (avgColor !== 0x343c3dff) process.exit(1); -})(); \ No newline at end of file diff --git a/tests/circle.js b/tests/circle.js deleted file mode 100644 index bfd46ca..0000000 --- a/tests/circle.js +++ /dev/null @@ -1,46 +0,0 @@ -const fs = require('fs').promises; -const {Image} = require('../ImageScript'); - -(async () => { - { - const image = new Image(512, 512); - image.drawCircle(256, 256, 128, 0xffffffff); - - const encoded = await image.encode(); - - const target = await fs.readFile('./tests/targets/circle.png'); - if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); - } - - { - const image = new Image(512, 512); - image.drawCircle(256, 256, 320, 0x000000ff); - - const encoded = await image.encode(); - - const target = await fs.readFile('./tests/targets/circle2.png'); - if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); - } - - { - const image = new Image(256, 512); - image.fill(0x000000ff); - image.cropCircle(); - - const encoded = await image.encode(); - - const target = await fs.readFile('./tests/targets/circle3.png'); - if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); - } - - { - const image = new Image(256, 512); - image.fill(0x000000ff); - image.cropCircle(true, .5); - - const encoded = await image.encode(); - - const target = await fs.readFile('./tests/targets/circle4.png'); - if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); - } -})(); \ No newline at end of file diff --git a/tests/crop.js b/tests/crop.js deleted file mode 100644 index a403668..0000000 --- a/tests/crop.js +++ /dev/null @@ -1,13 +0,0 @@ -const fs = require('fs').promises; -const {Image} = require('../ImageScript'); - -(async () => { - const image = new Image(512, 512); - image.fill((x, y) => Image.hslToColor((x + y) / (image.width + image.height), 1, .5)); - image.crop(128, 128, 128, 128); - - const encoded = await image.encode(); - - const target = await fs.readFile('./tests/targets/crop.png'); - if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); -})(); \ No newline at end of file diff --git a/tests/decode.js b/tests/decode.js deleted file mode 100644 index a20070f..0000000 --- a/tests/decode.js +++ /dev/null @@ -1,29 +0,0 @@ -const fs = require('fs').promises; -const {Image} = require('../ImageScript'); -const ImageTest = require('./image'); - -const panic = message => { - console.error(message); - process.exit(1); -}; - -(async () => { - { - const binary = await fs.readFile('./tests/targets/image.png'); - const image = await Image.decode(binary); - - const target = await ImageTest; - if (!Buffer.from(target.bitmap).equals(Buffer.from(image.bitmap))) process.exit(1); - } - - { - const binary = await fs.readFile('./tests/targets/external.png'); - const image = await Image.decode(binary); - - if ([image.width, image.height].some(v => v !== 638)) - panic('dimensions don\'t match'); - - if (!Buffer.from(image.bitmap.subarray(0, 4)).equals(Buffer.from([70, 65, 62, 255]))) - panic('pixel doesn\'t match'); - } -})(); \ No newline at end of file diff --git a/tests/fill.js b/tests/fill.js deleted file mode 100644 index 57220b1..0000000 --- a/tests/fill.js +++ /dev/null @@ -1,29 +0,0 @@ -const fs = require('fs').promises; -const {Image} = require('../ImageScript'); - -const panic = message => { - console.error(message); - process.exit(1); -}; - -(async () => { - { - const image = new Image(512, 512); - image.fill(0xff8000ff); - - const encoded = await image.encode(); - - const target = await fs.readFile('./tests/targets/fill-static.png'); - if (!Buffer.from(target).equals(Buffer.from(encoded))) panic('fill static doesn\'t equal'); - } - - { - const image = new Image(512, 512); - image.fill((x, y) => Image.hslToColor((x + y) / (image.width + image.height), 1, .5)); - - const encoded = await image.encode(); - - const target = await fs.readFile('./tests/targets/fill-func.png'); - if (!Buffer.from(target).equals(Buffer.from(encoded))) panic('fill func doesn\'t equal'); - } -})(); \ No newline at end of file diff --git a/tests/font.js b/tests/font.js deleted file mode 100644 index 4151c3d..0000000 --- a/tests/font.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - Fonts sourced from: - https://www.1001fonts.com/carbon-font.html - https://www.1001fonts.com/ethnocentric-font.html - */ - -const fs = require('fs').promises; -const {Image} = require('../ImageScript'); - -const panic = message => { - console.error(message); - process.exit(1); -}; - -(async () => { - { - const font = await Image.renderText(await fs.readFile('./tests/fonts/carbon phyber.ttf'), 128, 'ThE qUiCk'); - const encoded = await font.encode(); - - const desired = await fs.readFile('./tests/targets/font-1.png'); - if (!desired.equals(Buffer.from(encoded))) panic('font 1 doesn\'t match'); - } - - { - const font = await Image.renderText(await fs.readFile('./tests/fonts/ethnocentric rg.ttf'), 128, 'BrOwN fOx'); - const encoded = await font.encode(); - - const desired = await fs.readFile('./tests/targets/font-2.png'); - if (!desired.equals(Buffer.from(encoded))) panic('font 2 doesn\'t match'); - } -})(); \ No newline at end of file diff --git a/tests/fonts/carbon phyber.ttf b/tests/fonts/carbon phyber.ttf deleted file mode 100644 index 911153008895b28b0391304244d553b5bdaa637c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150340 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 cNtGcRsa_XL)-I<-)FuOY&Se6Agfgm|5 zNDvkQ0TtFoqU0nBisBVafQnhU>NSgkir_^71@)Q}Dqa)?15YW+%-oL-^ z`~SX$sjfbCDoo8e&w1nX9#yHe-&qekPVB6H)BmxTssFBN7f0H`b~uMtTK0a*^?oiN zD6{2bWo3_OA~+FX{=zFcvF`X?e=CI_&7r2YkPgtTcgYCeLqw_Aki^}-ffT1yhZT0}CX!sDZeKiw`oc>S zV>b#wIyA=PyUOU)ln*u-ubPhqTde!T%{HVLy`j30UcQ}*1H=59-K(QN;Y5M0)>b8+ z`uN(B)IK!njnhAm>zgJi+6Y8iemM0_YmN4fP*uK=WRjtUpKeC0}&t}EUc`lC#R9~AEJ1a}HK-d8wO67gqizeLOB|lp1iA}YHy4FD787|PzKy&= zaT^4w0bz+up|D%R<44N?F9xLeU`OhD+>G9UP7@tu;J=B;CmAjRZHXxrur^TuC0i@W zpopMPhVDWkBvUFYb+ffI@_5#`BrMx0k&0zb(8DpC3ebx)tvHj5o#6}W)k)6Wf7=DYgTtu1D%x0cex2Q>$Q)z);X<00r6eW#<)U4ny@$1nzu)B&-@QyeH z%B=;Jk3lv*XniP#l-SDO8a_g|My2KOo(7mx9`XUA??NBDqwgaP-5k+B#YGViKI+5E zm49-uBNHbgR53F0eLJ8$iFYCtr3VRGUyw?czh+y|8NC+dQ6Zw2pRCs=E3ZO?9xB2I z74fv*Tl2k6-`8$MwZK=_fU5cFM)m!@H6`l%{9w?TUq|7NEr2--DkJ~pqz6fD=zm_j zwZ%@?qW$b7BnxZeJpfYI%8v?t*bm2{$PpvURy5iOr4%SFetEX`btJk2GE zzDN8`^z09elQMk|RTuX}afV`DAcXPifsW+D<+WAM|`Y&QC|X^pBo) z_&?Krb+f;iXs+*kon6`ydpQVuH28PHaX4eMm22{hUN@iB_QT9|_!U@fA3`SfPq8XL z$?Rj4;TH>vL>dO;^>WtjHW9-Svin{lUMeWF?;L1$SE61i3&>;88b%*3`atqR}Ie()t@X|BlLKF10F!UDJW}5Vr(q)wKK?HvIAh!yDk!ghjewb)t+G zf1yVDpGtv1(CW;=D`xzb&-kG6#ragklM>cd&^0}{i}x~w%Mulw5EeCJ{IF3oIu|TJ z%qn!g(VtUYx3l4x{C(AQP(-O6Z9F$AVpivo4Y%4T0-+;}B~^BUMkgtMixSfRI;UkN$UlPXyQ;5z znKVJuw(<{1H>R{Pv;Wdxs!cmBm9t49R9PRSglhu@L6}T--xlX&{wrqi5PLRF!Q;qo z(Wg$?#Z4*pA@}6emyujzS=|PeFaWpx6(Es>3aE}e%AB^3lRGkh(se7{k(MZ9R8@1k zGN?Mx1S>P1$*D8Ip&WJw-m8W1!LujSL*gDp(&c01qiiRZkk^v^IKSN0d>C*(Po*{4 zF`2(G_RXL=x>8&+vf{1&pKI01hN1EN4PAqXKek`->G|sVZbRTxY&^(k-dKA(o#i*EV_m+3mb$vQKh>>|d;f^R=T>i>$Ki zcRKGDmDX12D?JUA>GZtM-%e|&^tn!eL}jM`eC_mmQ-2fhEG+;3ip*P&I-6|wNCGVy3h8E)}-;>;Pv z8GgiKRpcAv2rWXiQpunitfaiMNmaNA;lVw@&jkr$0}_47dnpN$kzUkX6=y7~4xmo3;qp)ViL?I@BlO+F~IDr6?bp6CO0n72|<{vh@dTWR=b;zWejtdSr2 zZ&*Q|@)prj+sZ9iMA#gz(PH8byv@fd^s$H?k=<89Oa2>0&8(x%C)`>G*(FOp$TggZ z(VyaGi0$!FYdSSTyFmnjxI!|Rf3trg4PgiJ#)+W*M2CEoyT)h(+!z9STAD@YJninb=$rt3mC77?DM!HUGGX zP?>tW0mYftm1%b&xefE*?T*An`_H(;vrl1B@Ih9vgmN}vpv;2Tm9*)jOFV;G{xc2i zhOv4D)hm4Vy`~*>S7U+2je}FB{+7m?ql(+1V~hN2`reUPN{aSY=-BlI+Q_qc?3jV_ zv(@hB9V=%1lDGrhM^MN#{t^C4oLdffc)oVR>qk_=KSYxN$0s(+{?Fe|_(%N-7iZRq zM|hpswSA+YniOG zC^7?`JXR7%JyAtG$^hFMC8Od7g8ubAF~Fy0SME0RCMB8Fb%)F3G@Gf#p+!?KMQ-1IB+mP%{_D6y4%4 z9ERU%!h1gfJHvU-;g92k)BY(Ym)NElO}58%d|CA?w?GmLm20Gm2kWn zCqn1Wj%sX)5^2GAy4CZ#h>|hil>v-lZ5cU+g4%25fch1~2(O39^Xn|^=jXGDbpK3j zs#M=6kv{+Xc%tkTDSDPH_4?mOxZeW;SyVY>&|jP+T?1Ua(Ck*?zdnNmHO@cfu@W0Mf?MUdgtcL3@=AcD$)>s`ak z@*C=l_Z%E;;n=1H)6~ z*ge#Ox6OREW@R(V|2~0h3!H~x5osb4YP zSTSm6;`0g!cTQKlt)3}fZ+wcOT7gozNvnWC`mG{(SEf{2v7w9#GOoEC9M)eOp5~X>3EBuyk?x}-LArnoZ8)3 z=aY;Ar?*8P7K=<@`u*-y=ZKn0W({$q(HWgsdGWfGLia8%lFUI?lr&YyM`7huGS zZ=nsdRkrX6muqozU=Ky}qCy5qNEE8JQYNdhm{f>Ug>*$oNMSw&I+0d9NrqfJ2P?0A zkh1_t=uk!>NnkAnB`}5ng=8>J8H>0O8LIIRfGj|tdcg%SpVr!gVAzEq%^xA{v`F(aTph{TG}7YDGI;4GTDh6IB*L5gyl=IA7xKg}+kS`NlPcrL8XWCl%&H?3k9(fM)`Jl$}vB+>oRo z>S(G&w2OdR{!+5Tkzb2C&EbgR40?J~17|tBa1?S|)8n)ijb^poJiTrWW^2jaq$O@gRPmpoJUR9^ zA(0@^J8SuaL)|DXpy~zxKc~ul1;K{h^{e1!@}oenoaqhLUJ3ux8+P?L9UHWVm(94F zURZN_k~0dQ6H!?;v}N}7iiPTGUmNdDKh2INCp+IqvKw4X@mk;RchxJpwV!+Wc|Cq| z3Mav}K=ITU7?;IQ_@e~O)u}I$_E=TM=tyKwosSx93zMpN3+s_|l$=xG_QJTve3zFx)DlLm2-4)8J^fx~{Pq~t3w|oSN?YQt zaecGcL*E?1qqH%~_xDUkapIne*okV6_gA9ewr0i~;X2j_;5XKnzcJ2}E$}<6gUURB z(@^e+@c;SS$)+gt2`09b`_I>YZPDKptD#@cTz{8#uy}&`O1XWO&bk!*0=vc|wq~r! z8c!eM>T8s*Mv)K1LH|cEQDI#``b+|5;{n99%gBe_;ANq>cH*dfkvJX<^rx5N+Fys& zov`P4R8@xG$f=nrIJcqDIT7@NaB%)^<8*bC>0JBRXEd&f%_sZPi_qKR`-> z%<0A&S9q(+iQVQn61%}UW_9&{6ruB-4V1M_#cSH3uBeM|K-_$g`C0xux0+eNcA~1q1XcNvVHgBkQhmVfGhXAAuwhRfGc9*fsZZ#ch~qvX5q!$KM& z3WRgK9TmSv6)jD#*gwecrXpKdhEWdHS`<~ElV$#n#G*HhB^tTk+Q#Tkm}mRdzTBkf zRk2iTCpzY1Y;vVN&Vlsx!g;o5i@9{hgSK6(BD1>-E1;%KF)=^lS%)0&@9cm36i3r< z1&L>zhh|s5SN+(yyUECZtdIE{z!esS_}Ps@>pw=d1M|Psf+P|jLoye}bo^2rxAS)u zF136rgLm%r9BnT)RK!nEKQJFy<9#!+T>stu3&q7U!<*JKxvnUNP^R^pM>vLJMWI(o z-xcXSbGBpMls+x)54}p-Z)iQ8vz@O)`V;j>48=$6=rT%MPA^XqUj^Fo- ze0|w}`3sBwbG5^!rBi!pou8d|a47W16Tm%rM%y{4vG&?&>-4|1y#v{6ced17qiP1< zZ==YH$C0D{2Y3bl()RblMpUfCU~#f+=OviJ7|W(0x)y0@ zw1u*S+$*+6lW7^NSDk_l;0&utlMt_ZHCm~7!%H7;*yY9*(|B#;C6#=1>_>yDgq02a zBkZB$dT8upgLN9oUs%ns#8Ht&tgIACu@bwe07gN4yjE=jQp23X+vA2}r(Wyr?S`5p z1Mg^vzW#C}Z9e#h7!E$Y@ z1p3m6MS0Q)O2CHMJ$UnS)G}Kw259?l-AVeeUAOaBb)@#^0+)$9NdgyV&xA|bmB);(z@8b~>GZ0$FGj zJ%sPh(%+N}L@!GX(hIgG`i3~}uJrU*<8#N7tv(cuF)O)kth(9%WPh3rh*Rc4#&y+r z04ELP=S7>r1bKLW)f&woS`a1!SB<-yO-CI>9zd|z#j}dRcwltuKghf-Uf7AMkFV92 zu2kM<4CQaphc>wF`FlrKDceWZ{`0kyZb1EKbO!nSyR;+El`!}}OIT9QgPonj zM2z;WEEg14@TIo>kKktnpo{$i>T>qndjnW z@Lb4z*gJu7EDkgF01jq=20#FDR>F$3JC&h__X&D{Qe{O#?iVd(+>)1*7b@>d;a}dl zh?FiJZn+%aGvi=`0vkc6h-c*6AYH#t3>pX~HjN(sog`;t5oJy1DiFnCkJ1aBfbo#| zE=*Pmq?-;Mq)`b7hzFUG`%!GJHO`sxVA+B-L+i+=lA#MJwRO&&nmI+rc9GyuW+$>f zL8J$@1{fxZ$r16`RF!H{HB2I`u2spfzG|`x`+RM|@Lb^tWhsAl#;Y{7-^`GDPowHI zvcvwjQvW2~sq$f#`U_$U(EI|1p+V3`ISK1tRs@d2wnq!xCpgUcb#=o=kqL^&uKQv$ z7|)UHPATy(MqSy#>|#I!mUWp96c76WJBW=9&K#{El~lgjI99g8k8cSzx50 zr)Dq6^q%Cs%yI#96C!QXS7#P#uZvri$^{K$$&D3fze=R`ex^Oz-8-n$NjF-zSWas} z$=Q?^b0)U}HObJlFMo`KY@*&Qd0UQEko*70(6kSkwERBEkJG^lxcv0~99AcGaz>_& zXlY4r5vICd^(txd2@<4H98B9GA|$Cg0@WjTX0ccEVI+Ga8O^MzL98~BYWxu;uGS`( zfbxC-zsXIhx-mu^fsJ1agyiBP4roTIE5g~1g@4rlQ_DKz^*B@Ci8p&#p(J?OtG9Q5B6a~8wsvJN2-8fQx z@q&W#f=x_Y^82*CJ@;ymLs)~EjF`lLL}vLcZInqnDZ3fSlH+;8V>$7PVaN-`?v;D}|flGlCyc8X(b z&DrU~b#7)En@F7CQ!TFZ{Oxod>QC`-Qb&;e=WD0ujF`n_ql+q={4y)#zTgE2?KMtfRarv^K{Wu!u; z?zTwD^nJXsm7a@#FRZw2s78?C*#bNp@rV-lJgwO?PX_J;05z>!yiU?OLChfRkfkqp zygpICu3oiKe+S$YX{9m!CO%xFN|!U+mUXsYNZ4HS%;-!_EdMX zUV`VetWe(;i4>1EuCB6!Nib+{!?QWy<9|x*t6q)w7UIeJ;B#NxHUU=rb!~g#&Cvox z)Wc-^qNHK6BY|0|HYp1u&;z3&02RI4jg?8eg7lIxGU$iYi^ zL`*`TzzWKBMQcp*eId$;PQDBj-%8*&v=??Qq`&Z}f65YMprV?nw&4ZQI$RF#tXKJM z+b`6c@b?T*&9oPP%f;{YmZrv%-fH(@)rxwn zuPAS<;Pv32O|h(CK5K)FT|tf3e*9iz(CDe!UX!bw|KJm-7FsJxW#9!Gr1q7gi)g@5 zD3St24k1S70?A@dAwyNg&_TnzQt`-5uZGDAzaylu9WhwlinOB6fn^Qbh~4Ujk&ZVQ zrY9u3Ijv*h>~*?z!(_vX6C4gNf=v;~wvi&1Se%=fAo%qM!n3N8xk$rr;o|S!CQef? z#qUG)Kzey>uf)ivdJp@ToRWy1P&L2KOXgVP%{n;QAjPmEW=W}P#FXTovi@#9K83K=c#(_G(L8bm579Bg}KN>k~Ikw zvDqL@Sl}@owAgKI@hZcpr?IUoMB&g|FgvP?)4^9Mf*!6?H{*rlcGVp6R!rJpv#RWY z4DCsOHRyxMe^2A-|4ZI`=ulW=DX*5-UPNU-P+EKEYo|B^+5apNl={!tPHUs=e{$QS zrT(+q`PCI8i#&0P0Kuo~3MeQBAstp#kcVO8fUxBpm6HLp!NsLSB z86cpcJ!l&P6lFuRbO7}4e}}PR?bm2?6K!^*&0Vk?ueqK!d&#{-S%b9tObeVK|DtaT ztRVxW?KgiA&lZsSE`MShm6uch1^w2-F>e6B6LDvYJ(N$)diGX!t!7o8CU-XdK5Q4_ z--q|`+(jGj&3v8xiN&%{N&7Y<-)}w_5(h8?MCkhJ$f_!%o|v z$lJa?Z3oCuMSTGAc~nyyzDlVa1Eb`m#IO~l} zb$s8}AhY#8_daltzY=SQlqacT`9g~I!z1w1!7i#m^r0{Ope8{lCLw_+R>KKuy^fXU zy$6g)I1Sh!h1O2qCVNd+!|Ya#WP2se?4vWa>v%uaQK1^L&d%76`w(TGiY+0zE(Whn z&3%;0rx*FjV81`M(OL@&7$jW${ly!m|Nb&hZxL+G6TqSkSmCyzs^J0C-1NoUZ9Y35 zx@iw74H6db=vOLC6=a4b2$?l#VEiREtx=NpFm?tohUED9L`k!MnEpP#a&&(LP5DPW zq#n+)dUhB6nOM=@zkwnEYrZ#ohj7i_oj#a+iRMW{irndMH1T1n^e^|!Ufl261*e||5#JCmQa`S3th4##=OAm zbT`_^BozlQuj%Q+H1W3?@zT;bV&k>WB{XC3K2@g;It1p8cmvNH7rGABFQuqq zikaID8bz~yX}P{VhTTk@sY0)YUlMKU^~l#(o?ZO*n$xT~)x@zp*JJ|C>$s>>`om)4 zeX`*qE&WG4{X`qhzwhlj3GZz5RgXc=x_xxNI`qAk87WOIJE;f~2xp4f>8!>OoSvf) z&C2ui+Vr6C)5~;B*kr}bob4frOT19|H88~m*F`(t%|amGD%6tL40-er)O0-tUZCyF zPyFh(3ph^rI%Fxl33bTc22aqt3zU>|x3H+n_a%etCYX1EV+vrVglV(+Zt;y`8Hy9h z!$PkYO!C+kac`uz$af8`4{>rBh;=?X6NUitKR(189ELO@Gfv6eNESzI)d^Ep>yqID z?PRKBzB#fS)`ET`T3JW&m7&b72S~;Yf?3B|R@OeQ#k97;$VUUxV&=h93L6?jPiz8CWmX{Vg4# zfEyVakaU(vUvl*>#56&1pa9qLYQ_0<;`FtrF=GDR;UJCgWlsoEw05^M2kUs%=sOEk zs%hMne}0^bUZrpq!-Rw$UHHid#^CD}pThC>G}3E-b~l*`n7lXXF%tK!Eh^&nQLsws zh`UA}RyU$*IyPd*8gFWm-#vAiKDJ!>wcUm_hQ`SLEn|eD+*d*e+l0!$2P22&Sgv7s zCL+ntW$XUc;3&JPt?4QJ5HeXlf%*@hgO&d)ZD0K-MhqFW**stHIP+wD{s9A6!x)(0 zwYUH_3?9CYtWF?-50iF|F{IM4A|??E=)@pG#LPrWgK>H|;kpwPqJmHrIi#Sa&o`=| zW6`LpEQfYUU5jb~&nG4~TeF)mHjLYA7;9gVdic-sy@5%rX6ClQ*YC>oA))DYEq|B>ol*4-!#^DiSRKCg zGAgvaxg&gouFpI6ko*B2`0;8OPCZP)4&-Zddoc#5?w&pP^!``a(}NF&(p5Mk>>N!I zxBcq0I@ph&i)n~g!SE*s!IH`7t6UR-&8vL+Y?d*(`1>$iU zlG5+n1a z$geu1q*>3%88fI}fDjA^Jkm(sApIL~#t~M)Gt$1+$%2Z1Niu-i^x3#Q z*#EjD4l7be1TJV3SXURoHq!=~xgtJ|PjE`9uVNjt_qpGyTe$Ykk$C?*+J?n}Y|9x& zL^*f}VbMKO*$u7r9p5 z>}6c72!ak40JF6~_=%-z;D;6Uzt64tCzon|w-)?9yN)^2E+|Y-C zXb*_z*p5o|n0iXjjYtgEdhm==q-BW#7y|W=O*tH12jtnACw zl%%#+Nz!DAr0Lp7y|d~e4WRVVy}On@y0|EL)P^dghd%eTSdThJWIL4g-G}hzmtZEX zE#!8p?|uksO0|)K5h}FN2%!b9&hjro>o!MOkW&)BAN^rSj3SF7cDa$dz!^y2NclHG zn-p6pUFjNq{g@V_ud;7Ft9zO7ClFeg!4T(|nZ#~26HC+poyVAk@A~X6`PZ}jdZhQ;|y*^>THjUR=v0{u= zWF(%Wt+7v6Rt@oj(Oda`niQ(FgW8~&AR8@`ywJ+<|t-_zW7%yb)_`wX9p zU?9v7>Q}?Lf8c&EnQo(gvS#gZEp77L<7FHEQkZXuwmq>04;SI@xUv+xdvx1z)72)3 zk9sCIlhB9AJp<{?0YAek#EPI=2gYjbg}z<%iHMS0Yv*|M|a%2OwZcrnQovd zG5CswYr2P;j(&=#ht}Pu;+lrys;+LCUpMswG-nUhUSWY;_0ZV#m;3ffhG+xPv}?DQ zw(DJ|=GZmf{uNu-xt)$W5ACw=*he+H$a99BON2MT_>cjMs;ucP`sz8gIQTZ-*ivW6)}W6X#$oryM|JTDgv5R{4sHw zWq7t_?~Y3bx~Y80QTiMQ7VcZaA@K*cWDIT|0>m+^5Eh?%3}L zuv=}wEH+@BjpUGH9Z^qv% z7jxH<^H;8Dauz>1&-A^I+I8y~*Rep^X|HfCkbPNp{#l;SFtOA0pS2ZhaktVE_U|?x z#6Jvu?ZDYcm&{IfY*)nQZRkiP3a&w$qD0Y;y1+)kfZ$o`-pv)u!pihyX_dlqKK-Al z*%iaS%`rQHP2l=;Yn-%X5{_V9T|g<(^w2;GE})i#3Jck|TCwgnrEk>wBD~_Yx!CYS z(6uO_2>dsUQG`j&=!;?%2K>kf3=@^gVR`5iBd||U@GHPtss zeZp{K)v#CKxR0MZEEdXtTlEzjw@4hn&BP{9BNa0Fl@NtO5vu*F{Xr7Pe~tsD{uZZF z+e`IMja8w?n1|bd!EhNg590G`Ad8I5Xaa;37(Ed?I zo%{@FhU2Rc{z>8?z@g}UUd5vXhqDq9s;JJW$` z@6s6Nj7h*yg#KF3F{FL$(^Nrv4vJj0XHVJ;)21U*WBVM_HTSf27s=1=W3Cz=;0MNy zn){$`YLB@3QKqYGvI2yGk;GD{@?}M&EY*~eKte@XrYTD{P~zKd=cp1|NN~7~?qbBq z*07<2IQB!BrLO6$B(yNnQys0-cOEJv8@od4x7ughPr7!GZl6$t@^TIA87|}*I|?l{ zG|aEsNHsX#(H1x>YL2?_Bpi9LP;5xKd9Dq;=?wb$n1kTe6Ed@*9%?jHJO80lGy2Z3 zgLpG$KQwK7NDV{nu?{QRTkBSa^d8Z+2Xvd?wmm(^yj=xP-(HAM+?8AA5}vnjW@&}2 zhfTJ+=Del+|0lozKst^BV{d?bo(^y=OP0`OVioGv?vBc}o5WTy0T9y+ReXO*Q&K5u z=EY28Ib!y{Y(e~|oQgani(WJ@Tb1=<;$j|QD)JXBo(uzI4S=1}tU>&s7*GlspFqflj2t)d94YR!oTIl_R%@tRfZuy!3u6I;fYg7a z#4%$LjG@pIP_Rvbx1nwyO=nrhGCD|s1iHsGMo0sL6izUYfdMc-V5>B3V$bg2xj#$*aOE@< zoE}@EXQ__+Xq^{ArZ7K*^Lij_s6C6()(vc+jjeRw=|W_%HP_nV7>8o9;xJI!&9(;D_|YJ<#qmUolm7=GQTDVlPpE%0W= zJrF-E>lQ7#)Ho{A{FeybIN1;Lf7gW=)({-MC+kYj{1dv;No}XKy#m&i3ku2MW?1+> zz%^IyhWFxIZI3}>_$83%8Sq*W>ZFhpsG8^SRbNin%h6YPntqn zkdI9+>7s@vIkTm5MRx|O@UJ6FWU?cB5+U@;H)2ZiRT2?uvmmL&%p&Ms-c{V+sx^@fYJk0+DWJA z?}AiMdeMz&3k`L3>{y|D9l0?+!y466pq=JKup*`V)|cSmxDEajS6>131lkk|nC+|DOX1+? zHO>X#=>wjPdMBBkZBsSz3e?Fs&VD=g%F>c_e>@-F&F}0e%TFcCE}SF(w14A50z;#E z5U|olGQ-96Rd*3QC>m%g*@Ix=&D=m-O4z7v*A*R>YDYjrt68>(Y9cmX2s{hy;MlK= z^{o6c0Ho&_UvivOh>LJNAv6UF7GT-=5NlhwY6?@*gaV#K$2l`bbYacDg;c7MrXk7j zF({DuvWwT_A*ox1hO?FY9j7}U3ZiUNGtE+uxZ)e*?DYhhbeJZs8&xw}f?MR|N)?FtETk2}ngx?osmjw)Bzc2g$#z7eSc9xxf|D zhDui_9Y`LK0u*L{p#uIo8prK} z!PbX5(-j+@>FrBf_aHOYJROeIvJSH+edP^{HRqGC(np(pXk#ITYFQLGRn_#}BYfZZ zlB-$AIi7xq3myGd!%;t|Y2Q^_Ca9d6^C>cN3d+gXj#a+h5zywaQ_m$&oN>G?cGQ3lU9WLVm&`!lno^N8IC#*u(CK zy}wek21LJEH#Wog@p@xG`%bq~Qy`W@CjUlI&4&5`>kLi zd#AV^^|jyMI!k!$7UO-seIA;#`?SoGS?3nkhOGE39WP(0m^;NB;|~~FWsm2xu1W*0 zVIl&j#mtI1ggZ`8dbY%dcuQ!X(Q}}6Ob~}8<|dn6i+vIiFzMj+DRhX-!$7MM9uVP8fC}Be1cR9!6SQhpDsy-5=c%byp)8$S~Un(SHy=(%B+| zbo$Ub9C@30JD%O#%oXVgfgC7?0J{xR} z0Kx+sV#%>IuLbr%Ui&@uq_QOzX{e?RUrAw!g^S5MMX@{`(#3WX75vH=9$Z6sz1CpU z?CTMoQ8REO5+JrykL1l{ls!{1Dgw&bq%_IyBx|i=z%XmOyBKCKwbZgfcC8^ud>~`2 z?P_pKkww-}?7}2_rIEoX`!N-Ht{+#!%XD*Zm}Zy36m&W+zpe$W%F=|?g#H=3EZ}Nd zZJJM};J^xDsV`!5o9?~~(xDx8AQme0+NroK47POj=QY(HKmviQ`Oa9_j{For=^_%wzy8|++BOZk<6wTfEl=;3f$%X)3^&)56L1>q$rpJ z2#BvZ$0Vo?6{(LECl@m@yuWVpnj zkEK=(&k-vs8=Fup5WXx^f!6hwz^J%DPu-8i`G{(}3{Eg}Z3u@JoLVo4JRKG#Y~Bg& z%eWWn*A4`s!GX2G1n?u9Vyy)wPE?&sEKGI;p4s~6T*I|K;^~2PH?*+BbW6u!aSUKs z`=(;Q&JobcIuHk2)2xGFzSai<)I&sZ$z?F=yc;1}Wfe?HcoNbAQgcvm^A~`**61@j z-fWS8SvF{wVY6(?mRF@{wfW=CaDUY@45{boig^@0gWjaVV}pczL@O!lwm{gr7cgg zZFa+e(CLH$em3AQD^YC-qJQwzB7V>}}LRKi%~1`w2=#KgP}`7qmx3ekC%bU3 zQ|!;K+_>9eojMnq7kTpE2Clphw%r9;^h?Oyd=Qa8KL9W8FFE$-&y0&YbK{a-d=N6} z2qx?bu@+|Ky}*yVO}s#W$ghNg1#HO{=|1Ou*K7H2#1I zf<5z+ORvBbK9i^ird{^fX>!p@A`X=^AmGF&*poRot0n;@gfdlX0@CqiDA$XHI&#xX zRS(*lERltfa5%Y;A&rPxlKK!r4t&FJLXI&6_ux9@DO%h! zW{p8Qj>m;Ch?;{C5^*s|g+xx(B0!P2o7EPrNqXa2L;$`*mPYI#->M)m*|#%=Go zz7hxGO1sbhuM9~Zx!LFCAL?{!spGj~L0@dg&dw0E6wUV`IM6wDppyP~cknCIx=`HN zOkpk)M9oVL6<7Wplo`lK;cb}!>K_)3$SGIO?z^PfSl{1(dAY)1gZ&+@PUER{5}+?eUTkP);c^=gz}kc z=1)yjkgaNp(=`2F5DM-Fz4tc=BKrZyx@OFOL!2k;+xBkT7uj}4BctiGww>V6ySnY> zwzqSQ)6c+~b02Iu#KI}-jXwijR}(g@-;#HG0b&ZtX<-lfNoO^bH^kmr(}|NKVo)jcE?Bq6kHa zGm`sTgpuBfC7ac{4hT*+!Fg7FE$@W?;~GDef!l@UuH zwETqsfyeX|9JDjsQVSi)|z+y7r=qT;vRIHDDiUTqEV2)0 zcG#YozI73mJ?IODz)BQ6qz{>c6X0bITvQg#Z)@oN6|r}J77QBK_W+!1^F>(Lda|pv zwB~w2SD-!Uf_qLxHG?AmJcQHL+@XFw3#=q^lzSUp=@Xz(3t&Ok;AVrlctO2pv=5); zdhM=ncpcvLY0c|JjLYS^4+nRb8Cr|`)EH?aj_$kNokI0{s!`@UZm8vxAe$DT&>l3h zQ!~F)EC<0*r7x(p>($y}jhYMM>tCS4cQ_cW^=rX5{F<*L2QJA#1Zd(Z{QFZcyP;iDmd_rK+W` zjFV?k9@}1o*dZ-H5=>fRQ}`!nfbNK@gF6!+?isCJFwDZTPrq|ub{&PFSH!?Hy z(V!AsEULdr#wzO|N#01Skgkc_f)%#u5_~os&r4zp83Fmn#)2)@C7`dfE;c&`y(;Kl z+ZAyln52_~lR>*PzhqB?0D6LJf;~Y-dm;yU+>E+|Th%=(Z&G#-^V39B5#pF608!T+s2lc67%dd#wit4~ z@!-Hnz8gsHggDDWp8uk@2o=VT0RM#1=7Ei(16c!2>5SNwURY$apU9lXGE@1|wyVG? zM_B^5KzF^P$P)Mrs+@iW(%J*?B|gH|acHk>$toa`Wug>F0ptU$NEyl;X3H5{%7AMG zia<&VAq24C8%lOEWIzNeXkl2&AxtAKPGV+Y%;8RaBj5|Zm;^Db0uSa=ZZ!A+wp9WONW2)P^QZ@n1u}iEO(wnJ9ya@6-GM z{(`zcVU?t$o5O@YuJMM9{(O@+q;!A7>+Z`=fC!a>vMax~8(jB2jheZeK<*+)hu=zD zW*G+meAQU-q_sfHd_0dqTJ>jX@ zQwAz2cfcRDLaDdgt4-gDQ9^Ic*CHq<7uK9}4PVJ`&M?`}tC`XLzH_XdD(`Xf@0ljD zo84$ZQiTZ6%C;${B^4Duf$&oQKWv!5^uAe64T?!)mCBEMnv(~*0rRVoDs&Pkdju~r3R*lV#<9a-R(v|r~j4=rR3uCkWjn&%7 z=SH1@Z|N(Qdm4+EcX6&ExT6k1p5`$8KT(lS`*m2#O+?KgtB~^t`_N}Q=iDCs+;c^r zKNNk4Lj3u!bKLZGV0%|i=j*(P^9w0=_i4V)ag?bzeXk?=d5)RB*YAoxClr0?I>&II zm*6>N4)8-opY7BKIj6nQbN(dW19`_mCUFXe4q~>E%rV4vvM1uCF#|Em5iCP9iH5L@ zo8c)$Lt1_%uMnr3N*58+HSq?gteikre=RLCvz2vNK1V_Qx9U;|%xf`VvE7|E_tED5 z3A2$Nj3VA^zd;+(N89{;v>j^b%ft>uR#DD%mvR6?l|hY@EOJpNptt;UU<%Qami*Gs zic}j%yE@E&hqjBAL`lKD^%CHZf$fQSAIl*BJ*~KSXUL=mM_eB=tCuk2ovhJZ=H#F# zi1We8aTThJy%Ex&%ys%8d>@}eJN*?x6VOnSe5E;UUD14ul)3 z)#d+_yn~P^wN@9045?W#pmyB4poXO5nyUV=JFEl)9c%bQ&GPRTI|mn^7Z#tRQ6mip z=15O|buY@gY`iFVJW)Mc^HkSo^g7?1p+{M%ijnu(93T3E@CpUGnu z$24j>*v_ya@kd{?jW+*Td?)&|eRoZA-rsjW)Ds=l6AAqMuqV2xC(3Wax6c`R{zbDY z8fG=$ZdMPHyBC?&yG$fOr3yG6;-6(Ha-*xxW0jC_a-QwIq_HKlQ>VWXZB52*N|T|+ zEc8BgXBLPT0o3jvmyc4tMVrWuV z!d5d=dAD5s^6OmvQlgJErC<_BuNHQAu3%VWY-6-ym`m#j%_dTosI(ik4)IoJ`G8k; zo(t%Ouq@i(_)0A9WXizBFgvi`BT|o#(+-9FQr8rPEGet%Ujc&$l8vGUiP~EnDub}7 zH8j8HdL-Z1_4t-X=B%*AYJbEb{t{S|-B;9W)>`92Z>aMe=pn|E{M+hs3&QH1?KMAo zawyaHT-m63D;gN^E8YR3l8OAc4SnL@z$Urzhq%B*Tu*lIuUB__mp0aUe5#GEA95#N znTf&sX`FPnnXQcPU1!BvNRdac1yv6_PJE+MT|_MbiOyO zcBH~fqRtgbrSmUg96E^~e>iorXJS1(+>KB7^jrT=RtSvg#l@ID0%Karw8UMt7@QcZ z!O*l<+g9Wc9n^L>Ds>#!c2e7^$T@r!R)q7A{dy_J^tE8&xv{7x{hn#r_KR)zu&v-> ztOtnt;6Yr|X}r?P%0pX@T8ukh3V1NfCY|;nH&S0Y;4xljM(75CF^iB4I!sH{JP;RJy{GPD99c^ zt!^w@ne@1+3AV3)(U4yOn^l^8*>WQYwt1pf#=S8Ab6N!r^C=kkRntKsz+uprQ++@y zdK6MhyZIJ1>6YwMB%ve=)1@@R?*O+;*Ntf$c5h9qc9*ad(Ea6q0eeO_Onn&c{a}p( zAr<6t>(5CLw|j}VXrP+pzYIP9Ly4I@rd6!`>#0>;km`{@X23zVHuc;8vq`WL^(B5I z9)n&dbHAT2pX5|n-gmg&fBzdIL{(wIGfCOE?QDY|5)0?D zxXTHGQO$FLMzEX`+#;QRazT*$g?U|064__=735L5C5stZ(q!LqWI4O`FsImn#(Eu1 z5LWdt>>&EmYBE7jM0z3=$yyPfN!Bht3b|>9YC`IgMd=0{FI@uXlQ9hQ77C?GhAc9e zQ!#cf-T<#4l{-a{IgILLxteULh+MAAzJ-VPg}jw!b-6#=p8iMlL9vA&@W*U}x-7Yn z|A4LQg3ar3em+-TIEhXP#I2Y|PSW$6D67C?{^>?F>dqW=Uwa{KsPe+v_hW9a#ktq7?Ccsld#2rZsg=|tw-yY?uuh54T{VAA_rg3*Qq^>=g#1YUHrqV@4~yiK z3T^@fz}OX5UtO-X=_R&y9Bxz(Y*0I3F~@wac%79>RqRNri${x}pQY8sBltOWEK~N5 zQZ93l-`5!jFjT2Z2P?r;-QXH8>8^4KgH5tpW_}0iW)e$Sl4Zrut)p0Ar@q6b3vL7( z`qWg?TWJ^Hf!dpYOWzcWy+)EO|AM|Ge;k$_Si{BNhL`?+U;rx`)t7msWu6a#r*RqB zL-#;5*bA`I9RW7N6T#!9~g+`;>pz2-~EmVFSK4%I4`xhH>Z%Q3?p%gzLjP%azrHtka-)^PaY~yYRuYcxRCAg zR&t+Dp1#R+&!VLj5Acm9IMP5yX{DBZ5YvrD@~csL2zGHlMhQB18U{)zK=WG8|8lf8 z*K#2k*qtQHrn#DI&Kx*E7!VN{Pzgvf=@+CF(hOc3H1I@-xvHWInpz-17QiZl!Occ5 zEquEoL%*t|$B{%De;5;XCcKzYFD>A)m~B?&x>;*+dOa&3 zhR7{LNP_$-sAS_wm`#;jZRP4KWw+Zu zD)2i;krjBldSLF5xa9W|$(t3iLRElgG zMV86R!hgSwu%#p{7ZY1fe%1q-zXJ1?o9HkkfTEWK6YkY=o&=E6RSVdW?Q&a=wkj(eQ@^m!cBv6V#Oaj0KMT`}}ba{A10+P$UMlR@{TcL5e|vAfJ`?Zdv(B zmVx>XgU4#RuDe*4-aFVG(QwJDai$H981vgWYrwVMf$zRsb+rC|NJkl1!2P;&(U36! z8#fA$AK6fq{_J(=1dzB4A8Kd&9u@Ql)#G~_HM?t2?B-^U1J(H>utepz#vl=aYP~l~ zyX@#ov!Ex*5E)=;D7JDL{58roaG(7i+>ly5`wGGX!cK1=A2_FK%m3T2IuXhqZLHZH z)%<)YB;rk4oZpgaM7h)mx>|Ua%OzI3$qF9XpJPd+i7ZuZq_u?8yznu9WpEM>#!`Fv z)NhMQei~g=IU8CF7)H!ywS7BMN8tc+kP^?i$ zHra`uZq*V;;u9%wdB2mv1vCUx>y1g=>lq^Nz{^X9zc*gp5?t)0$U9E*C#hP~ai|Xn zStZ)yf%p&pe=+ET?lM|tIQk*v4BL+2BCi_fSELDo+EMn;gI&xWdvwg*Y~(lTWA1w8 zO}In#25YMl|6JJ}u2ByugyPDi76Dr}wslk8zY?}I>)`DgAJm$^c4OOH8C^b#{Mj!c zC*ywDYQK++_unu(P>zUo;@^`wY$MDIG*dbIXmKpqK3*nX&N*za7Uv0yoxHpSbqYnD zF`&>cm$=T$*43 zMllKz7>3gyiDQHl9DRTtI4W@lSX!mP0>Ork@qHy52z>bHAte|o@}Rm6T>_V;h)5m# zl8>)GXrdYDhr0~+$lFYx$tVQ<3Y4x4LlJ}_1|_O$jXOZ_fe8G@+7)gP5Q9(3fa%umdPob*-Ne#MwZiz)upbX9(r2kH;1IKpB$X8)t}x%usY1 zh3nqih;3Aedl5Z^*=-wm@Va8*u-ny7Rg^k=x8gU^vxbgqDSZiO;BCJ*Qf?WjWe1|F z-PwIv)?Fdk%Kx4@StecuH1pr8H4tIm02F3j3tzO{B_!KDcG8!lqFsJcWM<-Upjn*1 zA+uf7kV(axluCXqyuSX2;w;^>C-_u6ruF%?#c}Tiox0_iH+yq7E7~F!I00=P#-c9$ljwT3H)%;HsJHXz{$co&lYY|xA z$dc_`neP3GKZNp08_D9+?)3a8#XBi|kuOHmWPyRrVgwP8!iS&)<^8xIs$BFZagS-M zV(M$j<{+LTBs@0W;>X=c1qR$r-Q%~{v1IH;)#~a!e^R;xM5x|0&D@`j35OssKM4qk zCqT`*`<=~NEWRH1c-5(QCw+()6OZbfqo1Q5-8Ru}1r}WNk*Y?4(i46#O2UtXDD$Pc z`ETosf2G@!qqIf-YGPzLf33-fM7ErnTA{acB;_Z7kza*P{yT`H{3$T<5AaGp%QhTh z7wAHs?+C@vKmwDIP845$1pK4NgA?f##!0Z0Ht|t{6>rO+S7>!omMWv9>@VAa7eEc! z!tf~fi|dpD5cowxSYcwtH~LaKoBI~$t>ktYJw@6c`Z5~QITG?9k1a14*8qM{J|i%jim`0pU@`j3bB&EqE{- ztAe={R7nVH0*MK@ObHLEov#YNDx#ej9&vr97+5|@L6<5Sk5EYr=T#AtiQ6_oQ5KRY zhhP?R-0WJP5+BP(r1KabrAT)cLt>d#`(p%4nZTsMNB)sU;zE}4;AbZ@@ULgfc@iO| zsz?wWfCQXmzKDc7WZ6B3>I{C}RbEU0=~iu>Ze~H-J+9IoN{dsaCmY2x=__zM)Wi~< z=%EE2E>%y~vZ297XYC%CntG}f$BBYji#p(gG`n#|{(8uAmn4LFORh_F)HnK_sSW|7 zmCVo1g~nOitKqc|t!!^>sM(#>`~r@0f>^iHM>uSyHUOCg`cb-(rW%Olv|NO8 z_GOXVQHdB%)sIt%Rq`x)AkRpjT8GCDI|K0mJUi8M$I?xa*pS5C2>E;hMy+ao_wuMZ zrsgE}9ZJqnR~em}^1SZIM4Hr(^@a+@%ySXh6zA&~^d{r}!>Kn=eRH@T(AVcBQ-3Lf zn;;0@JLWFv$sb92P?z&j6i|3e8Ucrrtdfr-Ug?o2P*oJ>+<*vo)#kj$brj!Ok`rZ} zoMxm_xnA!#4WXTgd z&Y~pNjApOJX?5>%Hi>4#9CA8=?OKzAti|s)rbq=Y0QR8W^;o}KR^Vn!i z&HJ+l3o_0i&6@7`GJ6X#FVoj$y;u6j_WJ3A{;8)UBaaupkJQ>rysGONvLXWhx_VFhdAtTzl7@sekl?J1{+oc8WLwh*N) zcAzIftttF9XAoadZHDeym#cZX)FGDf0vES$_TMY5S>`r1)5XP;TB|O;hG&;`@HEuA zboI(AH9rM;%e7Qt&eGztcj#g)f@k#Xq-M6QUUkgeH!aafd-k539r=2`aP>83E;VY) zb#tXw?fUD3x_7;(Ht?MRf5_ZFyQzL>&WgF~WVG+%MYGG7drT?&i&wACfA{ZQ6I2qq zwUyVG7kJl-FJ|vtug%=3Ui{CZf}&M!orcUd{l0-_Ma%oU_-7T%a^F?rMtp(Ni@(U; z#eTL(?_$&=`To4zHEX;D@BYVCh40ACQOjqZU}^B;h&ta3-Mr$9!E3GyUQ=>w>B^Tp zOCBu@c=laeSoDV0E^~*Qy|?|928Y!ws0F%=i<`8+v-ZYT_!qwQ?d+l+_h6t;&5fUj z7xRj)Tc+9kI$G~?S*iI$fufavVU1md+@%Ms{qp)Q&gb})wmp+hD^}nu(2F~Y+|iYy z^tY+q3$84=cms~!&t>F_vL#bt_4E~cFFIzG@4Dp$O=2i6Uh4jzoZ6M7q+4J)cxAa7 zXM5qw{q41xTiIWItxywT3s-jPRb-_K{Z;SqiRCYgmMkyJ+vN)_yLBLQk9&BD9vZzN z*Iq|c?C~|~9YKFuv}WbC7k^4SCwFh@%3mEs_{D;oX|A zRIsUFowCz?QWFWRm+iy$aSwW~^{w|`@4q?khxr=|zED_L`0~;dOMe*%2fCIOEkCoe zq`3Z?m)~*r+N$ebEZ@4iyz<$qja4tb=lSdB)?9e+Oz3n?vaTfDxAEsUfAf|-zwf{G z-rJ7X-yi*6?EPC;B}SUUEqju6AAY&*_B&tr!&}<#>L}lRqVukMJp1p2D7@o@;w5de-*T_1w}^-?O#n_MSU?cJ}P+>FfD;&x1XOdq#V{&~v=!$)4Gs z(>>4kyx9AJRIG36K#xB6ABx>~{~w+H_>&*M@Fy=kaN7fOpL*z1=RZC2>7$=M`RSQY zzy6t@eRl0<_kH%@;k?7A55IKy{NbM+zVL9~!$l95KfLzgjStrk^$mS;=CxFopMCVjN5A*zj~<;nQh21~NX3!r zBexuh9l8C;T}SpD={xetBZrTC{>bqoQ%6o8dEv-+j{NY*t4HR?oUy{OlCg@hy0Kfv zVq>?D-8Hsv?B20YjvXHR{Mhlasj<^X&m8^6(U*_@)6v(D{_-*ZV=ErJ?y(ylTmRV2 zk3}DAe(a-_p$0v?IbNuY_Zy!H* zqUXfDCmuX;_{8T=96vF2;`E6ZPJHLY`4g|5_{9^xCxTC0d-AE1&z^ko>TWcib8pWHaPb8_G0y^{}44o!Yx^5o>~OJ*|QxBc`+^J)yCQdzb>g=g+pE~#DwO_vf%ddT<=qsQ6%BxRxJ$3S_SD%`H+IhP0 z>5``_p00lSmZxJ+pLizu%v9Q+PNpxMKK8fOU%l;r4m_K9_M^}CJ^Rh))<5^n=YH_q zkDhz|xnG>|oGCoB>iGx1_QKcCf8&l9!!I5DR^GQi@%J}>_w4t7`NPkh^Pej@cf+|` z&Lz&>b*}f^>*s!X{&WB2{PP3o=7kY34mN?!U<=p^J^=QE1K=Py1P+5E;3zl-9s|e032+je0;jvq z69zXf%qhNk;T2($Ep5cphHjNG-&vvU`A!j743>bUU>Ud?tN<&)HQ+k18ms}=gSB8C zxB)b+^3f{aF|G0)(<nmz%?^a(hoOu#W^0*)yYaMpsRNx(5R0*>hrP`*qHZz8^N;VX)7 zBEEUysN$wl0F?r$6mYh(#k2}IrcwZv0?JKGr;Vdbs{mRB&?Trk12-! zLD%%x8*PNkrQU18BCr@N0ZYL$a5Y!~R)TB5wF^(`*mcCK!5VNqSPRyH8^C%n0>;6u zq|ijX8EgSt!3V&8Z~zPzH~~(AQ{Xf>1I`*sD?_hvh04{uFdqzn zL2x<$wH9)P%D|j(vr6m=TF4d3Q;Vk!rM97!iWO4ZFbXz+G0g)j2*x59i)ew1 zNWX{{xQO(Nl>RH)(^}vnrEh5I7m>bZ9ul{di%G4R)QTOmzt}PRi}g;Y*Mw$&G3gg$ ze=+G7V}CLB7h}JMnru(fFUJ02SoA0^+s*!B?7s$8%kWWp#;Wvh~=1O_XNRJ3!m5fmZBEd zK8B6LQmiV)s#2^f#i~-QD#fZ&tSZH-QmiV)s#2^f#i~-QD#fZ&tSZH-QmiV)s#2^f zgRu<8G8oHXEQ7HO#xfYoU@U{N48}4T%U~>nu?)sC7|UQRgRu<8G8k9GxEjXQq`#W< zS1bKj^bTXYny*&+7PqprTIm~FUauzo)ugD{bVD{XV-<{5FzU^9QlkpSDj2I^)Z5Tiud86Jg0Tw5Dj2I^tb(x$ z#wr-AV61|%3dZZj@(I0BH3%-(HB0YnUihMLtD%n7f3?41qi`)&t;MRfShbe)*OKO1 z(!9}Gw(u=I*S4B$#U?F^f5I$H4A0UJe5W)ut;RA&50rXZ=_7Ce?8Nvq$sXUxf z+SRDLX-Hjdhhohk4TXkJ+euONh15W*`6 z;T44N3PN}VA-sYRUO@=2AcR*C!Yc^j6@>5#LU;usl~vh^R}jK02&vrKmfMV1sv6dt zdMd+)4PXr1#(%d9*HK^AQD5{ z)Qf6Tt0pzAnW25ENv)dHs!6Sy)T&9Xn$)UEt(w%TNv)dHYDley)M}_THPo6KYE2F4 z*N}bdw@wA~>45N0GQZsB6)?$Ax_Sa&6E%w)9e=YXwUEfN%7W-?lzZUyz zvA-7kYq7r;`)jek7W-?lzZUyzvA+(+IvDFnzmD|vzEtH}9qHGhe;xYQp?@9e*O7i5 zDc6zm22$HVY8$YB1NLvg{tcwRf%G-9r?zwhmT$oF4OqT`lsAy_1}xt|`WrIoWBCRw z4^!X6VwureE6W!CRv091Eozv$ALjlvObZaE?uV)SVd{R^S*`LGrUeMo0)%M+!pgzF z(RRB_4LjAK-4TSH^`PCCg`GOkT86Mbx`&|!2-5;VI!Vm7-{Q-a+D7Gz{kI4#21~$Funb%cR)Ce@8gT8xi#m24@oKOJTo2ZQ zb>IfD9*lr-a4RV^5pM=tz*cZC)~3Ki-~(*$2M54Ga0na*N5D~V3_J#ogA?E+I0a6F zGvKVD^1{#y-e$bY3&W`CCT$HH!EJ2cF5E<3Y$7iuD$J$;W!~ zv7UUar=6^)ovf#wtfw8Wr?sr7wXCPLtf#fCr?spn_v>jb>uD|Z_9wL@^^}ANj1d?k zFh*dEz!-rs0%HWm2#gUJBQQo_jKCOyF#=-*M!l^;ToD)}Fh*gF!We}y3S$(;D2!1U zqcBEcjKUa&F$!Z8#wd(Y7^5&oVbp3^;*G)>6U!$w`_267m{^_@S}Bd;SI2a$wrhVw z^Q*UF)mE(9id9=le=BKjCCx_V?6)+Z&iv{|{OU&h>PB5hY)ctves!a+Acp2wH_Cf7 zG{3r0-lL)U)s4D37@A+LwPEHyhUQl{s+=2|U)`uuDlU~$L-VT}UGu9G z%E5l2`PB*Kqs7gyPH=5aa8*s8Fb{OW{C#S=pF8xver6I@jj_|*xnstK;A39hFJl^;vT{OW|1G&{|& zPDn{Z^Q#kFPZL~E6I@RdTu&2RPZL~E6I@RdTuBpLNfTU26I@9XTuBpLNfTU26Dq4> z_mnP~<6ZNHu`qD&wX`(zgQD2&QCi{-4) zeAi}Jn#J-{#m#qZ7K_ExhGH=^-?dq(8Jh3fg8ePn--7)u*x!QvE!f{e$}QO6g8f># zN-b>*_P1bv3--5Qe+%}vV1Entw_tw@_P4^=3S%pbtuVI2*a~ASjIA)X!l)U7AZn>1=2|XHxaTwwuq{h7Z#w&A+I) z`7mwL+~VfLwBf_F;ls2^^YhwbK1`c5H#8rnO`02;57Q>i4b6vX1=2|Oq+Bz zG#{o-Ivbh~(1=2|Oq+DJ?dHSWDQ$l&G#}{TtZ?KWz&*RfHXy{c=9tFE2V+bnI=CZ#%SX#F!OMr~5mmlUHmDXu9g z>Q0JLn-n!DMGZ<(cT&`y6m=)Xl_f=eNl{Z$)RB}doL2gFWl71-uL$kRl9IJYg=TGv z8kC|2rKmwEt}iKSP>Q;fqVA-0UY44TouxRh6!j%VeMwPYQq-3e^(94pNl{-?)Rz=B zB}Gk1QBzXXloT~3MNLUjQ&Lh)EYz12^(7_sY>SQHq|{Ow+6YccZPbi&h`cyNUK}DX z4smve$csbd#UX4yL|z;sFZyXe`)NP>X+QgEKl^Dv`)NP>X+QgEKl^Dv`)NP>X+QgE zKl^Dv`)NP>X+QgEKl^Dv`)NP>X+H;G9Ds2E#sL@yU>tyP0LB3r2Vfk4aR9~v7zbb+ zfN=oE0T>5h9Ds2E#z7bdVH|{U5XM0m2Voq9aS+Bq7zbe-gmDnYK^O;N9E5QY#z7bd zVH|{U2*x28hhQ9naR|mC7>8gSf^i7OAsB~X9D;EO#vvGoU>t&R2*x28hhQ9raTvy7 z7>8jThH)6iVHk&D9ENci#$gzTVH}2W7{*~3hhZFsaTvy77)M|nfpG-J5g12c9D#8J z#t|4tU>t#Q1jZ2e+dQ5Z*I9EEWV#xWSjU>t*S48}1S$6y?TaSX;W7{_27gK-STF&M{S z9D{KT#xWSjU>t{W9L8}N$6*|YaU8~R7{_58hjARnaTv#89EWin#&H%j#Ct#d_aRSCk7$;$zgmDta zNf;+#oP==_#z`0_VVs0<62?gwCt;j~aT3N!7$;$zgmDVSDHx|p?QPQy42<1~!ZFiyib4dV=qGcf823o&YJAG9%F_2dz^e&ZP!FX~+a<_D(5XmRrc)A)gD{J=DRU>ZL#jUSlC4@~0+rtt&Q_ZL#jUSlC4@~0+rtt&Q_)Yz%+hf+WbJb%5)Y=XQ6Z!N@t;T7OvpGMWFm`ZIQn% zl)o*Mzb%x%EtJ14l)o*Mzb#a6jBp+CYEb^Rw#eTW%HI~s-xkW>7Ruii%HI~s-xjLR zP}oGg8I-@RE%LX8^0$TZw}tYzh4QzB^0$TZw}tYzh4QzB^0$Q}p!{vciFD{&boj&+ZnE+QLy=IBE+=ZQ-ab9JPg`ws6!Ij;c3L+pV`d zQ=y)Z5^5w=sF6^io`w?Y&Qw?d>X|gf*MJ%aQC#C7LXCq6H4Y-wIEYZ=AVQ6U2-R03 z)YBS5^~(u0_91Kr^&Fbwt)Rv@6jz^&Z~)ZPdWsK$!{7)w3hHS+{Z~)x3CF<+P*3Y= z%M>^b&VaLq=06L)!UzgPP#}T=5fq4^Km-LMC=fw`h}~c4C{rL}cjZD;Ac6uB6o{Ze z1O*}}5J7F=1tKUAu{#LGO@WBrK?qHOh}}U5O@Rms zL{K1N_YvA+3PeyKV)qe>n*tHLkI+gcra%M*tUp$5x>{_*71|!PJ1?P?hp63o3H7|3 z(8@;C?!1InLZavsMVTndL{TPccV7B$4QS;diVoJht1Fh>c?osrCDfglPyTSDD!33a#SHlSVuWvK!68c?hOts2m(fwI(qVht$P zfMN}lr3T7U1G+U(mKrEa4V0w@G;Bbn22^T5r3T7U17)d!vebY|4V0w@^l3n!2J~q_ zp9b`4K%WNmX+WO_%2ER=HK0-hDm9=|11dG3QUfYApicw(#84oH0x=Ybp+F1;Vki(p zffx$JP#}f^F%*cQKnw+9C=f$|7z)HtAcg`l6o{cf3xwSQ=8({ zrZ~#PsZDY8iK9;(W#T9kN0~UaDUK#_)QF=)oZ1wpHpQt;acWbX+7w5nI4Z?aDNb#Q zqg5Q0;;0m-HpQt;akPq~RUED2Xcb4RI9kQgDvnlhREncg9F^jz6i1~vD#cMLPHl># zRXn2=wJA<*ic_27)TTJKsSza`QPRd)=CwYGwM#bIVsUGi8d1_lUTllCOE&&ual3Lg zqE92rG@?l(XWGb_HeydBHZ)>GBQ`W*LnAh99TG8@lvmTE2E%>I6D|7JFxtLKM)l#S;(OWYONc)sHA%*G4!Y}xhM zc%f73ZqLS-YWv=7JfQeUHXd~R?lal=a>bu@ypHS3m+5)#*=*c(NA&_h>er=dAMnG8@l#R{4V2c!9IsSCx$y zI(5EF$1c_Ozs_zCD1PbKpi`Lhf$a9>iYKq%v8KFc)22-~uCK0HUw-?2J>5GydiQtk zD35k`^`*+=T{}YMEgc=@?R|aiJN9(!EZ^6;qoXUO4ZC|gI`(&T^@YmgyRQ5y?@X2N z?@XmSyLOi!>`Zm`mG@mvbC)F<+R?qgd{=jG`Tp+Sj`Gf~UEQHA?Y(z*cWvKu-`yR( zb)o9&^_y@1$o6fU7jM3?xnuW%eeJzh+m`I;O?7s6m2>FTcF1fq%i7EPdfRt)>~HVA zr@VXD)lav%{l4<8?Y-@HcXlj_?&<66xq02XtDMZbp7z}xsdZUh-g>{c{?FS@;f?z( zK2tq2xkGFGma`t*COs2zqn@^^*01&2cDq&z=yAH8olb{VfZVSY{=R9m_d>cLYdrPo)2^+1^n0ha?Blo&?U~B%v0JIx-uo3SB|ARu?BeKO|6jR| zHYQ_F>C>qrcI)>+es}8Va)meBx$Cl(A=%QcTA2U-K}_+ zwr`j9_vx3Nce8M}RyE$o9(CHcS|2@`#+whe>kSB--*EKeV{iPmqZhOMru~vI+u3I9 zxx)H(Q&_y;B@NqkW_>!Nc5-w-=W~y?b))^;&+TR%d7qBkN($}LsZ;h|ed``E_Nf%z ztfv{*z0I6jr~PfMuny(-x?d|lzfF3-%`v}g8-7!Ii}Px6sqkbja0`E=YtvQ!-1~L) z@Tg7pX$@Du*0s;mT&n`jkt@`7EueAApv_FtJ3ERrUtyKjyf4x7{iRyL`&#FnTCwe2 z%E8~$+dNk5tpJsJD*HWZ3)bk}9`Duj(l@G}tzgB0uO=VwqtZEe+^qfds>w$kz<)Tqf3T#s?YEr3aQ9aSfvDQ=mu=5e;4vn$h z>HL9Kocu$r%-^o{lgD+<{*=~JepT-b`EOdW|F4{fT(4G$dqgYg|3A&r|BUO?ipu}4 zRrvo}v-0P)GRZN$`|W>ey^;x)ydAo-@6_6H9a^K(-qrM?*5!XmGx&FDy{B*LO(T;k zM{`<*{AH~!_xGyRKXv}E*0J5I5_^x@fqkm&f1&dKF_pMpm9_&ap$9b@^b_Y^y=(41 ztyK5NS}Wiw=W(r=@(Hc~{HI#s|8?gXH%IG7u9xrfYz)F z>W!Q$v~G&tQ{b-B(nuv*L7>$6h4UY7nO+9;POUxiF1OtMJ*{iETI&kvd3*Og&UfAG z-8EWe<-K~N)Qzsav8Y<>X|8u`wI0DgyLDQ7Ags4QZFDzj4VKOBEn0~{6aMwC&s&`- zXIgz5TXdhU=ZUmBfu7KD{?oZ259VLA4(A88T0x_$=Oo@%)~r9%stRYFuWD79(^?&&*G;*7 zdIR)9y@&K(_ddM|`j6a?yML_rWBrL%*7{TT0axn*x(~Xa(%Z8BOmB$(tX2Sgf_E?c zclRN^FZ!_iu-+Lx=y=>AcR2SzS7&u~%}xIO?K^tAy8=BOy`9}V|UizxD3kj)NWkcD{0N?cUwp)p1X5d*-`f%g%0jCw6ebj>}Ph{f>5}?BALBsuxXr zpMKd_ZX}z&Tmhr^M>6Sm@Kq4GoJc{(T;rD$_ryQo>D*iR!9}SS z-m~b3e{1`W1AQI-eS8&eUG%TQeT#nhw`NXcA78$$BJk}K_!F7qyE4Zo79CR9wdjXG zkvYDLFK?u4x3{BfckZ^V#NFA`+Lk%3ZoZao+jF36cYE)F{rlPv^eydP{L9~*;qA@v zHZP(o>|ON3-<;v?&3v_Fj!I>Yx_!}(g?)>D_;1hb-p7~kcFTr7fxoq{bKlMm{{g;o zTeH?5$Xef;vHk#GIjz0&Z*vY9E^S?G`_co8f91AjGw(p=d&!4(boTBzuz%OSj(e9J zS``1tqWFDR;{H1_=X5_`1$SJ|`hxo}M+;jPom^pR(GLpN`kGs_-?uGU^gsWHcK5cc zLLJI{eJI0oh_Cz)?d((~Om(L64_%7+Ka$z;KE4X?@96DL9iYzk7Vhdk(0k=a=fRFk zKbE9A@4XaXno|Aky8Nr7bN8OUOTP-cI=e0(MB2J7u=b#LiK_YKc;BJ!OYxwhMZ8>fqnbD^^vXSEw~E{ zj)yzW0$uIbI_|#qzApI)KKrNs=h{B^boAOb#Rxtf;mD&X%sE?d+;I!{u=gM9oreXw za=lyEq4()Jlh8Hfqq;(L@s7jKxFhZt++*%ZcgB6n{i^$d`)&7!?mxM&xj%O=c>H>I z$SO~{=LS!m=Vs6QJs;4!mOiR?DfN0j?)kLmu;-}fxM#xil;@1+MbFEg^PZo0<~Ascc*Wcug7=4??K;y@AJN6z9)TO_C4$ShVMJRbG}!7Kl5G4 z@#h3{N^>f5LOC0AZp(?~By#S`>CJgC=b@aToX_QaA?HNSlytFCKOfK7*o<_WgKkg4 z*!J^R+3sQd&W_0(x%jt@B`*GLvn;Rtz7qTOBd`4DO3W3{bK=OPX-}Bilb@L*uXg-d z&SUZMX5*FL9-hp5W14eHeP$8IdHp{2hGUHVjp<(YTN$nDZkw#E|r~339wT1yN|tHTYlI3EiO%0 z%GKMAT`KQa^5aVEYL;I4@1nOMiTH`?d@vpfB3QH6U6_zRl6qYI6s1Q;}DfB5EP&lYGa`Y^~F+BsI@j(U6r`K5a zG2IQ@3@@ACWwX0hC{Jxpm(A!ZQLx!uHkZq0a@jmCo5f{wxNHWO&EK-wTQ+xVy@Ji# zvRPX;XUk@6*?cXVtz~nyY^GMTg3Z#hIa)SD%jRd<>@1s`WizvEUY55cBWpy# zW@Fi0ESrgC^RR3dmd(Mk8CW*|YDU54UY$|+JB8;JzNTbz8)m#XtpbzZ8@OVxR)Ixkh{8AI~wyFg)yLZQM^g@D2` zg`h@#`j zX6=f6#ePSvjTkisub?$L#5nJGJm;)+^PbB&tv)U-j<)d1!o0R$^>5+4{qL>*Ylkd+ zLQn8q^>4x6&H0vpzbQ>SXyK>&d~5OH3r{Tct28Qi_;f8!;Wyc-`68CyXEc-K>VL}? zW)}X2H2?Ne>Q{DL%yMOGCbsZJea`FioQ|{a^S{1_w*PqXwuPhOn!duaICUGH)3fVu z`qOjbi~cU(@X8Ihh$5HbK z)Teidw@nPFKWRw)fFr!o^N8MVGp@eJ3H1-E|4e;Yv(D4bGkOZ{j79{XS1;CC^)J4l zUdC^zZ}BJUHGEC|hOet%YEC_o)-QR%`u*thb9HZ|{=cjA{bl<0tT#{nbo9|_ww-$8 ztS|0km-@tX_I{oHa`nw_)YIrGd0#iEblY88zCNyW32NI4eR9yoPfuPQ>$yHx>Sll=1Q-GQUI_u5qSHDG{LdsgM&NQm@WBPb> zzHz0$RUe;vz8jT(LLa}hZc=K^`s7KC7R6ij$yLcrD*ZNnmZ&fMPNivi5Fif%-`8?u}v$`Xx#ff?pjALyK_U@ZoSS+ ztUTL_WNt+3iD_P`v();Y6^|=-my)|n$=v|CTc94`gJSn+oWOF|L+)ynTOZ5oWzxuU z*GKN!Xnc{>w>-A;evS6FJob~vewF&w`mc>!_{rT|ayN%Divsf1Prfc8U;Qe_b=u!@ z*H7+x$=!T%H=o>f$=#*ouAdyuB}a3}ML)T?gk1EKi+*y^OD?+P;!<)kk6g?n7xUB? z{(y4V>XV;b^plHzaxs&CevM`v(>|7qe)7*x{`twjOwPIFoS!_)C7=A{Q!e@BC!f6J zlS@7=C7=A{lS@A3kxw4-$wxkU$R{89;8*#(Kf6cgqCNI5ir;fNe!q^k9<)nbmS&~u!cKj!R}Hg0>-25g zBl>n7%~lmlOo}#ZbgA3vSv&%x|7=9-UX6{Uq<^2rN{H#mob1TmHM%mGZUx%g)j5`- Wh_(C`8ne@yCXB%8c{Y_u=l=skrM6oD diff --git a/tests/fonts/ethnocentric rg.ttf b/tests/fonts/ethnocentric rg.ttf deleted file mode 100644 index f041b9ab0e13b4dbdba34b238ba1f9364849aeed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71268 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 iJ{KKMj4x0R)tdftvQ_ { - const frames = []; - for (let i = 0; i < 30; i++) { - const frame = new Frame(256, 256); - frame.fill(x => Frame.hslToColor(x / frame.width + i / 30, 1, 0.5)); - frames.push(frame); - } - - const gif = new GIF(frames); - - const encoded = await gif.encode(); - const desired = await fs.readFile('./tests/targets/gif.gif'); - process.exit(desired.equals(encoded) ? 0 : 1); -})(); \ No newline at end of file diff --git a/tests/image.js b/tests/image.js deleted file mode 100644 index 773a9cf..0000000 --- a/tests/image.js +++ /dev/null @@ -1,13 +0,0 @@ -const fs = require('fs').promises; -const {Image} = require('../ImageScript'); - -module.exports = (async () => { - const image = new Image(128, 128); - image.fill(x => Image.hslToColor(x / image.width, 1, 0.5)); - - const encoded = await image.encode(); - const desired = await fs.readFile('./tests/targets/image.png'); - if (process.argv[1].slice(-8) === 'image.js') process.exit(desired.equals(encoded) ? 0 : 1); - - return image; -})(); \ No newline at end of file diff --git a/tests/invert.js b/tests/invert.js deleted file mode 100644 index 9442cdd..0000000 --- a/tests/invert.js +++ /dev/null @@ -1,59 +0,0 @@ -const fs = require('fs').promises; -const {Image} = require('../ImageScript'); - -(async () => { - { - const image = new Image(512, 512); - image.fill(0xff8000ff); - image.invert(); - - const encoded = await image.encode(); - - const target = await fs.readFile('./tests/targets/invert.png'); - if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); - } - - { - const image = new Image(512, 512); - image.fill(0xff8000ff); - image.invertValue(); - - const encoded = await image.encode(); - - const target = await fs.readFile('./tests/targets/invert-value.png'); - if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); - } - - { - const image = new Image(512, 512); - image.fill(0xff8000ff); - image.invertSaturation(); - - const encoded = await image.encode(); - - const target = await fs.readFile('./tests/targets/invert-saturation.png'); - if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); - } - - { - const image = new Image(512, 512); - image.fill(0xff8000ff); - image.invertHue(); - - const encoded = await image.encode(); - - const target = await fs.readFile('./tests/targets/invert-hue.png'); - if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); - } - - { - const image = new Image(512, 512); - image.fill(0xff8000ff); - image.hueShift(180); - - const encoded = await image.encode(); - - const target = await fs.readFile('./tests/targets/invert-hueshift.png'); - if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); - } -})(); \ No newline at end of file diff --git a/tests/jpeg.js b/tests/jpeg.js deleted file mode 100644 index 882823e..0000000 --- a/tests/jpeg.js +++ /dev/null @@ -1,19 +0,0 @@ -const fs = require('fs').promises; -const {Image} = require('../ImageScript'); - -const panic = message => { - console.error(message); - process.exit(1); -}; - -(async () => { - const binary = await fs.readFile('./tests/targets/external.jpg'); - const image = await Image.decode(binary); - - if ([image.width, image.height].some(v => v !== 638)) - panic('dimensions don\'t match'); - if (!Buffer.from(image.bitmap.slice(0, 4)).equals(Buffer.from([70, 65, 61, 255]))) - panic('pixel doesn\'t match'); - - await image.encodeJPEG(100); -})(); \ No newline at end of file diff --git a/tests/misc.js b/tests/misc.js deleted file mode 100644 index 591ad95..0000000 --- a/tests/misc.js +++ /dev/null @@ -1,210 +0,0 @@ -const {Image, Frame, GIF} = require('../ImageScript'); -const panic = msg => { - console.error(msg); - process.exit(1); -} - -try { - new Image(0, 1); - panic('width 0 failed'); -} catch { -} - -try { - new Image(1, 0); - panic('height 0 failed'); -} catch { -} - -if (new Image(1, 1).toString() !== 'Image<1x1>') - panic('toString failed'); - -for (const [x, y] of new Image(1, 1)) - if (x !== 1 || y !== 1) panic('Symbol.iterator failed'); - -for (const [x, y, color] of new Image(1, 1).fill(0xff8000ff).iterateWithColors()) - if (x !== 1 || y !== 1 || color !== 0xff8000ff) panic('iterateWithColors failed'); - -if (Image.rgbToColor(0xff, 0x80, 0x00) !== 0xff8000ff) - panic('rgbToColor failed'); - -if (Image.hslaToColor(0, 0, 1, 0xff) !== 0xffffffff) - panic('hslaToColor for s=0 failed'); - -{ - for (const rgba of [0xff0000ff, 0x00ff00ff, 0x0000ffff, 0x000000ff, 0xffffffff].map(x => Image.colorToRGBA(x))) { - const hsla = Image.rgbaToHSLA(...rgba); - const rgbaBacktransform = Image.colorToRGBA(Image.hslaToColor(...hsla)); - for (let i = 0; i < 4; i++) - if (rgba[i] !== rgbaBacktransform[i]) - panic('rgbaToHSLA failed'); - } -} - -{ - const rgb = Image.colorToRGB(0xff8000ff); - const target = [0xff, 0x80, 0x00]; - for (let i = 0; i < 3; i++) - if (rgb[i] !== target[i]) - panic('colorToRGB failed'); -} - -{ - const image = new Image(1, 1); - image.setPixelAt(1, 1, 0xff8000ff); - - const pixel = image.getPixelAt(1, 1); - if (pixel !== 0xff8000ff) panic('getPixelAt fails'); - - const rgba = image.getRGBAAt(1, 1); - const target = [0xff, 0x80, 0x00, 0xff]; - for (let i = 0; i < 4; i++) - if (rgba[i] !== target[i]) - panic('colorToRGB failed'); -} - -{ - const image = new Image(1, 1); - try { - image.__check_boundaries__('a', 1); - panic('check boundaries for x as NaN failed'); - } catch { - } - try { - image.__check_boundaries__(1, 'a'); - panic('check boundaries for y as NaN failed'); - } catch { - } - try { - image.__check_boundaries__(0, 1); - panic('check boundaries for x as 0 failed'); - } catch { - } - try { - image.__check_boundaries__(1, 0); - panic('check boundaries for y as 0 failed'); - } catch { - } - try { - image.__check_boundaries__(2, 1); - panic('check boundaries for x as 2 failed'); - } catch { - } - try { - image.__check_boundaries__(1, 2); - panic('check boundaries for y as 2 failed'); - } catch { - } -} - -{ - const image = new Image(1, 1); - image.fill(0xff8000ff); - - const clone = image.clone(); - - if (!Buffer.from(clone.bitmap).equals(Buffer.from(image.bitmap))) - panic('clone failed'); -} - -{ - const image = new Image(2, 2); - image.scale(.5); - if (image.width !== 1 || image.height !== 1) - panic('resize failed'); - - image.scale(1); - if (image.width !== 1 || image.height !== 1) - panic('resize failed'); - - try { - image.resize(0, 1); - panic('resize for x = 0 failed'); - } catch { - } - try { - image.resize(1, 0); - panic('resize for y = 0 failed'); - } catch { - } - try { - image.resize(1, 1, 'garbage'); - panic('resize with invalid mode failed'); - } catch { - } - try { - image.resize(Image.RESIZE_AUTO, Image.RESIZE_AUTO); - panic('resize with RESIZE_AUTO for both x and y failed'); - } catch { - } -} - -{ - const image = new Image(1, 1); - image.drawBox(1, 1, 1, 1, 0xff8000ff); - if (image.getPixelAt(1, 1) !== 0xff8000ff) - panic('static drawBox failed'); - - image.drawBox(1, 1, 1, 1, () => 0x00ff00ff); - if (image.getPixelAt(1, 1) !== 0x00ff00ff) - panic('fn drawBox failed'); -} - -{ - const image = new Image(1, 1); - const toFail = ['a', -1]; - const funcs = [image.red, image.green, image.blue, image.opacity, image.lightness, image.saturation]; - for (const func of funcs) - for (const value of toFail) - try { - func.call(image, toFail); - panic(`${func.name} failed with value ${JSON.stringify(value)}`); - } catch { - } - - const toPass = [[1, true], [1, false], [0, true], [0, false]]; - for (const func of funcs) - for (const value of toPass) - func.call(image, ...value); -} - -{ - const image = new Image(512, 256); - const overlay = new Image(1024, 512); - image.composite(overlay, -512, -256); - overlay.fill(0x80); - image.composite(overlay, -512, -256); - overlay.fill(0xff); - image.composite(overlay, -512, -256); -} - -try { - new Frame(1, 1, -1); - panic('frame duration failed'); -} catch { -} - -if (new Frame(1, 2, 3).toString() !== 'Frame<1x2x3ms>') panic('frame toString failed'); - -{ - const image = new Image(512, 512); - Frame.from(image, 10); - try { - Frame.from({}, 10); - panic('frame instanceof image failed'); - } catch { - } -} - -try { - new GIF([{}]); - panic('gif frame instanceof failed'); -} catch { -} - -{ - const frame = new Frame(512, 128, 123); - const gif = new GIF([frame]); - if (gif.toString() !== 'GIF<512x128x123ms>') panic('gif tostring failed'); - if (gif.duration !== 123) panic('gif duration failed'); -} \ No newline at end of file diff --git a/tests/readme.js b/tests/readme.js deleted file mode 100644 index 5ad7df1..0000000 --- a/tests/readme.js +++ /dev/null @@ -1,108 +0,0 @@ -const {Image} = require('..'); -const fs = require('fs').promises; - -(async () => { - const [backgroundSVG, avatarBinary, badges, font] = await Promise.all([ - fs.readFile('./tests/svgs/background.svg').then(b => b.toString()), - fs.readFile('./tests/targets/external.png'), - Promise.all( - [ - 'crown', 'potato', 'mask', 'microbe', 'petri_dish', 'thermometer', 'cigarette' - ].map( - x => fs.readFile(`./tests/svgs/${x}.svg`) - .then(b => b.toString())) - ), - fs.readFile('./tests/fonts/carbon phyber.ttf') - ]); - - const image = new Image(1000, 700); - - const backgroundPattern = await Image.renderSVG(backgroundSVG); - for (let xOffset = 0; xOffset < image.width; xOffset += backgroundPattern.width) { - for (let yOffset = 0; yOffset < image.height; yOffset += backgroundPattern.height) { - image.composite(backgroundPattern, xOffset, yOffset); - } - } - - const avatarBG = new Image(200 + 16, 200 + 16); - const avatarGradient = Image.gradient({0: 0x00ffffff, 1: 0x0080ffff}); - avatarBG.fill((x, y) => avatarGradient((x + y) / (avatarBG.width + avatarBG.height))); - image.composite(avatarBG.cropCircle(), 0.05 * image.width, 0.05 * image.height); - - const avatar = await Image.decode(avatarBinary); - image.composite(avatar.resize(200, 200).cropCircle(), 0.05 * image.width + 8, 0.05 * image.height + 8); - - const username = await Image.renderText(font, 64, 'matmen', 0xffffffff); - image.composite(username, 0.3 * image.width, 0.05 * image.height); - - image.drawBox(0.3 * image.width, 0.05 * image.height + username.height, username.width, 3, 0x808080ff); - - const discriminator = await Image.renderText(font, 48, '#9984', 0xd0d0d0ff); - image.composite(discriminator, 0.3 * image.width, 0.05 * image.height + username.height); - - // Global XP - { - const xpBarBackground = new Image(0.9 * image.width, 0.05 * image.height); - xpBarBackground.fill(0xa0a0a0ff); - image.composite(xpBarBackground.roundCorners(16), 0.05 * image.width, 0.5 * image.height); - - const xpBar = new Image(69 / 420 * xpBarBackground.width, 0.05 * image.height); - const xpGradient = Image.gradient({0: 0x0080ffff, .8: 0x00ffffff, 1: 0x00ff80ff}); - xpBar.fill(x => xpGradient(x / xpBarBackground.width)); - image.composite(xpBar.roundCorners(16), 0.05 * image.width, 0.5 * image.height); - - const xpText = await Image.renderText(font, 32, '69/420', 0xff); - image.composite(xpText, 0.05 * image.width + xpBarBackground.width / 2 - xpText.width / 2, 0.5 * image.height + xpBarBackground.height / 2 - xpText.height / 2); - - const levelText = await Image.renderText(font, 32, 'Level 3', 0xffffffff); - image.composite(levelText, 0.05 * image.width + xpBarBackground.width - levelText.width, 0.5 * image.height - levelText.height); - - const xpKindText = await Image.renderText(font, 32, 'Global XP', 0xffffffff); - image.composite(xpKindText, 0.05 * image.width, 0.5 * image.height - levelText.height); - } - - // Server XP - { - const xpBarBackground = new Image(0.9 * image.width, 0.05 * image.height); - xpBarBackground.fill(0xa0a0a0ff); - image.composite(xpBarBackground.roundCorners(16), 0.05 * image.width, 0.65 * image.height); - - const xpBar = new Image(75 / 100 * xpBarBackground.width, 0.05 * image.height); - const xpGradient = Image.gradient({0: 0x0080ffff, .8: 0x00ffffff, 1: 0x00ff80ff}); - xpBar.fill(x => xpGradient(x / xpBarBackground.width)); - image.composite(xpBar.roundCorners(16), 0.05 * image.width, 0.65 * image.height); - - const xpText = await Image.renderText(font, 32, '75/100', 0xff); - image.composite(xpText, 0.05 * image.width + xpBarBackground.width / 2 - xpText.width / 2, 0.65 * image.height + xpBarBackground.height / 2 - xpText.height / 2); - - const levelText = await Image.renderText(font, 32, 'Level 1', 0xffffffff); - image.composite(levelText, 0.05 * image.width + xpBarBackground.width - levelText.width, 0.65 * image.height - levelText.height); - - const xpKindText = await Image.renderText(font, 32, 'Server XP', 0xffffffff); - image.composite(xpKindText, 0.05 * image.width, 0.65 * image.height - levelText.height); - } - - const badgeBackground = new Image(...Array(2).fill(Math.sqrt(64 ** 2 * 2))); - badgeBackground.fill(0xa0a0a080); - badgeBackground.cropCircle(); - for (let i = 0; i < badges.length; i++) { - image.composite(badgeBackground, 0.05 * image.width + 0.9 * image.width / badges.length * i, 0.8 * image.height); - - const badge = await Image.renderSVG(badges[i], 64, Image.SVG_MODE_WIDTH); - if (i >= 3) - badge.saturation(0); - - image.composite( - badge, - 0.05 * image.width + 0.9 * image.width / badges.length * i + (badgeBackground.width - badge.width) / 2, - 0.8 * image.height + (badgeBackground.height - badge.height) / 2 - ); - } - - image.roundCorners(32); - - const encoded = await image.encode(); - - if (!(await fs.readFile('./tests/targets/readme.png')).equals(Buffer.from(encoded))) - process.exit(1); -})(); \ No newline at end of file diff --git a/tests/resize.js b/tests/resize.js deleted file mode 100644 index f477d3e..0000000 --- a/tests/resize.js +++ /dev/null @@ -1,11 +0,0 @@ -const fs = require('fs').promises; -const {Image} = require('../ImageScript'); -(async () => { - const binary = await fs.readFile('./tests/targets/image.png'); - const image = await Image.decode(binary); - image.resize(image.width / 4, Image.RESIZE_AUTO); - - const encoded = await image.encode(); - const target = await fs.readFile('./tests/targets/resize.png'); - if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); -})(); \ No newline at end of file diff --git a/tests/rotate.js b/tests/rotate.js deleted file mode 100644 index a8742c0..0000000 --- a/tests/rotate.js +++ /dev/null @@ -1,51 +0,0 @@ -const fs = require('fs').promises; -const {Image} = require('../ImageScript'); -const panic = msg => { - console.error(msg); - process.exit(1); -} - -(async () => { - { - const binary = await fs.readFile('./tests/targets/image.png'); - const image = await Image.decode(binary); - image.rotate(45); - - const encoded = await image.encode(); - - await fs.writeFile('./tests/targets/rotate-45.png', encoded); - const target = await fs.readFile('./tests/targets/rotate-45.png'); - if (!Buffer.from(target).equals(Buffer.from(encoded))) panic('rotate 45 failed'); - } - - { - const binary = await fs.readFile('./tests/targets/image.png'); - const image = await Image.decode(binary); - image.rotate(45, false); - - const encoded = await image.encode(); - - await fs.writeFile('./tests/targets/rotate-45-noresize.png', encoded); - const target = await fs.readFile('./tests/targets/rotate-45-noresize.png'); - if (!Buffer.from(target).equals(Buffer.from(encoded))) panic('rotate 45 noresize failed'); - } - - { - const binary = await fs.readFile('./tests/targets/image.png'); - const image = await Image.decode(binary); - image.rotate(180); - - const encoded = await image.encode(); - - await fs.writeFile('./tests/targets/rotate-180.png', encoded); - const target = await fs.readFile('./tests/targets/rotate-180.png'); - if (!Buffer.from(target).equals(Buffer.from(encoded))) panic('rotate 180 failed'); - } - - { - const image = new Image(512, 512); - image.fill((x) => Image.hslToColor(x / image.width, 1, .5)); - if (!Buffer.from(image.bitmap).equals(Buffer.from(image.rotate(360).bitmap))) - panic('rotate 360 failed'); - } -})(); \ No newline at end of file diff --git a/tests/run.js b/tests/run.js deleted file mode 100644 index 20fb3fa..0000000 --- a/tests/run.js +++ /dev/null @@ -1,37 +0,0 @@ -const fs = require('fs'); -const child_process = require('child_process'); - -(async () => { - for (const file of fs.readdirSync('./tests/')) { - if (file === 'run.js' || file.slice(-3) !== '.js') continue; - - console.log(`running test ${file}`); - const start = Date.now(); - const proc = child_process.exec(`node --unhandled-rejections=strict ./tests/${file}`); - proc.stderr.pipe(process.stderr); - proc.stdout.pipe(process.stdout); - await new Promise(resolve => { - const timeout = setTimeout(() => { - if (proc.connected) { - console.log('script timeout'); - proc.exitCode = 1; - proc.kill('SIGTERM'); - } - }, 1000); - - proc.on('exit', code => { - clearTimeout(timeout); - - if (code) { - console.error(`test ${file} failed in ${Date.now() - start}ms`); - process.exit(1); - } else { - console.log(`test ${file} passed in ${Date.now() - start}ms`); - resolve(); - } - }); - }); - } - - console.log('all tests passed'); -})(); \ No newline at end of file diff --git a/tests/svg.js b/tests/svg.js deleted file mode 100644 index 3cba8ee..0000000 --- a/tests/svg.js +++ /dev/null @@ -1,11 +0,0 @@ -const {Image} = require('../ImageScript'); -const fs = require('fs').promises; - -(async () => { - const svg = await fs.readFile('./tests/svgs/potato.svg'); - const image = await Image.renderSVG(svg.toString(), 256 / 36, Image.SVG_MODE_SCALE); - const encoded = await image.encode(); - - const target = await fs.readFile('./tests/targets/potato.png'); - if (!Buffer.from(target).equals(Buffer.from(encoded))) process.exit(1); -})(); \ No newline at end of file diff --git a/tests/svgs/background.svg b/tests/svgs/background.svg deleted file mode 100644 index d18d80b..0000000 --- a/tests/svgs/background.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/tests/svgs/cigarette.svg b/tests/svgs/cigarette.svg deleted file mode 100644 index db79111..0000000 --- a/tests/svgs/cigarette.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/tests/svgs/crown.svg b/tests/svgs/crown.svg deleted file mode 100644 index edf81f7..0000000 --- a/tests/svgs/crown.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/svgs/mask.svg b/tests/svgs/mask.svg deleted file mode 100644 index d759c04..0000000 --- a/tests/svgs/mask.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - \ No newline at end of file diff --git a/tests/svgs/microbe.svg b/tests/svgs/microbe.svg deleted file mode 100644 index af20b0d..0000000 --- a/tests/svgs/microbe.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/svgs/petri_dish.svg b/tests/svgs/petri_dish.svg deleted file mode 100644 index fbfaa2c..0000000 --- a/tests/svgs/petri_dish.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/svgs/potato.svg b/tests/svgs/potato.svg deleted file mode 100644 index a046ed8..0000000 --- a/tests/svgs/potato.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/tests/svgs/thermometer.svg b/tests/svgs/thermometer.svg deleted file mode 100644 index 9cbcbf3..0000000 --- a/tests/svgs/thermometer.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - \ No newline at end of file diff --git a/tests/targets/circle.png b/tests/targets/circle.png deleted file mode 100644 index eeeba935184f8d511baabff6c93f038b35bab8b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6939 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 L@9Yz^$c_I26t{|U diff --git a/tests/targets/circle2.png b/tests/targets/circle2.png deleted file mode 100644 index 93d3b1ecb3e358f521df7addcdbc63f938ad77b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8528 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 diff --git a/tests/targets/circle3.png b/tests/targets/circle3.png deleted file mode 100644 index a137b4b2155e6a226df66d3924c13da8a4c8a328..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4559 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 E08%bZIRF3v diff --git a/tests/targets/circle4.png b/tests/targets/circle4.png deleted file mode 100644 index d1ea6b46d938db74fab4fd4cef0140039783eb42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85122 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 diff --git a/tests/targets/fill-func.png b/tests/targets/fill-func.png deleted file mode 100644 index 236d825c7ab4ec638d79b075ef9ba97351294ab7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45683 zcmce<2|U#M_diZ#-}kIZX%z~|Hpc+};Natd-#!Po&Tw$tG1zLp2_4M&u`|r2d1{u$^6KyJzkBhyo+0YD zU!|`O>t#GYaQ9Wb_It+CCGhLUFLv8j-uMN1xTIRnD@lp;dTi3y4~2hqVD!q029@?k zkK~=1<*v=MeTaXbwS@mpDO!o3uOljcP7hir&dFQ6E%dsy5c$#Wo z>GSqeLtWw${rT6{y(?SbNX57$4*7E(seN9yu#|e@P5eWD(UH2jU=C5LhfzWUjXSgU zWiU@O_2i?tG@5{XudYtDf_GBs3+~aYE4$3rhn{{<=hL9^@9ABCuUeKakw2zO=~1{> zQ#x>Z=Ri`yK&hoIh=Wt z)jIXX(voLWwmz=ix6e!9sJ8TUdhCbvh>PhluhOILr{kubPRBS!*EvPraEg8B6mi}u zhD;an88dF{<2_uP+L44Wl13#mZ)d%xNtX0j9j+GbI6Yb{((NI<`F()U9U9R* zw#cMzIbBYLY8HBWYD~GS&M;WPk81rWqJ2!>wQhCrBF)}~M!17xI+@jy!HTK9;zrTD z0jQB0<1&SyUXeGk&H?L>R123WxA)4s#H;S2hN~*pTu4l1g++4BBWCX+0jk!<7_%sGPzv^UzgrZCibRa#oGW2YM)@km@0|x>?t*eQ#cy~kJcGYR@tZga z&$wk#{K{3yt_zcMCJEjlw&3FVkecEb*>Nti;ydvwTo;#Eps!7{RIOg_AX@iV5- zE`(S@ZJr$TwIVtO@)F7)7}^h$yOJ@5%uIC1hR-)C53@DNT^e(_lOv0^5QAR26UraP z+6{N=UB--7oQ0QI!XFk{6N7x#kh{vq;ECn%#FZVyppaGMuDK8BhYI`bhDXj=6CYZv zC66diqaSAMxJBvQuTCD(yPJDr>f(0d!d;UmO!OitQ#CI8afJw@nL+5j)Pe-RVZoR1#4iOPGb7feqi;7ITv<#lt7TPytM`KqS7#_gUAja(9Ks}YjXR2BMX{sPASeOGp?l`d#>j1wYZ=o_d<-yv6`sinj6=YeranKfG2^BpyWLZY8#*?vy z*ev)%>xIGTNR%6G`JO}>#&E}Yw>jM}dIp1aa2qZh%$p;_`N1*5I!JAzv(C-k)z~Oq zj?g?j!EeHTB0qf3)hzq7xRpiE4J*htt)(;Zl$#Y{!PfNMsP4h#dumE%=C(Dvtzoq1 zCCr#$9lHAq2WJ_^jQdJ-6KsoFnFue{^rNUKw!2?*kJ;2TYd5{{F3)L|PuYVwM$U{X zYS0*KYgkYxIxRjy!)D%W7NpS%!>BeiXL{ic0-knja5*D)h95gv!^~1;*uHm;JS|-HmEMg*3_xF(Iiri%IIqN%LGcNYR1FpPK~3v zdPmZ2h|=aEkH;!Vl1w`#W?nvL&%xQenO96gcnRqgeKrz>AD{BTw#bK;utuV>=XE(4 zRVD>8iSWSM;KXTF}A$|OxOd>%)IF?Z1=XWGU~X>L#OWc=W*K^wSm zw`Ov2B=}-A>R?0j-0~@dj^#bg?-`DgGh{0ALX{7BgQ=e#Cah)%#$^ zN&VcJx|*8$SsMQ0DRws>nXwW3N}G}9%yl(0Co^(JU-(v^(B=5M0U}K`(`90^R0)@a z#(;$d)#Ngnb}G-CxQqb7BQ?Wil0j7EH;J=j9Lm)-!BVMIexvwXV?voV@?}bQr7MH=b^$)TXPF-Do>e_~xtC};{P(1F7c|5dY-B-kV=v%rkwN#bJ7EjiW zt8=RLQk2kEev*C~y~Erg-e#2i`=X|jrhURzOjmjLf8e} zu@JMcD_QxlS0-qVd(F8#wJ*4@yx_5MxBIf)9=a7ZdqPtu=$r~;YI=Rk57#wkp#q0q z#o~(=qC6$TD|tdwk3()K5^!*e*tW)O;f1S;iMwJKuBbEm#a$$UYRuky-62eP_c@mD z#OsqC-KUr`%y$gq2@fo}&;r?|%1ndISaXT`s!T4u3z#sRcB@>HrIe-W0yVJ|555|) zXiu@tS{zjaxW%70Ek32nVf;dAZ_C0fFT}gEj4L)dhbFht1>AZ9Lt|~m_)TJ`7#6AT z4CrcMb7w0;$ZBC52+X4;ECc2v8J{9~2dDUL4nOV8ueAHcOS`onHc)v#3x9Lc~mWt{DOdt9RO{Fkk5*k8si z+qc=}^tk`pruv`sxrF`Ych;@cU$p$%+MT9K!Oh*_t3?BseJp(od#cz)(C0yeef~=P z7UIo0*Q3?lD*UWK~L{-;_)KK*$tf+Dw^y)FR&(X_Ui0WI6 z3A$Sc?epW08jvroIcS&9A1Fe;q|ik;&|ue9Gd6@U87!p`xD$fY>Ff{%As~=BNYzwEzEOU$ ztb6DkJJq6Ca{JywvUStj~W*o#m zlVq4TLS4cj2o_E{PAtS?xMEEDH6aRhjmu8ZWb-2q&N_+@lGgQWz6*Wxp3#_tY=3++ zo;)?3H?tdsMAk3iN|~wqxyt0B0&^JzXR~m07@mX#R_AqZ^B}}m;hU!uXNpJzJ8nuR zXepGm1g|CQDL3DuSiX%xzfOOYj!`(DX6M`Y=_tW>pX*j)^7Fjhl9rPiWIdBYc+o&I z`n6p7MU29YQoGVz#ttpNn%#%14jit=yAC&#I`6~gMWv)=0Lr6 zBd1O|Oh__Yk*tP%!$SUYrpx9g%tVEu=MG~XAOL3v8zyb$wp^@OBNnU5SGPFYog=bE zwB%&2sIFMKdq&2oUA}ki9Wh@6r^DmF_-1{QWSaY0m8*Q}n`KxGclJBaF+cNT_Y+=+ zFk7crRJllb=_P1Mvg0f7Yz{IU{&IeG!V<44H&@6Qj^2-F9pu43fp+ zDz{?7Gt1+2*-rYJ#jE2$r( zvrb7D)Dz1@HuPA&NpkjAIMQ&XOmM2l^-U@-O-#8yJ6Oo3XRA^2L7HM_Lt-$0;Z;>v zGqpz%^}&MHG?7ca#yT~;-YKas7T~WgGcf~Ds7akq3m>>6joA1SR)aZQFC<^t&?P$) zCz0$Z>%>)A<3CroOSnAzeENg!@^-y}sqV)Km(vvr)C!S1CUFgIo3O8Lg>?}{SV6X_&9UpaH z09OgO4TW#7>XKq|GYXKnH_gCKWFoL-FjZ&qZ}D{e1jJMK1~g*}(Q9@1Rf@JuxBakF z;%Lr^XLYLxN+HFOm*GrE>s83&IfioO=j|~C#8mP8IPLBn1ev<`4Brlt0b~3&XHN|q zCPCKLbHd5Vi-M=gh;1 zq{2yA*o0ZS^x*Dpg~`%PQVcc)U`-XC&hR)R_!smoOm}trpc7+a;$xTKq#KI*JWXM|L81(zdO0(^n??R=oCfHsosY6+_YY>4x;5r2-}kX@PxgD2G_%@~?1jo8Wy3x~u-MFH5)Re!mg;AHVf}rHw&;yGjP<4Q z+_u{LaTx2&?YV8-4^PeT`&gJ-qVsJM>RHZ+-?QUXGqOp$jJZxac04?!r7LA7&LfI_Wj=7E zmgjbZ!R$hkJcX!w- znD?6Kf)+u}frycTgtY_FDKwfaBsG=E?yh5#9@yf5Ry;r1wvdAw$|aBS#6((w-Rsq`w?`LXYKNH z-{9qiMyJ~!BdauF9&*Bu!jZF1gp6mBV5LswhbuErluhrE*FVuQeTtwIUU3$)_r`N{ zhEC_U&YO3vgl8oONhK80sV33`2>bYF-3YKFpgOFE-wne>+~d{&bp%AZ?tao-XOA&< zy1BDhCKmfM9PVrd0kGc$WQK?1kRTw#bu*6u5I;oKJn?9>Fn_We$s~Ah;nTe46RJi@ zR%3FRmFI%xn|n4IrOJ*;xNb6g6l)pGl{_YMsYgktF2p-l^o63zwS^{|wui>Hmr;7bf2Bpb^97f2i(q*R?-u|nVn4<^>o5HA<3`l$ZV^?JD|u8{z?7rp z6E1?z6_f}}<4=b6VNGtwblW{N7flw5u(+X^qUWXD925H+jG4UhaUJ@tm;6mHo&%mT z2fReydn&*8;*{|em+|7i;JN66*TUVN(!2W%Z`VyZrK%K(BMJLW{YW&9gd*E~UhT@C z-@*gXX*Ojp<2ic5LQRUm`4dCUR^`wf<7~HN9Fq+H%P&kThAjQx<9o zSRuwo9wP}=HE7{O=iy~G6OHQ6?w*Mkx~?XiyJge5pU=c`*Q$vC2w~Tctl$f^v+taY_Dx+mmUX!Yrp7XWs@g2__%mT;YbY@9Gq-aKH0hcs|@r6)#~9 zw|Q&@FtB9lQycntUzo*Qup6qY^ycvR@@K4pBJ6Rx)wo|P#F?2$6yOD01hykJXW>K* z6G1$wcX&=CRU(-=2qD@xuyw<;gjc6N6y}zMQ`&52zf=_@tuFBz@szVg?*MH%rzltx z-`y`pI~OR}5Z^tFM>{uV?6BUn>en+VLi?5ozIwcA?WZ%T3wBtk9?0Um>(Q9pZ|6Hb z7D~{tnp}we*)pBg6-fewXv>(}0{g-dunN?$kUK1zdoEBoAj3J|7bxu$c@y(6Ky##q zD_BglPuwWBVQgt;_4;6$=DvlGqSIQ$3bVvrt-Kz^s|PDskFC8#4by4Bc}JwSNZ_-i zO&ZdQ)Csx{0RM7^9X{oU|7>0~`iR16uSP|ZZiPQiCBSjvY9qC)D9f48K@@8Xd+qSD z#iifIKKd<{4;fF}cT^RW%nYw$Sbg$?Y;O-?u$9tO(d^bbW7l@;6B3bRApz%z&TjV= zX88jEpN~4H=pppkB3AyYQ-+}(ZaPUrJybWzYB%N%q)ab^tvipmhM%oLQEgh0at2ls zj@0_zgEdGKg-RRtKe>4lp$b^`1LIec&h3(2epMu;rdVIzipr;$Viv$BQXSEuGV7u8 zSab57&14H#&Sa^`O$x~%34?#Pg%H-}l{4v(a*N_S}`L z&P2o)JvWieDVaWKMAqY)e#OkP3Dh`zg)Z6JFt*~b(zF@c*)beNZoAlRMm*jhWan#2 z!4LM^Oh^KtnYcT*%z|}^Ci-qX2lcBXQg*{$#fz7eJQv5TD;?TWx09;LAG$_4AkIQ4OFU+ax%<*;ZAFhFh}bN5=Ivzj31OXjXYa_M z7gD3w7MYj^hDOWKxi!WX?V$>W#<$VseQClJs`D|^<;N@?kC};nHrM=Ysq)zZ^|^sV zsCKbXy_is)mQVvyy6mtpx#?kWz+L@-hu(YlweLMlWZYF{JpQeC9-n*z zVDFYaYYWlJfnnOoW=;{D#`1LK1?mwBbznlWHa(JH1iRTj3~4L5H6z{=Kwpobg$TIo zZ1^Y>n2{c{_*b!y>WKWtoYw&$=$V$ zzSv>U221IqTfYD}swR|tStTMYZ~2gtwcU=hsHXE!qgVh~&Rx1@sz{Q#^up*$o|d@H zOPA1`1DS@gSS+&uAQnM%)O8cXXDs8@K$ z*5_!#KHP|)V~Af_UE|mt7Ulh#@(ssnnXJs$6t?vCHfW)A?ga!qd}m%`G=V3E%Z>j-mjd>Vl+iR!SgCC^BAaN*|OVTa-9 zQ|}MjBTSj|9Mt+2VNKoe9eGEG{TneMbY9we0>Y5ZGT{Bh$R3NP;VPTn3J^t7+dzq zqgFz>GFfXDzAtEUdXxYer2F~r_y&@A%ZB^!rlZ2lr}_*&a!uD&FrJv4;vlQ@LL}K& z<$-qA3tmdr6H_)LW=E&oYO9LRNj#;$XaY(iN#Ezky}3fxSr`(GbF;X}nJz6CF*bJw zEQeDv`Aq$|vos@Ls8q?ti3wS*fN1w>bCGYo`r$vr*O11`B;i>{99A~`$i#eM2-KQ1 z+*v4okl4ChuCd5Ud9-nA!pCM}Ha|byuxWZ!j(KI;bdUw7_{KauqZUK**3!hKFE+S1ZG#G}Tj<+H#qRqt1t=!xG7GC_N z3g0vkW%_wD$EmA^53&ReuBla6goH+w(B<{c%t%iNhNd*rR+>~bAoZB9X;u#!QwRQ=-0KE@78YJsw&1K|S3*t8M50 z0S<<>h|XzqaB1^JX>*%t3)N^ZP}3GTE0^q@v}sNK66L-#absKRxvzUJ`Bj_$V!9Ay zU72wi{2vhqxAJk-zI`4N>$JoVrJt5cvXZD*<@6HAX~$K0n|nwt(ON*2i`5d^w1P*K zn@cPyoG%hb8gOvIeWS5NPBHv?R{>cT!i;X$J6tDo_?uNXUo?6C;-R`tTV+{#qUSS9 z@dH_6FKthUzEzdo_}Efr-Pwp^*HxugZn2b*ID0y{R#iqj&QfZLcm(O_mojTIG+Y!b zFCthZmRKaWy-2FDNO5(ML|&16w}(bW!zsq;WV(39m}E)s!4~}ey}mUz9g!-<{3v&> ziUxyFoUT*Ms@tZ^E?ir%eOHRbikbz#cq(tx;;s8C1pns?via{S9GgCa4!Z~TIVJZ- zmJ&3Gh7p+Uqbb>^npqwNaIt``0XUSq061CdPwaU$NSCw7fa=bfVa$d@+qZ>b7i>Y*s1B@-YQ^$*-EkVEDDetk-5 zpD;yZsjGAJl#l98$h+W%0@NNsm>yLJ&VM5|a<-6z2R?gA^saiYL&`_OM4GE9qu$G%00Y*DSltW)Vm)b?%3xE zw8kXbR)KfOns~F=Z$h%Ome`S`(UIW03Y9nVoT`c4-%QeIza#wF#}<)uR3;q(fPesD zg0%%kNXOA)yr*Hdt*kE$>xVER&d$IKb=Tla?<1-L)CxGPND!AOcI6VqgWs$93KzQq3Uz7;HT%vx`CLv2Tfq6!=cp*8ENk-ts?%%0XpaOCVC#QI4<4%EcW?)R;{LEbZK(<^UF#6LC{S5xW z#f*z#%!h*zZLm-K(U8f=qSLkr4#`LK4O;|f)6zn#wUHp}>qI;F=-S0^I_4z8#8mw&dq< zLr)Y*X@TK8ztEPgqSIptWq3vf0T*!W{h}MGHVgPZpgy5Vok)BoHTSoFNvUdYb9 zP~p-Ni_(%a(~_#uQdHBD$QFxliK~~Z^<2}dEfO!6x^IW+D)l8w=g!1Gd0a2`)^pV- zZQ+;NT+ z9!xLDY9$nwSNH`sh5wwMjzbCKptMGLt`D!?%~&(DzVxXtoqy7WpptvS{hcVA3LjDv?JnoATME^v9&zz$dQv;UqV`xMW4VLJZ6)={g}pzR>gRD&@fCL#+#T z#28=l5+Ls!%G~k1dg(s*CBJHMu9Qn%nq;=XhyiN}A@_j)t!T#gtTr|IbS6=8pPJys z$EF6qo=K2es>UC`#nh-*EK$x}P2g-?<(6nK{c0_#YjR0qLgrdCYJ6ehab0|-Hpi?s z9NTp8m^tq~E5myh3TXT=$&kug%i38E;Eh^H)sgsjQ@{y>nfBJUBKw!5tCW?4c-vuj zvQ3WO?2I_M%>!#nRC+aP+xs%re160>mp468;*th0#1P>^Oy;7Ii z6=3Co?$m6G0V6wC&lJl|p81Hg)2J8C+H-rERGQnTP zs_6Bz))EaE8MK3-(hyAg3r#+1LL!1Q&ba=`Y9`@A9uOopOyWjt_4H`^c(*pA`>hXz z5Jc2Ls*F+sU~^F6?`af9pD2=Eqm)yUbz?nwciFLQNEhNhX-@-z9ziDhgb1tN1qnz5;8sBbnvdroChr$@8rH;4U|4Q~taebQXBiU* zDbN1wWTaU4R$Pm||iu)?P>gk*K*Th9*evPA2{j$@~aIFA5d?>tvxa|+B4wi(=en+n2szopLnx|hT{?M45!=7*pz?AY>$evK@pw*1-4q~___%h+W>(dTI! zvGL1}i}XFO77zHTptc>nsKF>qokpVTlRixDyah#0f zT&H9ktM3}NRq4x}97qj7he$nk!YI}+=79>{Hm;J74gzbZ3(n9(Gz0F;m8a+RmEfY| zhy8*yp@LW{e&WAogNC(}(~WK?tKG~hni}c(H0)(oA;g}%GKbwB3s)5jNjpUzU9)+S z%vGuJU6C7C)UT29;1SRkUYMR>v}2P9z|rm=gGVXtv{kNEjo`-s8a?sWm{ewEU$9ha zkE&7JY=Fv01P*IlQ2ita%rh-*E;zlSnp{K!JF&sJX`<+1M)UM`#VXlOs4The zyMU+id-IDIoOg=-yNilwa5cw+5sw-?9BDY-!TTvOZ2DZ-XO6)LeK}l@mSTz;ILxYw z^_7qNFBybg`8lwlCXFrtNh$HZ$cd>>nb_w*lGkJFUNN!vfF5A+x!Hp#a*FQfCW`0} zna}gb*IedQFhwO}!UpYg+8RvaF~uPZ$ewilL0}_gURv$aC=tD}CrQPe=+uqJXpd6; z`izC|%j+>;#$oz4C4)A07@PxM_Ji{l0F|tTCYIYn6Ly29Lo9f*xgh4agArp{jQjS# zmRsMeDs+j+NosYIfFjC&n}7FT?imo4^Kh9pJcXb^#Mw0>^6HK1$0KLK3}$6Q9#Map zdm`xKR^r3whY6iw@4*?SgU19d7sYN>duDewa^F%_asD_fMNjc4Z*x@%us`|>S;@sN zk%|(JjNr4xa#Q{Iu!o-X&&g@fR4?^~>C`;*PAF~R_RG?CwNiVOz(#ne$0UR}Y7ACz z_yNHI)J_1e&T4GE_ncv5r;-ulM*8AQ$xEJ@tKQ7!n0{=w_UM`9HT#xueb{2Q%I-|k z(xpo{$KuS^c#0*jFkiAjO+1ClSA*>A&01nr1E~}lrYLQFE|62wkEGN7WT`<|-iXaR z%s6i@5w$-P_2ltiP+9#F5ihZ*mbmH_=9K^Fx-Gp6NP#}GVXQc(ca z%7f_AE#HO=SR7%gL+*Eph!L)zfv1w)L-aFmQ8H7~a^Q|)tXaok;VgtYa2a>=7lXmS z&@h{Hvc%%~lFapE)r8E%6RP;COj{>uq%^!OkY^hG`S<@v9cZy4!mNYV2SNbI*Ap9A z6rFxe*4xY2$Zi~HIHZ3T<;_{}@4I6s}m{RZEEJsXR@ zzIYKBm>2YlF*;s24eB}->-i<`8PX{TIR{7%J`{yxcIzt4_TimZXG~bUWdbKg zdTY>zxG`TIzHalQtvXb-;4+I*^Vr@xlXMIhM>#JJ!D{gn^zeWdcqOLTL^*}MSBBUSljN|W3% z4|7iBd@4s9?t4|^rt`Cp$7qu`q1@REz$TQe+p4|3b{hOIAMWEOpdF@6SbHZJe*Fe- z1g5U3?PuBGxrjMT~3-!f7QUo-AR?)ksNoBwTR{AMU=QSQE~QDNy5x{%GtvDunT z(%~h1-n_Q& z@hAAxsEc9h2J&7sVjp1}0h^}-H*^R<6$94G;xE<2 zaVR{XR0Vzw$B0wT&th(Io0pzPrzKOcKF#=Mmb!djVKAY41fk>#sXlp7-6DB_9}BAk zF*QVQ{=?(*Kd`dYK;|k^DFxe)TmZ6*Ar!8Aa7#H2o1hx1REc&mjSf?k?K76wtHmS&6@7U4>S%KGuDCl1GO56=i`!0zL;%mtQKC# zQcSdsjagCm!zry2%3aYwCFNSY65=6QO;?1g>dnciFMTpSQgMf+jJhh9CdHOGF`O_!AgZxhewfVV@q5s1A}F3YBG7JxXC-? zvA2R(_hYA9jBgl5^t4$17;V;7L7#l6lB_vdGQyh*QP|F<18XQ~hvqZnb0@ zSU%iphURHouoQ;kS)-%lq|7rUk#_fnOxAwJ)Qw$GbwbjFGdLwyO6Dp?P1cy4ar@Ya z|Cr6YYuHa|hcP#f>aWQE+RR^Q!bvgJKwtd0t>|RgwHY*|GH;&(GldRuhvA$P`y6<| zpE|sQn4I64!}gn`?YY-uGZ~F68N^`PTWIpAH3xq(>%89qvAHGg6donkFK#;cp+P2wQUTU zmPw*tX1N*86RD)f^5FeYfz4_AFn<>6z3?|DrXr@GvbT8Y(7Kyrzn!neEU(GYp}Cxy3IlR%@426b9V!j0ObZG6R?-f$eg9!F?XWkqOI7ZOb5u=n}CAb@!5VqFs?c{#L zN_;l#eBMB5#uqZ*dG7j|t6z)1{G!Hn z@Vko{5e7C!Tj|~Dp|W_JCi@NMBq4KkU1p_Fv8%ezfi*$NrgAwf^v{P1qVU65ImfEh zDQVyO<1}zV3pyYSl+gk;&@KUEJsonvS>_xFegIm#Sj2+>DI!H=P3@J~I7!F-;4O%bI3LBac`dgiL zLM2fjx%SyEyx8lb+AaVUAYb+$?+Ij@^xHTwKhXNSN7$$RAk+@tW>x1?LicF5uAM-Wox?s>96@p%Dw1H|=d+?V#@iRW%UxNQ!ZoW#AGc zX)8P7zizM(eK`f__JdT#%ZcLwoNKG=%B0e$0xt1+0m20}6J_EXs4{O7UI*}wRCkui zPDaP@=1e-DOvm)CPqp>EQGX6?NcgabphRI9kwpT+<7d{%_d4iQ4|ykno5U}BB@hSR zob6S>Fh`;`)BId$%SCC^qc!Da3PDu-n|`;{LPy!*TGOS5aX*`}^OFoxyhtvec$$0Y-_hGWe@=;JZS3UAuR3 zA#I^a!@;8d+_24aaw=5^yiivuzB9&ziC10M_Na_#3}ys#wKaqQ4OZcp)5aTm78AA^ zn#&?w;-doi5OY}h`Rs*>@}Q?RPmgb$YRzPw4fVsB0qUUINWI}w zI9+iL!}V*at?%iX0|a5GZc`%XN1t4@4ksud8eeHr%50*?GGmxh`=+rg_^K15;G)g>3lgg~^3l>W4@i2-r z4nw4D(Y}!19SnR!g=M(m}yh{M)`Gy$|Gbm~-ysxq2(x(lF=t&E@JH(mR7W z=dH}VldLc@->LKO8V!I7(2t}cAt=?b++Agn9FXMP`mgP0!Vj-de97P}%TEoHXs^Z1 zjlNq&2O(v(KagERWs3^`?EYt022=>)2}87%dwRX@RpPu;us8af+dI!8vNrE0V`zqI zSACOU_ARpk=uGgwh~DCGWirp>=9`q$(~Ce36xO>MEx=7l&Xwf%~178jb&bITK_eDbd>5Z8N{Uk5?XoD^qL?dcp)`pr3 z1n_j+@BzuYe*HX;nz(zczzKAr#N$q>!X0te9YUhmu`uQyuWGEDJO^t0&W(Hm%69nO ztQy(13AJnZ-JCJmb)*}fAthk^aMG>c_96a3npU?B?Yu^r>3o8AZZ?d^423MW^DQ6c zCgih}Y={$;eK{p2!E4BEf~nW)|Gu>Py3v6yGdw0tsYdLD9jx81{G~M)91y%(IGJYs z=J1AZWV-*kp8jF{mLqPAt!Q?Jew*6NqWN-?L@W30)0_DJy;~nyiT6qRn^-Z zxpoTSks3>9p2!?2$|&YnDCQh07V#m6QKUU7a((Uft z)!ITHa*?})HuLc;{#IgzmK)qW1p(2lJOetv53AiP@f6halKelUU4CGhwD!=_F1;9E z&Y0p%Mz^T&-}y)I@Eu|8|Au^m&URb3VNfhT;gg9bAK?M_$-gpw2siXj6-8j}AC6XX=-kW(!HOAOpxu;IY}yXWOAXiMz8SwX=s=C3m4&PGMPkc}8f z=J;$Lbj(cln5ES*(|mqx_yyyWP52i;Ow3KMN3H<+*tb4E5ukQT-W!C*XaZj)4t)e8 z@6Ur#APkS%RP_JPss%{SOz8__nIdr4lo~|iD$Nt7D-Y3>+T5iHMgOET?y&f}3(#YM zotE-eIUIMA#aCkOKagb+pr?aNirt5|Az%Y7KU~7n`|pWaTfq?KQ6*G6>0}A(NHl9x z8%IZFigCc zbXR8Bqs#@J&fQ%`zH~J|M{m)@GP3%uJ!}IY1VtQa+ma1Tr0b|S?mMd2pBHkCt2mQ! znbiiqrT0E6aa=_zlQD-&`w(k3GF5`LYnC-sru%Q7gWWiQTS)^8{lk1@JO;}3D@T&C z7;nubA)IYKf56g-6^c<_0Y-y8<{f=8gSIxYVDw?jvbz&c8h3R1tR#;d=o(Msj#T}T zfLsGXcr^U_C|-zFlg~+0@`FCWe|6XLf;t6sEuvSq*MtM*24!SEeQQ72ef8;exg|?h zWMKBjxPUR|Q|^fk7k3gLHtryF`W~N=uoSbRPlx2gGezCY{Wn@kajl(-vNtjSq~kVCNSi69y+%`=kS zT>am*&p%cHQV5@+p|;V(@|T>+`+tlCrx6KsAr|~xl!Txtpp__{PePbK*IOHZ$58z} zg}=PG9fxYa%7a+tQ%iVErAt$Pv{Mg)0eBaZVO$INzu^p)MK}D<((sqd16w-R18K6r z-qz*VE%x{y+!#L;C2QtcCoo>kEF0xv_ek^g{fmCPII=}$(*XFIIs=;AFfZoqQ>l{S zspsFA{D_GhE{pHEG=xpjq-=q<6}QkPxBY83Q2>{hJ#F*#y(E8|6Ig2mI(qP|Dhi zc`DZ(vG`{T%|B;)C`WT(h5*trg|yc2_kG`m|Ce*Y0q3Rbf^!qbnpEHlCs{-qs!E>x8Q#KAN6Opy8%jz^YSMi`Aq=EAOprI z^btP2EIRO8djsN#`sbv&5CB70^KodP0;L^PcbnD`OUOg(_}=~dRe|9F=ZEf#U>7sq zEns#{>&y1{thpS|qpx%;%Vejeacf>2`f3p&tS0nVi(ExU27z0N(ph6eKexI1z<+TL@E|!vy`bg@ z4#j%!(prRwA1mQ9s9l!*z7g!J6ZqOj02cetss&Nd*xL*t5ScQ>|I62E!rvK*0F;*c zD@|6@kk)fSzRZ7bMV{}5N5)Wfv+1?!Ni&^>S?}1O7Ae1M{w{N`M=9TzuY%=7dpV&8 zB4EQvwNjZ{%?LFn#pHmrWY1C*DPqz=*<_?@1jzpb$Zpk*VN?!!eT zYNeJQ`j0Kx&__LB?84g(%w`@kIRVJ|EI5tp0q1u9%>m(B2l*=gNah8D=*`MvKR z8>`E)t*o=@`zk*a1r^oDX<_qyy7*!69M$~C!~*dW)`u@*oW)+y<#;dV@*mrMK#PM$ zO2kw%#kjA)&Tu-eli>M0R5?|K`_kjiI*hc}H)7lN0w+FD{N_|@y{-NNT;DFm$SC&= z`s6LjPvNt>d`qx~?8SpL9xoR|ebHvXY4vVJLCslxMI2R(@f^osxYF^fLq&n6nTykc zmSNaxsW}5)t7h~wqm{^?g~*fsMmEIk%h0>9&&G_PF?-mYxc_Q$ZpoT^{NxMqdN(L{ zY+*RfF@yH%dg+69zLx{^$Pbi(HQyH?*<{Z1H^!xE;O|G?8!(1zn4!t`wkpfBl?Qvx zTdT(OWg6T?g;_9UWLK?oz*ol1ul8dlZVrZ$*(#{$r#nU^%PLwD$D-77^)mg1$n~=G z9gKpIdodxqfE?1KtF8F9uK<<^P*y=kT~n!_0fJ~2@l*;OsbPCq|A>IlxC>p>9!U2w zr4tSc?pVvmuKFJ}bsr%fg=@MTh+FiQ$GGz0%1I@Ha8HE=k+X9{j$Y-g{Di}!1qvLK zcjtVUorYimz0vGCFc}#Um#fOg8pXOC^MwJ1YZCWsSurOgDu)-L(n0C4{&WNSp|+Ba z5x{wF65%-S2>&|?^Q)kP$XlfFY84Vro=uy%c?zFi(Df@aCGJ0V-~AJZe)t3#=}USw zDOskhHyf@Gsw5u1!{%|KAWSw`~1vP4r z6({s<^P^CPzv+jhq-HhylNtR#IuKF-sLzc1A{(eYE~!2szEqztQ%s{uxFiV%a5mN4 z*H<`571F6Zq%VD|@3L?Q4t zPC3-jkz0Sv+WGM+8-YzY){O^qt6aV_v#VShnX0hR5Do6MV@ttu zl?=lcgDl}DAdP>$mKF1JUj9o{E7S`{Pma@Q?b&<-*#T>qZ2SEAP}hsq!~gyK0joez zdmRig&f7+sJzS;Sa0ZNEzv3~YnGrAtQW$1O`m7*#`PP7?Zk(1TOt|x1D*8tZB>?!I z+PmP4O&HV4Lsxm$(({xNM@imo&NDUnp8wSo^E+`1VHnY=;YO4@!^SW5cVu@A2Cnal z&F_eO-Vyx|!-xLO)dsDuPuIIZ$!dJr)MNq69I46WD=zHV-SSVvNq(?8N%{3vj zDu+AY8^esD^uIJ||A%&2M18*Nf|HkF+JRmw!)zC5MAN7{QqqUqtv2aiqqOX@&OL!fuO}!ekuPIx&UkMEQ}@`)JyoEGY@HK;xiWf3 zU`Smb45@3o2dY_2!;tYdO6{IVlck==`VvS6%YMlyflHy`f@90($IEye`?k46 zH2SYxTW?Xu(ckBCIqI&zx_r;E%Ly~kPEW(`o*ggtD&l4LsbQmNcM*30IHq8p&noZh zStmxkyddUyi?plCo_uV@2_n8-W%BwzPr9%W0DST8WI>eZ?2sz==r#I=_l!J50NOBS z{Mfwf*RT7kd4c>0`(?=8@Ucpk$$Zy>uffA}n7b{YN7`QkWcQN4=`E(?(8B&*&2`g7 zFNM}-fe8Tt9|aC$nWO|5PcrqEcXo>g(y-aRM&~gsdbjtJ<4ZpFwD;%C&po8+8!?d1 z2dKjh&IOsV+daQncG%sd(oQMcZktQ*_7Vp7e}Y0WJE$@ouh777KpOmgG!*H4;qu>v zBK&ysk|dY{XSYMH`Fl;`~xv+8dHRX>ls55B8X!DOgw@*pSKYs_0Tj$9!5r*0DzPaRC0wdnGmxA z^DAP*=zcz>(TCRI^kRGSdYakAkTR3o1sW%TEjYgcM6&(#@xb<8B>VgQL|Yj`!XjA2FQ)K6UQw{b85BMmY!CEn_B6A>N%OSi4B#iCcV2fvHER<(5tDDSpIVb<9 znN?cNQUzl?yLom>u0A5AZY(ECk_z(!odXb;N)`;?g4z**Vm^ZytTWQ_t2Zy^T1D3< zBfg7+v+&*}i$5ZZ44fzI$+kfp)G|Dw^@Sueybx&=$$`GDXp}9qBY;$bG>qNf3w z9vI`^Y%zO@BJV~O?BEzW2pa!fH0Ew0FaWi@MNv-O*%gUFG`+5BFe4Q9={`zuq^)zU z6@(r)IJkKRZCjC}wLPIc;gapJ1H`bxbpUn^GJGJ)hgPXv8-0D5k@6>74(J}Rq4ynNuO*$T3>vN5f}S^GW2zh%<&pKzoBpUn^@EXWOxcV zgRm)BO?JE}wAtb$`R*8o>oWh3xf8z3H+}dt$ab{8yy(2F=q_K;dgxb3rfL(6Q$E1J z)L@?G-jf~lrtN5j(L-B^V|Yunf+%JOaZD9LA%<-F)rH&g2)~6<}QcA4I2;wGH;|7=FT5n1Lom?#=c?ThQ(sR~1Wu z2k|SR{L9>fz`$2OieeA}kvGN;(NH)N#`ns+cb~MxB~R>#4SQb5Un&+V zL_pXQO~{bN`Of1-415ORsVU~~yU6bWyxA63Q1c`Q_W%sF{zfS=IMPV)W19(t1|Kbqi{xVPW@r zx5vJge9NFxw9dc&Rav$E0~|<$GW7;aeEZJcDCJv{opqBb!miV)ZHz706@oR zjwhpOVSizGK%}0k%@2Plz-o`_z6gPw9nFE8T9&DhHN|jH?l&-sEnmlQ@Of#%>K0&a z03HaL;uJNvYR0G}d+sP<*q;=QG3){s^5H7SK;4h4_F5r!U4;$f8)4YP@}=yt2mHTY zLh=~)+^93+y1SNwQs9!yU}hIAZ@N;p!hemHiD zQ3rFM;P{>AU=rU$Dysl80&uO!6boA)0VGf4CBVqI`)NZ(X}%MAPhbYodMYbZm*a2` z7!f7G01rk%=rTuwK7<@NJTwgZSOb;!z_ zXa)DM4xii;CpsO_&g~;O2BdZ1fPk@W;eMntIt0T=F-jkk**0sN`y#!dhVmrGd_DHy z|8?-)1pJc;nLCN2Gdl)<(&sHnf~ka%%VBvUV|-uZd!}ILqz};+D_4e<$p+Pw&V1-9 zLdFKN*24t{B<>08tls{}tugn$)$_SwER7eY(Tr=6>kq=eo)G-}99n^NG8WUfvDw}? zw0{}lTa$dUtnLj8-F7`8dAaT_3f)eSki3BiMtb|zgk-C*t;Dh1wpP6&M?XVCve)se zl!OaSXaIp^7hZ&@!=IU=wU>jjQOR-EvH7<-QYcwh1tfSOcut;>WhNd=(O~x_0f3??cjO3SwD~V*(?j$HbJYvV#?E;7yVbjwv$J z`oi)=k&y-f$4lQ2#X(Gg&Upx+$nK0j2p;x4mnX-|7Nk+_T#^#~Ihz{p>+>F@?$D|H zpf5cUux=2ByPGR1rg{YkrBu%|ufLZoXR3cISIqoZh%|`n3s`yig zi4x9xCKiRMIAbP&adizdC*E*U+2wnvEd=dMm=GafI8tswyy4;pPqq7?od+ib$QQ!P zw-9f*H{1Fi>UfEEUNy-*5nv?Xylqm9eBr|MZj{@wCgo?xsB!^kfRNM6$n{_=00Iy0 z#rAa(Fx`38|5w_Vz(d)#Z%--vzC>9jON1m(*<~t8r7R&m$P`Z{l{F#DkQlp4B8gDh ziaZfz8M{cNi0m`g6b4zwjG6DeM?LTRyvzUh|GqE%YPvIH=Dx1$Jdfizw}JUCf;`P? z38}Zl*%DVrkg&mbldb1>gh6u>`SQ%1wGNeMA1v}_^vGAP=Df;rMd$u6=b9Y7xnc>0 zQa#ClB4&tfF%V;i%xa{qziZT_?lKm!bAx29Kb7RIqm!5r?n5{AJ>6Y^_CI${`2V_wj9M9IU@3`wcZ1g@`Bef&NdDvJ5zGnpd z0(@-Hzw4nL_2QGl3)MFXe%(0NlrTr-~i*~mZHIiNuy`!oKBHqwCf zN^4%V{W%qw!*U7iNY+V9r1~U)PO@FK1b0Y>PLG`x7k_51#~!GC2l@J-$ucz`N2h48 z#w4J#z%?V6XvG?r7kaIhy`ewsLKEOG=YXqN@&&lBf;Th*=eePy7N7W_Z-g@x_~-mp z->;$HanpI&@OX|!AdH6@K7yccA$lFi@V*bEtcAdNC$NWSy36P|Q{2}K+QtbUz)p7i8pZ|=0WdY_|F*>M9oq~L9#VXIOM zhXHnqp$heP&!+&H+$PVs@WA8@^WJpab~P_{XtWBUA0#D5`Ru>s&W6KVrsKstm1AB{|#D)5j`??+_~TXr=5 z160|>j>5BSw9{#A(F z4y?~!u96_?-PJ#YF(^;B7e+kOc? zj~&O~l8hE}p&Ir5xDB`oJz72bYaR*Cyx)%-n9iPMO9DoS9?TRv_;3NKsF%nYgV(!g zhyT?x2NuX53Eo4Z`O;mZ75W$Qj3ZBw=IbZWdSxQe4j%yNZx`QMF*R#K%Z2S_%xZ6> z>aC!fh})L#Et0?g3KZuoQhI-87hGI$93xbkh)7oswAI&B!dpMLvF3S-Ku<_OSM<`c z!(d~eKXfr-)?WPFp-8&?IAYS3(uA(Uf9AaN0_YF?hEL#L@mZvaE4r#pt{`_p`Nb0~ zR7aj%FHzO`V(&UOi>a$Ywb|D!KY-ZoP^D(+=l@~0W33KPAyeO^{;N~aZud>C)vvYC zqC+xv(Z=qZ^Q#g{w?J{UU7YyO+H&uqoqb53C1~_bf{`<`Mk_0_0jjb^s`dZb?l@mu zhOnPA(sck+w*^(eFDV6CFu9l8aGP0;wEHv%OwKTf!d7{)4{Tq1l)@eMC z7PR_ZH=&!Ou{A)vlQr8FGRYTsEXAuT?>V#dSVN5i)gzb32YaA+9hnQh>7UZgEt#D~ zSSGW~t^}>hiMU5SL96NTN>I|kvO=}E5`;rf;x0fR*LqRf zY$TjZ#LU@zWMBR-?Ki@FHmedh>cw4{j( z%%3DY#4~puayQ{tf<4UIzek#V^(LlW4+^o!3ZWaCf3?qKwhkq*_(*=o2b|r1BLLFq z8iTdi@k3_NgT+lawxLjq*UN4FBuOqM+QLoA#DFCw_@$dhYrSuG|2Q&Gs`xshN!FIe z0=+}xmk%ocJ$~8aQyXC^j>|SGo(*5I6i?H7=sb)>R%s-O+?Wd~;Phgmz@fP-b~a%0 zAK6FbogJ3#f>vB3hjL@m`VJJ&-t7hB=ONnJU^@+P^c{<(c-*h@qVlmLxiN!!2F0@} zKNAq+!OFk-{!(DUYY%W=Xh^F7xcw+sO^YAWpzVymaPiqR0uUp6a)~4CIh+_K^VBiW zU_q+3*uwHNkrEEr$LI#6?U_V_SN1H@fiHzH8H-3_ZU|dOzR-(__xrdx5oHo5R}fMQ zXIg#X=d`Fe5KVZ*V89dN=^EIBplfsoNN+%pOc(MDi8J7guT*0fm`%@-AsmCq7es-7 zHr4+8<7b5z?(VK;N8?5*EAyXNr{A>r$@wL-D__4nw6u-9Cf<4PY5%d}C(fF1si)Y| zw)vV!=e<{_O^TnmB*LZMP)l1*Z>a^l6dqe8Z>W1}eR!z&$yM057yFM`+B$o$@4Po4 zX;l2g$H?N!#Q_1!s40USjUZ@cb$J^e7~t_Sk=yIR?%$mqTZE2O{!L!X63>|x8&EHr zP(iv3UfTC(119qtDtwS+;YR)~pX-ncYqY0|4auUYW_(!?o37sTNTnxzug)V`olLGb z>AKftP!$51J0E5r{Trgmc0u7?BXx4% z`rEddP=*t60ZLWC7xQs^*aRxJ%9zf7;s*ao9GYkC`|siqNWoW1d7*vSnw6EJ=RyNt z>m`uF96@IIHI?V#bI`1_An^-Nlc@Su#YbsRRLWz#$vX#Xsmmxd zN!CBwl&q*=;%?uVfKGP5i&VQq?QQW8Qf#-D=T zO~mHaV7***dl_-u%-mK?D@^1VYP+`?5fI>bLsI3PBL-XlmtA$X{xIBnT^6;sU9$hf z#)s_!k{_g|K5T-{{T@19L`$f3g#3aIU;bS4s7VInMC8`mVW57G7A zCG8Cj%A=9EMdM2!R#V~;z1T)FyHrDn4{C{M-xpKn#^%!aymX@`@sM5IH#eUAhJ^pX zDIh6f+BuCe@Z)D+Nrh7^LsIAUq4yWiU8L!yv9Bg^g*0cr4`qElc7W|gm z6qcE#j8?E>#lty)xqK0mvfZ{)-{)=fR=p+G2C@it9hx5bJdUSzj4O4UAI!3ta?02Z zk+XJfOWijU{<)Ipt_pOhyJ1B%=@X2d!*mDnITDUpxgj@Lohi+Pay1*OISRUhWQOC`H3rG z4XXcmr7pU@izEQO_^Ed zDks5omo)=o0Ye73R0KvTcogTtQrRD4KYin!n|6MkRViy1>3UyKe*glWtQ<>Sm|aP; z$c%b8lG_2?UNP`|t^!eoc1}R9bF$!EM-{Dn1>=U*^lsp1f2s(>J7LC`yRu95@lt`V zVWcL!B53F}KO6z1mCM8NwShSbWLi%U3C8k5k{`hE=9e25c0+Kz)^LGcA{655 zu?CVUL2tA;6o!RUB0qgV{UWUN`(*2Yl!D@tz14ug0Ns8*FG~ zV4Bc%$Q!J$#qw>FfX#Mkk^@KR0^*VOcIFfU!;zU~&<}4528f*jduXy0Bn4UbyXOtI zBB>~8)iX9OXEszpcn5?!qo>1i}!=4v+#Y`{&2Mj4X^LS$j=p&PQhZuqVCv zOe=Qb;*F`__3)x(nZ+UWpr3+|^!Y*zFtJ7@g!Z(MOI4|f)qP<_%9)~KBQYTcZ3 z?&&ArAl?1VZRdD}60<9tN2fY;-9#bX%L!5^@-sg%dIaN`5S)gfP|FRtykru9;3 z-gd}DBvT?)2-y#Q%LOOf|4E5QO4eWqR-cK%%*nN4Y&;+o1|23hLefyb`#-y3OxqTe z{&&}S$+h(diWMQ(BD2;f2{HXbVsI}eyX^3jTWPQW4g$h+K^%?* z#mU+?=$jjQy1u`Z%Nr6c-(=xoI+OKted5d#!ooK)JDhypFbDn#`BAk<4LCS-7!_cJ zQP@hTvUZB;=|DDGLz|oiY8p)7wz^IwXFr+zOsKm@7&mC}a+X$WeZlDLKrtX0N+H*; z0ZbE?=;td^K=djP)|}lm&@k`@z%`g_UErMZw+vYrE#9fe?(?gDie%j+a~PwI+#Tq6UkX zIdI@e6llIkRymxg_37us2*@}pdJnTHlL{@067cSe()GXQPMI_u$&L~-V{0Uyl8DK4 z+rZnHuC)P~s2R8Vf^S5WI;TLLSZ7JK1)6}BJXGA~A=jz@P0f<3)Mzo4mwLE(CPS*T zGH=C_y3;hP$2&m2GceLK`}1SqnTEQaDsO=C%^L)=mpDPlGlA_jFJD#3%Ei;`p+DP< zBv@&rZ&4d@Np;f$DLR0#cK$6~A;>HRXts$+7ht*eCf@1>1sld1`8Ruf$!dkO3 z!p*_w$R2^|C104x8X}~74J_MgzCe8Cd5!{2giOsFKuX@y8V3c$_d#a{q|-8zTHf}d z6#2_^S4Rrj8ct4bSud=;>gdvrHKBR~gjvB>%*M!CupFin`_$$2-9eAy1onuTwl=tPp60fBhQD;h)RqDm;3%6X`-@nTP&vQ8hyW z5CDyuH{-BOF`|~e_5WW!m7)t857i?eG)*ABS7V&tEs_TC^&t_^rl zB_)Sn$(?^5h=?WR#Fz~e|6#D#|4q}MzcS-e3DbLt1uHwH7o`Ro*_QdyL`M)IPcjqZ zRmZo0tO{S4YJk{+Z@vCr%l02qXoC6LC1x@=4;WgM$NbkaaU>J$^?fubxmGZ5bn<5( zZ&l)g%(e1X4(^N|cil$wspW^6IoBlG1T1w^$IWsjyFB?jV`sjkIX6#oIHE3GBQMnVCrlkS}|fHup+kUz2}$in)9+|oJNGfo)3L3mh; z+gu=Bs1L^=pqSt!90P-zfTk26`iT_%y2v_rp8WcS(si1|^U&hKjcvNFzm#o>7^oMH z2dGy+?6cmKcu_BEoV?z??p=2UaKh!8Y39tNP4omi&$Y-+R@W$WA_kEK_|5fg)u2T5 z;J@+T3}kOW-8{p8KyAZWu`svjeH#u*b7l&JsD;;_k~<@DXP1;>QqZ1bb!onjXIdMn z)6Ugt$TSMjtP6&|MZ9kS)c~Z;n6n$ekQ@<-S%;k}AR#{nG@K5Ynzd-HB2&dkBo~kd znK~#QlMb{75f^{?|3xHcUg;958+vz4F|;ZMf1O^y2u_?`)lfzW{X*tMc%J+tJL_*- z3u*$DV2K!ji3cZ_2uQTNi+!d^wzQ&GzQQ2q)y0{uxmQTNY0eK;7SmTw62k0|*1LN` zz70XzH@Lz%MNMe9DgtjDUZwbH%bK4cz$7Kaof!^uEN%d$j|6Q+ekPSHb#&6<%}vfc zBrjcJ#-5OlU8x8zxW4?(<9ZQdwE#B(cy_*G%j|Yv0dokuLE3`yD+Dj?LxLoj^cNQZ zB_iOo>}98`HIWcJSS(RjRREz2=v{-DAaG`o3y|>XA~yxPM!`JK&p!g_1Q9ys7h6pe zuS5l(sjNEst&R5jsxRNG6@$Q%iM<<%57o<~DspWf&4LD`Jz$(~}|D zlgWa_ED`B)EpY^9O)WubXykCf)KA*YczekN!04Lj&8*xE=*IDZvv(UkVTrn6cxIdt@Zxj*aE5=;QLMvp|~xmEacqrS6@^DEL`Ts1R5}!qfK1EyL!b z-9j&r6@CCF7XdFa9bvjKugxIjL*5Qyiog>Tz_I@Uw^oqzyY+ledswS~%4xcLmc?@S z>QDGMOQwXs$;QWI4fTlR0b4tN=7G0umOu)%AHgd6{Oz6_C%UlbNLu6jo zGyJT>r@8C>#A27!1T)oG(Pt#|>oy##lk>mPw9IWm-uSdeoL)|h`@@bSYe+67eArzg zwz@q#T-JOYGrxaMi+$7$)$D+|Tdlu6rea7rz>1dtBcZ$(YtzGvi<())UhN@lr6_L- z--fcLOV2FwX;T`-?ld|@*HPhT?h>AH*u{DlHLxF39;5HWRRMhxXXW3dE9(qcDQ_A|e zuICinx3dA4!()ar13#+k;m=jH!Kr(qs8`Zfs8_bi^_eD0Zd2Yw{z#8btMmJ&4#OBI zx|Df8w>j^*!RVzk7MIs6;2s{W(UQFI=(pAbA}JxcT6~>u>!90CcC4{EOJb&ceqE>A zT;d_J#354Kn~$2V3)G5!dXxz@su?>gq`KTEf%2)vzC9jzAVg#?8Ryf3B{mNx;IjF* z;hH4rk1;RjtXs~Z$d0_I@?OjcFV2KclS-jIq@AYZ-H9jY%yA=AwjYTP?DPJy@1N&| zo#C!F&+s>*2ffXj^dmfTz3RJR%tD#6rOtY3y*6<#m5<>YHqp^$D4@>)*7l%=sfPt|e1n&??cnN6mkDE{m?d!$t zv6DtGaLp`QYf+TTiKh1RiII+@X|N;#yeN&a%o%x1`Xyi9%5H@{cg7*(gP0k}X-(&x zS?p@=Co4c4@arWd%HW&MnUdI*uZcXkNc5AW7&Lir<-2u3@q~DSG6PahLbFyy^d}W& z784`CCFAyw7A(iEt18h(x%my=QpQ=sUFjP!BC6v;0W80eSSX8YF5!^cXQ6j<%ty>+ zPFBSgo^g+FKog$f%J{Hw%&)5{GZ3r#2?nm(g^ON1rn!94z|jp|O38;%M%0EcjCk*{RQ3T~`}S7lt`EnV6X<*cT- zk!GyTfINoqY7A>eQT{VyMF%;tCUi%!4LY#l-Zc$Q1&s3IPPl826PDLLelnVB4KI8r zj!^J}$F~PFV!K)+O5N_?ioryCj1oMQaRn4(W52vK(gnd4)1)Z$ECUW^`JAk7B(dH#kS`@s?xvHUldioJPyy>pZX=gdbwmB=^UXVF1YtqQ=A9a6O>StS8 z^6oL^O}jp%#HFMs8?|iC)vkjFhAn}@yCZy+>dRI|mgaYC8Mfb3)9)0n+m0&9)So1t z?5KaA9U^Wn-j%s2Ka^=l<#-`5>_yVPdPww{(l||o%bUuunX@Lx@V%Y`W2Q@q-{F^` zJ8)3*s^Nw5*jOJPNit{8@V25_E~lt**eQ?HQx7QX1>f`GRw1(|XKqd=?cWm|PjKK% z4T)RHx$KmnKe@CE7nnBRg$CGmsdxOxMBS|q+#V8Ow#6@9IE7a1`nDMEW#Cp9t+ol9j+l3NZMV?^KtVmX{wNXv$9t8hEqznI!Ii!sol*`jcdp5F zeHR0kzTmJ^uOMyLh;ji=7B0If&Vgu7Fzljv_F!ifGp9_+g)$>NxO7&zyO^ppTFopI&HssRq$jnF^{(3;^T;j=-bKau`BKDLEuy^mWpup7lzQ>GQ z#Fq+od$8%lp1Jr_nGn`1(~smdmf{AL^j>xL;anmx}s~Sup4?T2>?D{>3aYo^Lv|zW$wnE*bXHD-m3~Xm{U5=-Fmk>H4FU-r? z3|}m&ehJIk&a0ZS*ZvS&d1NfvoDeEW-!wRtCQcVd&)24g$C0HQln=Pf3C+16J^~-N zqL@M(<-rY*t^1U5^*)OFZ`W11aK5g^W~;Rk1NT&iI7OZ(CsaynQaC_XS=ix^xB0(8n#SRSDK{<5 zII@UWQzDwR#I4+R=92s^YeP%f6Cdg9G~lrdPA=uN9=7SIS;&qNH)qq#-0A&wKV_lpI2f8cY?2#VWosd8iG4Nom`b1CP#K|;ejl1RAKKpP!CvUJJsTEbpI>nxMieziw zu#~AbZ7ACp6ILq3>uQSocE+)@R$Qr7e47^~7kehTa(O-*l ziRaGSmWUM;%q~)<|uS=r>zm28S|S^2Od)wXeEaZ5@>_N2t8e)~J2jy+Pd3;BwHy zi=CevY)-M{g~VMyqpn3U7M+*K9X=uad_?ti3C<)du+jM8r<_54Po0HJ4)D(-Enhp@ zBD5c_D5_;yVC2WHP8!vvm`Iw!KVmO3p1x&gl_4O*m3ax)Gh6K_airn<=uUw;S~joj zn2{H|8YY(|VrB$YRkmtiLQkj6C1VI2rc`A+3Ur}5!gJ)Yce=pze#bs&sfRi~%bz?P z*EiXfiW?|dSuIW=fN@=DTNf0!5^AG3(u@IAhG3(t)#BYpayDEuJn}vEM7PkBLe1tg z*t_-g?RXY*DYjuVi7-yB^&;-V%qboU0R5wnYKdeGb6Yn2p1t0heu6L6;3vi`ooj7HqIHVpZ`Vgi8nnT0p-4E1cZ9hInfL8U9@fBMj|~&3ntzh z5ianeVjt^xxiY{AB)!*FpoaQdCZ*4nz=7!0>$fxXV1e6pJxRzCA54D4cp6QCU5)ulIjG4e}}2f z?QvQ~FAkE|sTIwbcmgTr=j&B_Bm4!wRMmt9IsJ80oMp;2sw&gNUbVUz>&QCflM){9 z#;HWylM=hzeDj4&&Q?RKlsM;7eo>;JW#hT*U}ZS|L}$Awn^LJ_ciG9I^Bwiiv+*mX zl00q-TSzW@YAT$fsqGv1G8B{3wWWep7dhZyf)B}9&#~$Te_w;4bZ&S|j@#Acc>h*L z+sqW92yqgIiO74z_w059C!4hY&$kwepTc21l)x$i&JG0=|NSj>C@KKB(1}Z|7N(gz zsfM=8M+f^3FN6rg372#qEm}HF%T5dYLbl#DrK*IxO%o}I+Kez!1u%+%1(hGI3)$ML zOIDhu0-kJ=TQF)DjLQ^BtxLO2>nEzZ8dLA0dn3P+6ORYp+cSl|MH6`lZUX=r+j&&q zh=LtOd3sdy3%hrwv>l~vPT}k862i!csy;iH*|IK8<@lWSt@#7?^L(>gJIvF&+BctW z=Wzv1rACr2(`#lrwA!Z8F&zFS>^e7?WZ|xPiGMbxAq77c5-Pdn{R`tp2I$HqOh>GK z0aZ>^O`(a{&s&$yS>HYL=ufU|H@aw}&Dea}<|4&NYh>S7fApT%6N+%ewbOnP7aC9S ze^OAC@tNj#+srSMZzTi0;)r5(*cEnWd)Qg6Lucd;o#k$DkZ5pRuU{kQAKkPpY(dt3 z>R?scZB+Q8qQK#7Ji1;ynpBp-WpAWV9%enuY2UgTh1|n|jS4tz%DfbUA@K3ghN;ul z7ohqR2~?c8v;>#U*G9bZqgGceXunvrx0>+GS*?M_!_f_5 z{z2}`{6f0~;>jHH!@G}FizY=D>_R3m4m!wJHtuL?kbq|w5d#ALqejw4Y?GuP{(}lT zuSgJh=D-wV9r|&hSPUWXJ>k)uwO%8GalsP-L;#K7jw-q?&xc{G=^mrtLK$&#Z%MWk z<(lXroF$B!J9-Mqua~!|%EMgFypN zUOTw`&NSAq6*sHSxY3NgEuNFwvMwlVwe}O86FlLXt(`N+G$k;+<-RfB??~IyL0;6( zv#kFOFS;1+?P#2G3es)o_s$fUHgxQZllS32-p>7gmfdDZt!M+o!P)SS$OF$suK&&F zgUIEmgUk8^mPa_ohZnISTy50=hzIB&o4-#1;ttK5vmO!1ZDih3kfFqmXNX1ko8pCD z3XPgMT+5I+)?#v(CHzaopJ+8*^F`_N3eEO)Ft%2+oyV8W@Pfm@{`T9;TXeS0JaRGx zEI0*NuvkUS^ayLB#zpe_0_7}2D# zR@bS@_9KmH=+5y7iuvi%Uc#BR#csu!R7-k{q5%)P%~^MlG~HG58?3S;l+9QY({*-M z8@2IlWJm9I*D*2JmU1KBO(wR{U5nKyQzrIiJmHn>S%$do5T=_$H}h{O z0uqj&;C*>j$lGm5?$2n=*ewl&Mz`py!_hZD@S69dD&NzmC`-NHj54L-Szq29lE%@;|5Ty?Z8tfMYrVNQeBLwmaDc)1@8{1N6`+(rU*J%rQn@Q zQKCc#%f=_!!SBq4tVzyxAvUGF#qKPVL-HNQQ1Rth(dL(mIg^A5%eR=;~@Ex*U&Db5nie9h))CM0(n_?W5Pl=N`0`H&L zO)ha_zDAH3lQSA43kM2b0VVI~+XPG-;8P5-c3Dk6!)XROVvQ7(0(0!LXnF&xW&&=F zq>2oX6-=qdIPl7Q?giIrMK^Bnzj=gQgu7<)t-4A^H>+a*_sE@Zzjm0^0qs=++FNm~ zrS+n!VB%B?BZDagy+nLrsp?ONXpI;P`+4tCQ;%z-SQ?XH_yGWw-HnL+csC=1Q?X1a2AF4V?^LVq?W_}T1m-P|UT{b~`t`6skL0ba z6Fow3K^HDuH1_AcLguy^RxGL!a*AmDus-gQwuf)7qFQ2BGQX#9t{ObpBH$U8E3G#8 ziM6iR9KGPCJV`p=Q5};V^Ua*A3&cwZUEE1oJHdSeOUC+~*db5v# zOF0JNz))@_y|-8qnrFAdIGg; zR`n&bpdjdS{48sgDD~h4*7e#3qv|-rZK?H&kYYvhk-$5;?NK5fwyYxle^6ntZ#q#o zrw8cZ#>t?hF=3Gk5Li&6kloDj=@Px?*3GZ#xTZ_=cV%O$$BB|F5*D-Do)Ry$RB0wf z%McI-kO}TIeA#1sLIhPLg539 zG6#eK#LPmX&b9dyU1>k5|DPnkkO1>d)JzH9gT4~c2JT`?L+qAy=31n_ zs*P4HonlvB&&@RBACae+LV8~vVLXNjKVQ$q=_QbW_Z3hs?Y=WPSh$fM{G4ohIRtlB zm-f?Pg8b@S=UK`YYS+b|4l(2qXn z*WH`a$3fA!b)YL_&~{!mnbT@L%*V$aUS z-#>$kI6)kNfD=(U0I0As@Ngt5nc6%kN%s(4X#Po5BAHMh#8^Fr*K^~WOF>|6`%!|N z<;YZj{_Bt2uwTo{fkpTtsD9=mZou7?>erK2H;#zTrlh^6UV-XbvFa(h5aoXu7R1-# zq-C36TJSZa+bSXaeCdJ@TCg ziY#`C0UzH3pO47_l3%GC`4vvOATnL8?2Be2hL6;3q zr=8;a5}mtKt=Fte`uy(Po;tldHc?6976tP5p~2phd4 zfHLy_?KV>ZI9FyUawozP5La6Ysuf&br`c78Q>80^8@o)#FNVF3Yxh@Y&6@DDm7L zx4^`ObZFN}JZ_a4+v+7hYumDq_e7R}=PjLtq!LpT>9MK!_y}L>h@8WKzIHHN0-bOw z-Z3059Y!vtEK7xvPIEVG<=!`a{Hu|_cmR3Rb?L!R({*|YA7hfNO}*vExUGyb3Vv9n z)ObSVU@oEZ4nmoKAf(OEv4l~u4OdTLo_w%#5R8?m8cN@>Xt4Qv$j5H3CokBJI%wXl z+6mCzf$ehK)C-kY)t|dLZ5_BS$G(4|s8QX}%`bjtF95(+&K%Cx{r`qO2c}echP8c4 z7`p-w|8CABecn+0R+5Mn4z_+k1h`uH^M;)vNg|!%bo?R-_YvCt|%)}F}DcrtWlL{#W=B(6=9g9ZV65(?&OPI9FvPvL3JkyOE zTD54cQy~6fS(C#Iu><+m^x<9O2mv2NS3jUxcJYU(Z7?YGxI+LgP!rI~C;=`HQFTO{ z*!|WENRh&A5Qvv%CH|LYcP*fvLi1Evu+TsB`re9~TGt7T%$Uujk3;^G*lqA&JMv)b zm`yH(b{MJi)^;`Xkl{swX(01%J6oI9?Xx|PS_>8byYTq0@dO_}Fp}B^>Ph2iyDeG5 zXC9$F!gBf4E@WRv(2_1Zc!NCH4G(k#;Qt4yfX^JE9 zr-pb_-vQh1r*rGj-y%B}mmGH_&@xT#{CH7g1bmq7fPnB3U$m#B9j=-91tmTFG%XAN z=NAr_cEY8y5V+(LFH@FvZoJ5LIqjuq&v5|d*H{3QpEd$e&gHsbn+lOgT?C2~AzJTm z`e4pv)UW3zSSCj>RWV?y-qfZ!D5TcMcCP~gm}&H1NA(!3ZgP37qyszQo(!T=^&$~X zau~+Aq2f*@sQ*|k-$HDg~GcxQDJeG2giN`c4 z=D-9C*+OV{x_P#};DYGbPd`x=9R$yf%y><7ZD$Im9TKRkW)tcFj{WP|z=sF}#sbYA z3Y39Xtj@ULT$hz2#pxah$8H-*yJAt>l=gULu@X6d5W0LoI~;f7D-KfwSCJt4R@sn0~@T#|GNpu9`WGK zb>ZvXQ~-QWKFvC`8S5^?5+vk-`fz`9Q2qp~_c9ke^X+-dFX6dTGlw-YbB$ZhTY80q zkI+ziVBRSMJ|Zu|I$b`0ACFzwMs0aBH_E z_*eK1fcOOQb*HNarWJkby+x($m_V*;IGEtdn#ASxX|+=UBDerNVK9#-qCoccwBtpk z&>T72WCkq|NDWvV;Cx>%E?8K9(pn;RMdi&{0agiD?@n8l%43HBlmgC>WdLX_XUS4R zFZHO)4D}nhnP#lHj~`X_%4mVsJwAGS1=@(t0n(2eO$Vg*@( zrk|}Y9aLRDNl4mi2=+7Y^FVNeQ>ALk@-N_xtwCE(^AwnH%CQVptmG^gD#s_HO;> zaxUAm#+QTN7jFJnRnu**%U9Z}b|VySXX@-Ugjig1si5`nmW~?`*$}4#H3_EO`ZHtF z6pa1srt84ihK`p9=TF?|YUlVl<5AGQj%)is#j42bs1-&l0x*@CKye$3K)#H{RTuChX*U&xw%A2|QgaC|E37S}gLc zSggSI?+FAD=R_Be5lkcDkn^eaJ{>SD7Yg+*VPt%w|4vbk9U5FBOQ6c@J8vpzuXJ;|J+%sbrXahMkcd0?QY ztYrrI_Fz3AYGvuVY^(Kf1r_mI!BLe!urh8;=@tMqgd>oc6Tnnu2IDwAvf%K|X>!Sn z3oEDfqB3410T-|#5|DvV0NHGGeWO~VRbdFXK&T1?24+5jXd_eD(J~W&=9-|3=>4o-n4RmzM*voWDBb4w%0*==sgoIt7=Q+>K>h#0;?94`tYPDsQDvezJc zDQ!NnyqCcs0OW-W^^Wgx?IQ)#!VA2-u)pb9rlmRiEHff2>C4=482hf7>_(YKLOcApo z7$B-e@#`U!nout=?}s-pDolA~u@d?8sf*U26CgpCX587)0!U>kJs!ETT_0#KO2Y?%JZWYo-WDS@0pxL@jQ zsNp0!<9`l7wAAa-qA8IZ<&r4No9B0ldhQZ`dF!3U?ubDL);ZqDiwL1tn&mpS-{siD zV=XZ`@c<4?wg!f~zYP=yc3}SC!fm4y0flj@i_$q%ST9lPh>_RtIuMxYgzalcO<~+o zLb3-=3nM8;VHiVoRvz$YO5o3|q*H&UDO%S2i=MJiBU9(D4}0_Q*1NUqwnwd+u~HxH zff%@7{EK)09`FWnvUpS*vM^6tf_r~^x`S_ae-r%4Khp?JdX|P<`a(%x2E5xn5oR>q zl%@`ic}!YPca#YN0c>R=Zp3=bbva8v{~wj)SG9yf7JA6T7rT$1vA$b3y*+fV`4&i$ zG0?+9mg1UtUQ`qB6qD7?+E&xVFw&pExj@oW72`MrQiR|0;vy?3RO%Eg4&+J!Q3o{x zxa*w4ef#LiQekyBZD-O^yO>L6TwUoJF8d_=ZoVnqxL}4ZNnba;&!8{#&|m5UY&l>t zs&`7~Xg}ub^f0SC)Y?oj$6Mw|l2c&29_X8S<@?#!UNchw@e=AO}fyF~4THxZDfdC_Jmt{wNuGcr#WyVt( zYvd0cI;1G3E+(eXjEvPH`D&mmjbMwI!{C0Q1|W4nQzKZ6H(+Fc2c)Al#FI{p&GRGy=#RNJ7)rk84(3 zlXfKU8XovogwtOQeKCtW{U3a!=z*SbA7 z`oi`a=l7KD{2gdg>(=x0cP%2m=#Bp2pkWHE@V&*!)*{?VBvpxFd2=nJV1BO`SVlrT zBexF#^F;%*x3_OjjkL8Sa=+Pg=%n&)Dc)1R(JVOXONHX++5D}I#3o8eUNZ1i0BTU zskP_3g&&-8yd2I05UIZB6xXFQUUiV_CVRT>B_!s;kp+=o29sM~*3?E4r*C>r+f7lX z-)0HA$c=jH$XZ!{%s=k;q!{g_C|^jNMZ97~0k}4gcyx|W|KvEp7v&tW$fY8JgE2jt zQ8fk!Y7SsA=h9*#Ai`;~LJa4{zs0GU?lSbfMPw^8Z*X>rspddH(8D!yEtUkz&+|xt zMxOL~-`YVEc+`tbCl5dZ0nrwnh=)Mphvwzin2DVNhHVeD6B$o>THak2Bk zqBkB>f9_e7C?PY@_$WOx2BLdBIKW(-h&etFXczVXl5-&icwL#ItkJwK2r{c7{qIj6 zFGJR|wp3{m!AWbt!dnfj?>Myv9+ffRX5(tnRA)K~Y zNzj~1OCUG|u&(>2grp=Q;o2esbt!%j(f{!a5<9$?K($!!I5VV) z#yCoiIq;r$+*H|k%s*;#(ytV@q20$C6q0U6Bn9!Q@%pmWi;TkOQiD#HDx92_m{b+zsFasCKmN#Z(BdfuPsCV zJkpYP!rBov1c5S;Ax-E#_aC2FUzQsF(ARUR21t(S#Ld=;e*{E9>@cAZQ-T=UP1xI?a=@}Y(_sSilf#mntC;9B WekoNa#%fXU>xiMr!TbYfZu}p%6aT~j diff --git a/tests/targets/fill-static.png b/tests/targets/fill-static.png deleted file mode 100644 index d4d53d478cc547ff273465a4b365e5734faaf457..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10559 zcma)CYgkiP);=L}sF;8qs}ewrih^JTg33j}q}~Epr7eP3gmes|4^$Ci0YM<9#dbs@QV z`+VcEdnaAjP!~ZEx+{0v#|WYY|I|X>LE*=6#DB&SWG(8tjpG?XdD79EXY74R`!na0 z6_E+3r|3$eW%8lRB@4Nk_3e)*mj1rr$4q6F!YU`$lv>ATiD}r6mQB}@buK)g&DHWL zVp#E!s45q660Sab$F0c?O%n2%3@*w#&(Y=;2&MZd=VYtkcWgMwfcpZKyqLc8V1@XE z*83gXiA8U3>Un@fi&pvHam{j7FYs+mewY`s#wcylFn#!^nMJWhni!r)=Dg(YxSa0Q zq+O-0?3gG1l;=7h#0a@nY8wi#fepXc)L#;&_OB*vXfm9Pxve#bW=_VZ#8?r74Cy^| zaa@g#=|LT?V-~Sh!spDYCU45~rSX&T=U$n*AEy2rwFuJoEIUg~tvEQ?UA{PuYV&B1 zud<2oK$0-wpa;d^umNkgb#@W%0fuxERdp}3KwePJZ4qW~aVJk(7!RhNTgn$T9Rk*1OKBq zP8}O>)2+6%S8YrmzNj`K3<3+$Zd`1wtRP$%no~0xwHHARAvDXs z<36Acc4)3Jy2?+xONTjT;xX>4Ho<{rfh5!19>0?!*i9Uvw4tl}lqEvd-x*^f8BS1J za26~u`7-G)JEvO>`O;2yOlOhSAd)mmTkA|Bd2Yb)2JbN}kVSNN6Qdu8)78r^2Pb4n zq&v-(fiIzPgn2gOC#^wdiW6$#Y^Dxw8U&Z4v+5wa!|?*KK*FKH=aI0i{vMO%#lyMe zvK|!kc~e<#=Y=c}w7z;JLwxt!54F4IuZuMHI_af8{Y^N%h`y~>_iKR(ae78uS835+ zWQpN5C%b56Br)37Akivls}9JIb01A5QeE8L?@fvL+pbLN`OFJs`1mxDZZ%URw$WOV zv6a~8kWIvN`r^2+&R90-d~k9nG1{^bxWdWT$F4-)L2^YT{PBXrDyQP%MDifaQA1DU zs7YMA5ppD!u;$|LUAJt#kxhm_S1kFP(wP|bxdS#znE~Ii-9~XbVu`cpid%seh}Exk zL0$4FwSU_o^-AXZ^)pI}^NEcbj}DHHSt3UI{(kz2!+GRrpa&%_Iop=VMyU;| z8h2bAXE&%g5urRlY+lFCgY)>(*0<{IyT6Axq8BS-VEy8_UnLbwS1M1D#)FyGbrOCe z+qFA|aN7_~QF+S}Ii^(~MHP3dovAPce{63K{f(V-if|EsuV{2&FU8z=Djcb2Gt8+0 zygM{cWRr1O#RKD9Gii0JdaUBV^7dTvVcIzd1X(Jli=(0FY#C(({`q&tnEB=dboNPqbvC^)Odsl=378DYIiX%7vQeU$$x&#iY+`X-GVf8k(6v`hQ>shg z(Czk-bl;OCh*;tQnrs4WSX7a2=XvCFwGA$i7%rT1XFcRigs&jL57@FluVPgp-Om1% zxtUp5Ho5+DK(|# zB{XdyQX&tP!Sz?DEZ-pg#cpk0bB%QD&V>;&2P=VOF4KKSbV~&OGsg2xs17f37so9S zKbqvYMG-r3QB@@zel|ge)AJ&$u!K=uVsj@*tI8m*z$d+^ciH8c02ZDX`i5oA&K6VZ zSUWghJ0V(c&D2ZMUq#RR^d~KAWtXB%%#9*?3aKHixgA{_H1FfGGx(ZWLf>!*=vVhb zJ9s&jYA28V0c$Q_IJSs8UZh4(Aj7x(=uDBmRda5HEN5eI_CH8?Z;g)4_lTUGCvH5c)Ti92?NBz9zab@qyWs z_la#r4S=yvUx-52Kd~f-45g zW9NCkp6#72YoFi^Szi!yw6jtxWC&4oBHRg*mR%rx-^IT_G4Indyd7j+shJA=5qU2` zgNb5?Qe?PK`U07w4@$MHs~0M!ncP4Uvd^F<8_|4P^a}+$amWfpHZpIDx%q4s3P>1P zOBA}cyX@MMAZ?zQBQ+3;Wn`n&3u(Hlm&rVLt2d z$BKc37Mv#3t&ZP%;pYD9L`~-(pfY-oLIaDgJgB|Rk?cxyp$6_doL0EoI;R|mhowP6 z_!(Vx&HtBIVO;~8anG8%IF5d1{lkqPDR<$vpF~-m8GskP?X?U3Ay`A;<>CWCM)ksg zX{K8^?n5tIgCQswr(42fXNmx;;4>6_s&}9^_^P}VxBUc--&pR6pvw{x7zRq;nGN7- zkPp4?fB&khs7aQspMg(quyucj1)`llF#USTOZbzUQ-r7Qkdd?`9MZzcm|Y;h=jyS*yuhu*d&qLm8oDDEmjBTpSe8%?1K<2|N09cKfKgo0rBn$pi0N5g$ zYps5gU_aW$jZw%g;g(wqSab)IC$gU0RE}HFoInxPd#%(?K^z_OM zSAun1Y}0xJ7sqMGn}>b1+mURW=IEr11DRnr_EOS>=_NVh`>U#;VMryjue??93cFb z2e*;-xb?02`_%-VXq^`I9Y)QM^==Ach#Z=uP3Se0wueJ-W?j-8AvmwsB*kITSnE&7 zd;gf;jJ%$1kB{Zam*LsaOXp8JTOtc+A3fH;BG4hWb%4|jp%kWX;U3W^hyLJw2i@pb z*|YO4_jkV>qFlE!q=sWN#!8tk4tP8p%c8yD~fD3cbEf z?Z>ZQ>4D6k8wV)+f+dAs>>PE+a2&7#H}H}gZV;K!9cVAe0_L6?DOb71vIB>`LnpiC z(;}^cE{}jpiCZ|?zK%lhb(r-NB5?~@GS1OjoZPh~VhtkR_-C%bYR0n)d#X>^4c+Q1 zqSTF4%MNz}Aez@z>2^CvBj9*qi7_MI2e@ThJJbIW&V^Zxp)zN{v-pA-O^po#Tk zCwG6J6HamP83fKQw(-su zc_X?PL(EhV&}{oNHFVg+p1I0?PkWK=;H9dLJzc0ZXm|QOl<-&EZ@i`ns9h&D{8jYCZ4{@g7$a$BRX!5z7|~`s zD6hoxrV`?KS%*C`y@1()U03+tqEiD0DCWZ&ka$pQ*?|++SVP8(e=A3Y z7rqvUEZWF)g_Z|f1E!rfyvwS9Xr-NK;pmj*YnwwKsUapzf8IP`iD+M$9lQTT;|Fl2 zXGZ~0IKNfB)-bvM<~@@`ZNE!4H~4!Y(>uh!lD#fNIu3w?I?$`*Q+9QR^i`F@;nLw_ z$arV(z(Q^;gG>;8(KNk!jp)2Hh>m!r9cz?i)mZ_?wk%XF*fzeG$W)eiBY5&#J+Bs; zI;SJ4%4K5#9&e#8It4Wkss044S<%MmtET+ai{65o^DW)8MfbX3ISvPBs`Av>=dkD- z)kRezXP`a{PWmEFn#Go95kzT9_0dp65^cpTNn79mZ&nwL1DYM@NDGFv9d@eIF%Q%6 zaKz$^DFDLayl9a8qED|}{(bf<0_`u*#;GXv?UWQ5-nXZJ)_h4-3I$?;!I<%`SJcHY zXkgYXOK)V@E8Fqh8bjqKZ#lIMyf9#FK@yZ0c6%~)%?6T*KYi#lebYk zlAI6cf6ygu4UxZ8+ZrK!uXiinhQ$}6p$&OX;ojCsaUnCA#@7Q(n2M4dv{n;6S!omd z{-?L0#7`oo52$Wg>f1Hz44nV9POUwl`L?PE&QCENV|;vahdTZ@!6uPDw^mOqaG8le zpGH+0zva|B*i6c!N(y&C z4ZqOuz$GgWmmZSHUGSVLL**R`XV~g;oT?Ma9#u0%X)Sbs?-u*odK|&&2QR~_1qP+B6!+(-rBpgZTm^Zm?aJarZlUmcc3P> z;O_gvw&!+eIvka~%i*ZCd_PgrlY|-_f8j4eL9Bxej>^1dY-e!feRW++1mV`0W^q@K zyC3g{+S(-L4L9MaBF>|G6xUv&Uj(vCfSs6JheJ%cBe9dJfjz!gV+CyOgJ7!;r{0Eo zt_AOMS>hLVJ7NJg^_};AE6wx%OFT9~eEh4W-8^{{kxq(z)FaLs8HM@N1&Ty8 zWmT5QbqiTfR?+vn=YgaH?`^GgulwYMfF;(f($Yv&em^t=?EN6P^k{+HPmT1+BT%RG zzn+|LIz{%4GS=Y(r7eK7H*1Wc-wBJ)`oi_N#K1RiSwS)Ryvb))LEK-krB(}--bAXD z{wi@+oP@~Fp)&TwhL&QzSx69?{lfZuFGjwShG(MlBWmD6b1r%8kLgM!HqkR@=)mCoU<8QF5w_EV|zb199|+v>3;V=C2%tWL-69!X4NClz~Z>WrpGuGWT>vk z6lo>pZXK`}&id)P7S)Iaa<<@CD;8RO@DI zemajEND|vKaLfX|y)6rV6qsRP@u55Zk^o(mK`@i$#m*igWqU`k`K$P~z4JaP!*ouN z+~v;vbzlsSdhVvy$_z5ITEKy?ssUcsJ$fw6nCkDP5u9@}%oxnZA#mUlgDZ{8w<-0o z-+LL{@T8|;%p3GcpWh@C(m5Ve8^M8T5fQ9ogV{wGU~)facI>Hz?w00gz_7I@g-aUW z4{Ux#=ivv4`q#{%!?Ci!=3l?Bi{>QD)`881XN3Z92FU2vgCYF(E^Z*%F3f%>I6y1= zAptG`Z_ps6nW(%nAQ+74q9)y>nr4uXMvuXPuWEW8;YiL9Y2*pmWx>ry zWi@WZliNn$@%Fa8-nO@^@eLhfg2R!16HI)QPFc$m%U1P5 zm$tr1DDN$9$vt2)o!DtMmk#{2T?P_{cS$_V4V>PcKcv&je{Wp9bInWBuRDy zyI4u;hMMJ@aT{r9#z%8~a&{bST(nPRpG$lX!^#p04*7ue@+N^(8jNOmw?Ly7Y|Z!C zB9$*AyShMFk;+xsW)t57vEVilGrKHfjF$yA>ND$_#By8Q#zr*bfTnUr(@-!A6NQ4M zZJ20NCkZ&qb|>^tmUy;eA+TZm3xfY@zDqi+_Nd9&9X~QTx@9y z(0aQ34OB)u#w%x#TUf>!O`gKKCA|Y93(5$U6IN`{t$y&%#|Ai4_00a_U%4y<#_Hc7Xz#dGWgEwYps#OQxvbABcj70bYRfv3QH9SnS%gXzJ7w-uM z3j@1y2oj9K+AICIzNw{bOpPoz6dcoh!X5#Pzp9o_7sigrYF;aR>ka diff --git a/tests/targets/font-1.png b/tests/targets/font-1.png deleted file mode 100644 index b375fcb7e46d6889c880d562bbfb1093b2bf9cbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22301 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 diff --git a/tests/targets/font-2.png b/tests/targets/font-2.png deleted file mode 100644 index d63925a16332604b3e2f4c19a0eb02c0a3739e37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21105 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 nLj(C3!qLzmCp1pEJowN2PEygAbP0l+XkKlV~Nk diff --git a/tests/targets/gif.gif b/tests/targets/gif.gif deleted file mode 100644 index a86713c6bdb84e62358d1cc92f88d9b0ef45e317..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 400688 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 z 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 diff --git a/tests/targets/invert-hue.png b/tests/targets/invert-hue.png deleted file mode 100644 index 60924781d8d84ecbf274400e07d8d1ee1332263b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10289 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 cQbs0aryTprD*rf_MEv{gla_uf5DlnbN~PV diff --git a/tests/targets/invert-hueshift.png b/tests/targets/invert-hueshift.png deleted file mode 100644 index 3e973629420b28b40ed06950d6d656e4bb4df9fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7927 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 diff --git a/tests/targets/invert-saturation.png b/tests/targets/invert-saturation.png deleted file mode 100644 index b11dfe2764ee917da2d02a259028b2a8ffc68e41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8641 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 diff --git a/tests/targets/invert.png b/tests/targets/invert.png deleted file mode 100644 index d4b247e14a33f056b6f9650cdbd758ec73ca9769..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7927 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 N%f@XR($=$2{68Quy4C;y diff --git a/tests/targets/issues.png b/tests/targets/issues.png deleted file mode 100644 index edea0ef7473d0c412510a6e55aee583630514da8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2511 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 diff --git a/tests/targets/readme.png b/tests/targets/readme.png deleted file mode 100644 index 2261a2dae48cc75763a8c89883fa95784559e281..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254532 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�*&T~s0EOni7??)xqK}1vznl!!aBef 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 diff --git a/tests/targets/resize.png b/tests/targets/resize.png deleted file mode 100644 index 5138335175fa65d2bd47db55245c3868b49d6fe1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJHcuDFkP61P*C&cMCy2CttUgy@ zA;Z^x_#v1|lxRbs58wW<2Yx&Be)9V{)$c0bw4GD5{pj8)mz@!?!l_AIk0ZA7zDHnk zh)z(6#)req>MzgD&@b9DW8sV+ITIc>OB?TL;NF3W4jg3tcJ4E;>%}h}6F6NYfi7b3 MboFyt=akR{08>y)Bme*a diff --git a/tests/targets/rotate-180.png b/tests/targets/rotate-180.png deleted file mode 100644 index 7cd167d7cae3b5a49397678f454840a21cf1a186..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1119 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrU{UjQaSW+od^=Y#JS|YdZT{A# z1O*N@B%-k~0R$8{nsA|Ov(mrqpYiqX*2H%CJNK&JS^lH@zk%uX2G-pL495%DrWY`O|G={TgZQsoUpU`AWYc@d z)Ax{}ERp+KB5U12Bb|dxXAbiC9AxP!owI+k0qVJ^5JLvvHpzbQu1H}l2Tp7k7 zcLuJ5{tmCy8=MOGCRnjA5SYWV%#TTvC7f~PYM@kVg4M6n2X^r+nf8@Ir|~O;4T~+q z`er!?eu2<}Ra|K%1^No5`ar$L8l}b^P6g%$rREcy3al+;-@bjYOZLt&8wXKGHm4|N z#U3`brbEF7Ler!;7Ym3ub}g8}VI(NxyFksr?NFNt=jx3G%Pi(`XNWq6vQ!$hCpopu0aNK#ePe4n0I=d8H14JC11s%8g$~4caWr}tU5Op-`TEYQxfdr?qkQm4X za(rJ4GC~fndcYIFdcEvp?jHRGT?+a=8G8+yE*_9}j&c=fUBD5<;wrcVOp3TpP|C02y|u_C?JF#)tVM@USV+q zhFT9W>}D{|;i<~LRSq=&&g>>hpo`d?Zh;*wc;(&a&JE5S%1xk{1-i|F|A6{I@5Mh< zcJP=8OcJz}_;ldcf5|TlJ!z7UbLRowovqN~1db!66Jmz54rDMb23mB?XTi(^GdN9v zHoaku+4yZgtF6N=Pl@&yjKBnt3yJisT*1Q`pwK+(F+)iM53hU)`6juBq_~#K3(QN{ zoHST~8dj(^RS4$@9{v>%3WbRV%83_QvY1R8&v3sHI<_aFMLAJ=&EM@0>nj`Trv`Zj VWf#Ah2`o4mJYD@<);T3K0RUL^sy+Y! diff --git a/tests/targets/rotate-45-noresize.png b/tests/targets/rotate-45-noresize.png deleted file mode 100644 index aa00020ad67b36b4ca053d5b5b1c72aceac19da3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2226 zcmYjTdpuO@8eW!_StgfRhTKxqnp{G%DV$x*OlI7Y)TWJ747qe6cAb>OTvQh0GATtV zl5D3NV$1$**VygRs7TXJXJ;x@irO;~liT@5=a2Kp`qumVz0dP}&-Ic;VYllaq6oSwcUp6b~h{o7O{oOl&5A}Ii5?z&?zpq_q|rcv(Mx*pAk3w;r30P<%rOr)<#gqw)bkiGGe^cKf(&*%b-h00Vmc}t&SCjB6Oh7O( z)@8%t$;eym85t8cT$0$dc;fV$Uwx8Im04w82o7_Q6Wh)VX7(>yFIk?3DoC#&;r{zL|&+>W2?WMfVZ{IpJS=XIL z!5q;)nX-J7JUrdxq?ng8>`ulsGLkfdW@{A4>p!@Lst)^46gHxB_d(#qK~f)4dR%)b zzqaX$nt6vM+d_M=B3-NU6r)QSz+|_9<^(fDjl@(+k>{L_biJ-x%(Z?p=)m0cyd4oC zakVM23|EPAqt?{Vt(z8Ra}M^;!zE>ZnVX@xMB*`&qp zr3z~&$Qa$t08NxCrbR&<>ZJ zjFE74AGTFS8P~>7;@6B7-dsp^`2JcHYp?K?wXO(uCt4RBJ;g&5nmwIpLs72_*J69* zqO)A=O{88d*UTysz6b2+Y#jKLT4kGL}A67;Lh@9&Cn}%Dz7hAOqZFf zT=5ptfgD<_5ayHxbVlgyl*luu_U~qaM$|Ken}%IS!gFQ z)=f`idJFYAg>^$Oj6vOzIaR9pZCLY?y(rf+o_hUlH$-LSqHM&Lt(LNfr*m(p$J@wO zSfm|hAehbj#U0E)x5;i?Ob$&WiAMF2z;|fWA!f14!u~b`W4@vjGS+_VSp-^Uh;{ml zHz8kKVVliBZLK>zP10Z^Is3}*$&Dgs$d*+Bavl&253M=7Pc! zFiET`eAcz%`79Fn9*weMPJR55^o61ph%DE?b=w;)Gr&6E^RvxMwMVt#Du1N*``vDE zYBpqR#Og+LIowAWa~LOz%RZu`9JnePSa@P2X!e5&b7_~0xzglGzYVDuAskK*HE7oC z8nEKu_XZabL(g;z-?kjhpnlg*!@_HdB|w~%Oy$Ck#v=Pr-=HJW|t zm`I}R7kVvAO89CwPY3dDYWYXNIBni-)JeFy@XJxSZ@D(uIsJU1r}OM3U>KDC(r%jZ*hq4>z67 z$8OvliCaLaPeXeg{KGjJE-Z=23w?=hfUNPr0xa5Legnn|!=g*pH$I&a$v|@}!cSlL z2_CUiE#p(Mm7mZ5l~YH^3qNVNVXR@g#I3NY?wEdC7Mg7&cu*r}=$>}e*yTv>a6~2; z!yD?{zeWPy6$ep*aC-u^{tb6)Y-(^RAZ%r~2`>A^o5UtFbGs&?r5q$CpH}Dj{Nh3` z@G0u_q3^{15+YjNmA!f25@%5-^KA!*Q=vRuSne(EuTq`@Rz zJEWT0FW`FoG&c*H#0I zI5@wwR#)AH#4)OdGWBtRdaHJip~F9~0ssS`w{wql5-LIH%=9?PVbxn-8{z1-Pzhtr y+<$mh6jn00vKo|Qyy_&R|Im7g+ylNj`_Pzc6*N57T;l-#MIc{J0Q=TPuJFG@Bd3x8 diff --git a/tests/targets/rotate-45.png b/tests/targets/rotate-45.png deleted file mode 100644 index 9fd95f5f203cc1d2aadf3fe8e04162a87c2ea274..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3544 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 r.arrayBuffer())); const instance = new WebAssembly.Instance(module); wasm = instance.exports; @@ -95,4 +93,4 @@ module.exports = { free(id) { wasm.free(id); } -} \ No newline at end of file +} diff --git a/utils/wasm/gif.js b/utils/wasm/gif.js index d7dfa9d..51f8455 100644 --- a/utils/wasm/gif.js +++ b/utils/wasm/gif.js @@ -1,6 +1,4 @@ -const {join} = require('path'); -const {promises: {readFile}} = require('fs'); - +const {version} = require('../../package.json'); let wasm; let cachedTextDecoder = new TextDecoder('utf-8', {ignoreBOM: true, fatal: true}); @@ -54,12 +52,12 @@ class GIFEncoder { */ static async initialize(width, height, repeat) { if (!wasm) { - const module = new WebAssembly.Module(await readFile(join(__dirname, './gif.wasm'))); + const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(r => r.arrayBuffer())); const instance = new WebAssembly.Instance(module, { __wbindgen_placeholder__: { __wbindgen_throw: function (arg0, arg1) { throw new Error(getStringFromWasm0(arg0, arg1)); - }, + } } }); wasm = instance.exports; @@ -102,4 +100,4 @@ class GIFEncoder { } } -module.exports = {GIFEncoder}; \ No newline at end of file +module.exports = {GIFEncoder}; diff --git a/utils/wasm/jpeg.js b/utils/wasm/jpeg.js index e905621..bdf6ef1 100644 --- a/utils/wasm/jpeg.js +++ b/utils/wasm/jpeg.js @@ -1,6 +1,4 @@ -const {join} = require('path'); -const {promises: {readFile}} = require('fs'); - +const {version} = require('../../package.json'); let wasm; let cachegetUint8Memory0 = null; @@ -49,7 +47,7 @@ function getArrayU16FromWasm0(ptr, len) { async function initWASM() { if (wasm) return; - const module = new WebAssembly.Module(await readFile(join(__dirname, './jpeg.wasm'))); + const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(r => r.arrayBuffer())); const instance = new WebAssembly.Instance(module); wasm = instance.exports; } @@ -134,4 +132,4 @@ module.exports = { free(id) { wasm.free(id); } -} \ No newline at end of file +} diff --git a/utils/wasm/svg.js b/utils/wasm/svg.js index 6966e93..c683f1e 100644 --- a/utils/wasm/svg.js +++ b/utils/wasm/svg.js @@ -1,6 +1,4 @@ -const {readFile} = require('fs').promises; -const {join} = require('path'); - +const {version} = require('../../package.json'); let wasm; let WASM_VECTOR_LEN = 0; @@ -106,7 +104,7 @@ module.exports = { */ async rgba(ptr, svg, fit_kind, zoom, width, height) { if (!wasm) { - const module = new WebAssembly.Module(await readFile(join(__dirname, './svg.wasm'))); + const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(r => r.arrayBuffer())); const instance = new WebAssembly.Instance(module); wasm = instance.exports; } @@ -156,4 +154,4 @@ module.exports = { free(id) { wasm.free(id); } -}; \ No newline at end of file +}; diff --git a/utils/wasm/tiff.js b/utils/wasm/tiff.js index 3ffdc59..2f0d867 100644 --- a/utils/wasm/tiff.js +++ b/utils/wasm/tiff.js @@ -1,6 +1,4 @@ -const {readFile} = require('fs').promises; -const {join} = require('path'); - +const {version} = require('../../package.json'); let wasm; let cachegetUint8Memory0 = null; @@ -55,7 +53,7 @@ module.exports = { */ async decode(ptr, buffer) { if (!wasm) { - const module = new WebAssembly.Module(await readFile(join(__dirname, './tiff.wasm'))); + const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(r => r.arrayBuffer())); const instance = new WebAssembly.Instance(module); wasm = instance.exports; } @@ -105,4 +103,4 @@ module.exports = { free(id) { wasm.free(id); } -} \ No newline at end of file +} diff --git a/utils/wasm/zlib.js b/utils/wasm/zlib.js index c763626..3f24e9d 100644 --- a/utils/wasm/zlib.js +++ b/utils/wasm/zlib.js @@ -1,11 +1,9 @@ -const {join} = require('path'); -const {promises: {readFile}} = require('fs'); - +const {version} = require('../../package.json'); async function load() { let wasm; { - const module = new WebAssembly.Module(await readFile(join(__dirname, './zlib.wasm'))); + const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(r => r.arrayBuffer())); const instance = new WebAssembly.Instance(module); wasm = instance.exports; @@ -70,4 +68,4 @@ module.exports = { return decompress(buffer, limit); } -}; \ No newline at end of file +}; diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..5ac4a94 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,12 @@ +const path = require('path'); + +module.exports = { + entry: './ImageScript.js', + output: { + library: 'ImageScript', + libraryTarget: 'var', + path: path.resolve('./browser'), + filename: 'ImageScript.js' + }, + devtool: 'source-map' +}; From b0262bad3bd8718e1cb1585c5e1c1e20c8257759 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Thu, 7 Jan 2021 15:34:41 +0100 Subject: [PATCH 002/120] fix build --- .github/workflows/webpack.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/webpack.yml b/.github/workflows/webpack.yml index 73a6cfb..0d7faa0 100644 --- a/.github/workflows/webpack.yml +++ b/.github/workflows/webpack.yml @@ -21,7 +21,7 @@ jobs: uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} - - run: npm i --global webpack + - run: npm i --global webpack webpack-cli - run: npm run build - run: git config --local user.name "github-actions[bot]" - run: git config --local user.email "github-actions[bot]@users.noreply.github.com" From 39c089a652e4897129ffbcb6f7b1e19c91038fed Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Thu, 7 Jan 2021 15:36:12 +0100 Subject: [PATCH 003/120] actually fix the build --- .github/workflows/webpack.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/webpack.yml b/.github/workflows/webpack.yml index 0d7faa0..34c3a5d 100644 --- a/.github/workflows/webpack.yml +++ b/.github/workflows/webpack.yml @@ -25,5 +25,6 @@ jobs: - run: npm run build - run: git config --local user.name "github-actions[bot]" - run: git config --local user.email "github-actions[bot]@users.noreply.github.com" - - run: git commit -m "Update bundle" -a + - run: git add -A + - run: git commit -m "Update bundle" - run: git push From 14dd2040d540e2822244a7f815a4bd59bb203d7a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 7 Jan 2021 14:36:44 +0000 Subject: [PATCH 004/120] Update bundle --- browser/ImageScript.js | 2 ++ browser/ImageScript.js.map | 1 + 2 files changed, 3 insertions(+) create mode 100644 browser/ImageScript.js create mode 100644 browser/ImageScript.js.map diff --git a/browser/ImageScript.js b/browser/ImageScript.js new file mode 100644 index 0000000..76f1c4a --- /dev/null +++ b/browser/ImageScript.js @@ -0,0 +1,2 @@ +var ImageScript;ImageScript=(()=>{var t={655:(t,e,r)=>{const n=r(347),i=r(723),s=r(876),o=r(327),a=r(76),h=r(667);class _{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,n){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&n)>>>0}static rgbToColor(t,e,r){return _.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,n){let i,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),n=Math.min(1,Math.max(0,n)),0===e)i=s=o=r;else{const n=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;i=n(h,a,t+1/3),s=n(h,a,t),o=n(h,a,t-1/3)}return _.rgbaToColor(255*i,255*s,255*o,255*n)}static hslToColor(t,e,r){return _.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,n){t/=255,e/=255,r/=255;const i=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(i+s)/2;if(i===s)o=a=0;else{const n=i-s;switch(a=h>.5?n/(2-i-s):n/(i+s),i){case t:o=(e-r)/n+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return _.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${_.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${_.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${_.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${_.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let n=1;n<=this.width;n++)this.__view__.setUint32(e,t(n,r),!1),e+=4}return this}clone(){const t=_.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=_.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.resize(this.width*t,this.height*t,e)}resize(t,e,r=_.RESIZE_NEAREST_NEIGHBOR){if(t===_.RESIZE_AUTO&&e===_.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===_.RESIZE_AUTO?t=this.width/this.height*e:e===_.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");if(r===_.RESIZE_NEAREST_NEIGHBOR)return this.__resize_nearest_neighbor__(t,e);throw new Error("Invalid resize mode")}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let n=0;nthis.width&&(r=this.width),n>this.height&&(n=this.height),this.__apply__(this.__crop__(t,e,r,n))}__crop__(t,e,r,n){t=~~t,e=~~e;const i=new this.constructor(r,n);for(let s=0;sthis.width||o>this.height)continue;const a=i(n,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,n,i){t<0&&(r+=t,t=1),e<0&&(n+=e,e=1);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),i);const a=4*(s+e*this.width),h=4*(t+e*this.width);let _=Math.max(Math.min(e+n,this.height),1);for(;e<--_;)this.bitmap.copyWithin(4*(t+_*this.width),h,a);return this}drawCircle(t,e,r,n){const i=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let n=r;n{const[i,s,o,a]=_.rgbaToHSLA(...this.getRGBAAt(r,n));return _.hslaToColor(i,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,n)=>{const[i,s,o,a]=_.rgbaToHSLA(...this.getRGBAAt(r,n));return _.hslaToColor(i,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let n=0;n=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+i*this.width),a=t.__view__.getUint32(4*(r+n*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,_.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,n=r+1,i=256-r;return(255&n*(t>>>24)+i*(e>>>24)>>8)<<24|(255&n*(t>>16&255)+i*(e>>16&255)>>8)<<16|(255&n*(t>>8&255)+i*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[n,i,s,o]=_.rgbaToHSLA(..._.colorToRGBA(r));this.__set_pixel__(t,e,_.hslaToColor(n,i,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[n,i,s,o]=_.rgbaToHSLA(..._.colorToRGBA(r));this.__set_pixel__(t,e,_.hslaToColor(n,1-i,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[n,i,s,o]=_.rgbaToHSLA(..._.colorToRGBA(r));this.__set_pixel__(t,e,_.hslaToColor(1-n,i,s,o))}return this}hueShift(t){for(const[e,r,n]of this.iterateWithColors()){const[i,s,o,a]=_.rgbaToHSLA(..._.colorToRGBA(n));this.__set_pixel__(e,r,_.hslaToColor(i+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const n=new Array(262143);for(let i=0;i~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;n[l]=(n[l]||0)+1}let i=-1,s=0;if(n.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return _.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),n=Math.sin(r),i=Math.cos(r),s=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.width,o=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.height,a=_.new(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,u=this.height/2-.5;let c=0;do{let t=0;const e=f-n*(c-l),r=u+i*(c-l);do{const s=e+i*(t-h),o=r+n*(t-h);_.__interpolate__(this,a,t,c,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),n=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>n[0];if(2===r.length){const t=this.__gradient__(n[0],n[1]);return e=>e<=r[0]?n[0]:e>=r[1]?n[1]:t((e-r[0])/(r[1]-r[0]))}const i=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=i)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const n=(r-t)**2;for(let i=1;i<=t;i++)n+(i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const n=(r-t)**2;for(let i=this.height-t;i<=this.height;i++)n+(this.height-i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const n=(this.width-r-t)**2;for(let i=1;i<=t;i++)n+(i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const n=(this.width-r-t)**2;for(let i=this.height-t;i<=this.height;i++)n+(this.height-i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,n=t>>16&255,i=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-n,h=(e>>8&255)-i,_=(255&e)-s;return t=>(255&r+t*o)<<24|(255&n+t*a)<<16|(255&i+t*h)<<8|255&s+t*_}async encode(t=1){return await n.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){t=Math.max(1,Math.min(100,t));const e=new this.constructor(this.width,this.height);return e.fill(255),e.composite(this),o.encode(this.width,this.height,t,e.bitmap)}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),2303741511===r.getUint32(0,!1)){const{width:r,height:i,pixels:s}=await n.decode(t);e=new this(r,i),e.bitmap.set(s)}else if(r.getUint32(0,!1)>>>8==16767231){if(1===await o.decode(0,t,0,0))throw new Error("Failed decoding JPEG image");const[r,n,i]=o.meta(0);e=new this(n,i);const s=o.buffer(0);if(o.free(0),0===r){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"!=typeof t&&(t=t.toString());const n=await s.rgba(0,t,r,e,e,e);if(1===n)throw new Error("Failed parsing SVG");if(2===n)throw new Error("Failed rendering SVG");const i=new this(...s.meta(0));return i.bitmap.set(s.buffer(0)),s.free(0),i}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,r,n=4294967295,s=1/0,o=this.WRAP_STYLE_WORD){const[a,h,l,f]=_.colorToRGBA(n);await i.load(0,t,e),i.render(0,0,e,a,h,l,r,s===1/0?null:s,o);const u=i.buffer(0),[c,w]=i.meta(0);i.free(0);const g=new this(c,w);return g.bitmap.set(u),g.opacity(f/255),g}}class l extends _{constructor(t,e,r=100){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof _))throw new TypeError("Invalid image passed");const r=new l(t.width,t.height,e);return r.bitmap.set(t.bitmap),r}}t.exports={Image:_,GIF:class extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof l))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){const e=await h.GIFEncoder.initialize(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof l))throw new Error("GIF contains invalid frames");e.add(~~(r.duration/10),t,r.bitmap)}const r=e.buffer();return e.free(),r}},Frame:l}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.14","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let r=0;for(const n of t)e.set(n,r),r+=n.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,n=4294967295;for(;r>>8,n=e[255&(n^t[r++])]^n>>>8,n=e[255&(n^t[r++])]^n>>>8,n=e[255&(n^t[r++])]^n>>>8;for(;r>>8;return(4294967295^n)>>>0}},347:(t,e,r)=>{const n=r(883),i=r(354),{compress:s,decompress:o}=r(423),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),l=n(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:r,channels:i,depth:o=8,level:c=0}){let w=0,g=0;const b=e*i,d=new Uint8Array(r+t.length);for(;w>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,n,i){let s=0;if(0===r){for(;s{const{version:n}=r(306);let i,s,o,a;const h=new TextEncoder;function _(){return i.buffer===a.memory.buffer?i:i=new Uint8Array(a.memory.buffer)}function l(){return s.buffer===a.memory.buffer?s:s=new Int32Array(a.memory.buffer)}t.exports={render(t,e,r,n,i,s,o,l,f=!1){const u=function(t){let e=0,r=t.length,n=a.__wbindgen_malloc(t.length);const i=_();for(;r>e;){const r=t.charCodeAt(e);if(r>127)break;i[n+e++]=r}return e!==r&&(0!==e&&(t=t.substring(e)),n=a.__wbindgen_realloc(n,r,r=e+3*t.length),e+=h.encodeInto(t,_().subarray(n+e,n+r)).written),[n,e]}(o);a.render(t,e,r,n,i,s,u[0],u[1],!(null==l),l||0,f)},buffer(t){a.buffer(8,t);const e=l(),r=(n=e[2],i=e[3],_().subarray(n,n+i)).slice();var n,i;return a.__wbindgen_free(e[2],e[3]),r},meta(t){a.meta(8,t);const e=l(),r=(n=e[2],i=e[3],(o.buffer===a.memory.buffer?o:o=new Uint32Array(a.memory.buffer)).subarray(n/4,n/4+i)).slice();var n,i;return a.__wbindgen_free(e[2],4*e[3]),r},async load(t,e,r=128){if(!a){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/font.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);a=e.exports,i=new Uint8Array(a.memory.buffer),s=new Int32Array(a.memory.buffer),o=new Uint32Array(a.memory.buffer)}a.load(t,function(t){const e=a.__wbindgen_malloc(t.length);return _().set(t,e),e}(e),e.length,r)},free(t){a.free(t)}}},667:(t,e,r)=>{const{version:n}=r(306);let i,s=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});s.decode();let o=null;function a(){return null!==o&&o.buffer===i.memory.buffer||(o=new Uint8Array(i.memory.buffer)),o}let h=null;function _(){return null!==h&&h.buffer===i.memory.buffer||(h=new Int32Array(i.memory.buffer)),h}let l=0;class f{free(){i.__wbg_gif_encoder_free(this.ptr)}static async initialize(t,e,r){if(!i){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/gif.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t,{__wbindgen_placeholder__:{__wbindgen_throw:function(t,e){throw new Error((r=t,n=e,s.decode(a().subarray(r,r+n))));var r,n}}});i=e.exports}const o=i.gif_encoder_new(t,e,r);return new f(o)}constructor(t){this.ptr=t}buffer(){try{const r=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=r,i.gif_encoder_buffer(r,this.ptr);const n=_()[r/4],s=_()[r/4+1],o=(t=n,e=s,a().subarray(t/1,t/1+e)).slice();return i.__wbindgen_free(n,1*s),o}finally{i.__wbindgen_export_0.value+=16}var t,e}add(t,e,r){const n=function(t,e){const r=e(1*t.length);return a().set(t,r/1),l=t.length,r}(r,i.__wbindgen_malloc);i.gif_encoder_add(this.ptr,t,e,n,l)}}t.exports={GIFEncoder:f}},327:(t,e,r)=>{const{version:n}=r(306);let i,s=null;function o(){return null!==s&&s.buffer===i.memory.buffer||(s=new Uint8Array(i.memory.buffer)),s}let a=0;function h(t,e){const r=e(1*t.length);return o().set(t,r/1),a=t.length,r}let _=null;function l(){return null!==_&&_.buffer===i.memory.buffer||(_=new Int32Array(i.memory.buffer)),_}function f(t,e){return o().subarray(t/1,t/1+e)}let u=null;async function c(){if(i)return;const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/jpeg.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);i=e.exports}t.exports={async encode(t,e,r,n){await c();try{const s=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=s;const o=h(n,i.__wbindgen_malloc);i.encode(s,t,e,r,o,a);const _=l()[s/4],u=l()[s/4+1],c=f(_,u).slice();return i.__wbindgen_free(_,1*u),c}finally{i.__wbindgen_export_0.value+=16}},async decode(t,e,r,n){await c();const s=h(e,i.__wbindgen_malloc);return i.decode(t,s,a,r,n)},meta(t){try{const n=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=n,i.meta(n,t);const s=l()[n/4],o=l()[n/4+1],a=(e=s,r=o,(null!==u&&u.buffer===i.memory.buffer||(u=new Uint16Array(i.memory.buffer)),u).subarray(e/2,e/2+r)).slice();return i.__wbindgen_free(s,2*o),a}finally{i.__wbindgen_export_0.value+=16}var e,r},buffer(t){try{const e=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=e,i.buffer(e,t);const r=l()[e/4],n=l()[e/4+1],s=f(r,n).slice();return i.__wbindgen_free(r,1*n),s}finally{i.__wbindgen_export_0.value+=16}},free(t){i.free(t)}}},876:(t,e,r)=>{const{version:n}=r(306);let i,s=0,o=null;function a(){return null!==o&&o.buffer===i.memory.buffer||(o=new Uint8Array(i.memory.buffer)),o}let h=new TextEncoder;const _="function"==typeof h.encodeInto?function(t,e){return h.encodeInto(t,e)}:function(t,e){const r=h.encode(t);return e.set(r),{read:t.length,written:r.length}};let l=null;function f(){return null!==l&&l.buffer===i.memory.buffer||(l=new Int32Array(i.memory.buffer)),l}let u=null;t.exports={async rgba(t,e,r,o,h,l){if(!i){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/svg.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);i=e.exports}const f=function(t,e,r){if(void 0===r){const r=(new TextEncoder).encode(t),n=e(r.length);return a().subarray(n,n+r.length).set(r),s=r.length,n}let n=t.length,i=e(n);const o=a();let h=0;for(;h127)break;o[i+h]=e}if(h!==n){0!==h&&(t=t.slice(h)),i=r(i,n,n=h+3*t.length);const e=a().subarray(i+h,i+n);h+=_(t,e).written}return s=h,i}(e,i.__wbindgen_malloc,i.__wbindgen_realloc);return i.rgba(t,f,s,r,o,h,l)},meta(t){try{const n=i.__wbindgen_export_2.value-16;i.__wbindgen_export_2.value=n,i.meta(n,t);const s=f()[n/4],o=f()[n/4+1],a=(e=s,r=o,(null!==u&&u.buffer===i.memory.buffer||(u=new Uint32Array(i.memory.buffer)),u).subarray(e/4,e/4+r)).slice();return i.__wbindgen_free(s,4*o),a}finally{i.__wbindgen_export_2.value+=16}var e,r},buffer(t){try{const n=i.__wbindgen_export_2.value-16;i.__wbindgen_export_2.value=n,i.buffer(n,t);const s=f()[n/4],o=f()[n/4+1],h=(e=s,r=o,a().subarray(e,e+r)).slice();return i.__wbindgen_free(s,o),h}finally{i.__wbindgen_export_2.value+=16}var e,r},free(t){i.free(t)}}},76:(t,e,r)=>{const{version:n}=r(306);let i,s=null;function o(){return null!==s&&s.buffer===i.memory.buffer||(s=new Uint8Array(i.memory.buffer)),s}let a=0,h=null;function _(){return null!==h&&h.buffer===i.memory.buffer||(h=new Int32Array(i.memory.buffer)),h}let l=null;t.exports={async decode(t,e){if(!i){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/tiff.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);i=e.exports}const r=function(t,e){const r=e(1*t.length);return o().set(t,r/1),a=t.length,r}(e,i.__wbindgen_malloc);return i.decode(t,r,a)},meta(t){try{const n=i.__wbindgen_export_1.value-16;i.__wbindgen_export_1.value=n,i.meta(n,t);const s=_()[n/4],o=_()[n/4+1],a=(e=s,r=o,(null!==l&&l.buffer===i.memory.buffer||(l=new Uint32Array(i.memory.buffer)),l).subarray(e/4,e/4+r)).slice();return i.__wbindgen_free(s,4*o),a}finally{i.__wbindgen_export_1.value+=16}var e,r},buffer(t){try{const n=i.__wbindgen_export_1.value-16;i.__wbindgen_export_1.value=n,i.buffer(n,t);const s=_()[n/4],a=_()[n/4+1],h=(e=s,r=a,o().subarray(e/1,e/1+r)).slice();return i.__wbindgen_free(s,1*a),h}finally{i.__wbindgen_export_1.value+=16}var e,r},free(t){i.free(t)}}},423:(t,e,r)=>{const{version:n}=r(306);async function i(){let t;{const e=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/zlib.wasm`).then((t=>t.arrayBuffer()))),r=new WebAssembly.Instance(e);t=r.exports}let e=new Uint8Array(t.memory.buffer),r=new Int32Array(t.memory.buffer);function i(){return e.buffer===t.memory.buffer?e:e=new Uint8Array(t.memory.buffer)}function s(){return r.buffer===t.memory.buffer?r:r=new Int32Array(t.memory.buffer)}function o(t,e){return i().subarray(t,t+e)}function a(e){const r=t.__wbindgen_malloc(e.length);return i().set(e,r),r}return{compress(e,r){const n=a(e);t.compress(8,n,e.length,r);const i=s(),h=o(i[2],i[3]).slice();return t.__wbindgen_free(i[2],i[3]),h},decompress(e,r){const n=a(e);try{t.decompress(8,n,e.length,r);const i=s(),a=o(i[2],i[3]).slice();return t.__wbindgen_free(i[2],i[3]),a}catch{throw t.__wbindgen_free(n,e.length),new Error("zlib: panic")}}}}t.exports={async compress(e,r){const{compress:n}=t.exports=await i();return n(e,r)},async decompress(e,r){const{decompress:n}=t.exports=await i();return n(e,r)}}}},e={};return function r(n){if(e[n])return e[n].exports;var i=e[n]={exports:{}};return t[n](i,i.exports,r),i.exports}(655)})(); +//# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map new file mode 100644 index 0000000..7aca92c --- /dev/null +++ b/browser/ImageScript.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","resize","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__apply__","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","jpegCanvas","composite","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","pixelType","meta","free","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","toString","status","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","load","render","Frame","duration","super","frame","module","exports","GIF","frames","loopCount","indexOf","reduce","acc","encoder","GIFEncoder","initialize","add","encoded","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","0","6","bytespp","p_offset","c_offset","chunks","palette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","u8array_ref","i32array_ref","u32array_ref","wasm","utf8encoder","TextEncoder","u8array","memory","i32array","Int32Array","ptr","id","max_width","wrap_style","str","string","len","__wbindgen_malloc","u8","code","charCodeAt","substring","__wbindgen_realloc","encodeInto","written","string_to_ptr","i32","__wbindgen_free","WebAssembly","Module","fetch","then","arrayBuffer","instance","Instance","u8array_to_ptr","cachedTextDecoder","TextDecoder","ignoreBOM","fatal","cachegetUint8Memory0","getUint8Memory0","cachegetInt32Memory0","getInt32Memory0","WASM_VECTOR_LEN","__wbg_gif_encoder_free","repeat","__wbindgen_placeholder__","__wbindgen_throw","arg0","arg1","ret","gif_encoder_new","retptr","__wbindgen_export_0","gif_encoder_buffer","r0","r1","v0","delay","ptr0","arg","malloc","passArray8ToWasm0","gif_encoder_add","getArrayU8FromWasm0","cachegetUint16Memory0","async","initWASM","v1","Uint16Array","cachedTextEncoder","encodeString","buf","read","cachegetUint32Memory0","fit_kind","zoom","realloc","mem","passStringToWasm0","__wbindgen_export_2","__wbindgen_export_1","ptr_to_u8array","limit","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32((~~y - 1) * this.width + (~~x - 1), false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.resize(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n return this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n this.__apply__(image);\n\n return this;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n quality = Math.max(1, Math.min(100, quality));\n const jpegCanvas = new this.constructor(this.width, this.height);\n jpegCanvas.fill(0xff);\n jpegCanvas.composite(this);\n return jpeglib.encode(this.width, this.height, quality, jpegCanvas.bitmap);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n const status = await jpeglib.decode(0, data, 0, 0);\n if (status === 1) throw new Error('Failed decoding JPEG image');\n const [pixelType, width, height] = jpeglib.meta(0);\n image = new this(width, height);\n const buffer = jpeglib.buffer(0);\n jpeglib.free(0);\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n const status = await tifflib.decode(0, data);\n if (status === 1) throw new Error('Failed decoding TIFF image');\n const meta = tifflib.meta(0);\n const buffer = tifflib.buffer(0);\n tifflib.free(0);\n\n image = new this(...meta);\n image.bitmap.set(buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg !== 'string')\n svg = svg.toString();\n\n const status = await svglib.rgba(0, svg, mode, size, size, size);\n if (status === 1) throw new Error('Failed parsing SVG');\n if (status === 2) throw new Error('Failed rendering SVG');\n const meta = svglib.meta(0);\n const image = new this(...meta);\n image.bitmap.set(svglib.buffer(0));\n svglib.free(0);\n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n const [r, g, b, a] = Image.colorToRGBA(color);\n await fontlib.load(0, font, scale);\n fontlib.render(0, 0, scale, r, g, b, text, wrapWidth === Infinity ? null : wrapWidth, wrapStyle);\n const buffer = fontlib.buffer(0);\n const [width, height] = fontlib.meta(0);\n fontlib.free(0);\n const image = new this(width, height);\n image.bitmap.set(buffer);\n image.opacity(a / 0xff);\n\n return image;\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n const encoder = await giflib.GIFEncoder.initialize(this.width, this.height, this.loopCount);\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), quality, frame.bitmap);\n }\n\n const encoded = encoder.buffer();\n encoder.free();\n return encoded;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n const compressed = await compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette;\n if (array[25] === 3)\n palette = new Uint32Array(2 ** bpc);\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) {\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n array = await decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (channels === 1 && palette) {\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const {version} = require('../../package.json');\nlet u8array_ref, i32array_ref, u32array_ref, wasm;\n\nconst utf8encoder = new TextEncoder();\n\nfunction u8array() {\n return u8array_ref.buffer === wasm.memory.buffer ? u8array_ref : (u8array_ref = new Uint8Array(wasm.memory.buffer));\n}\n\nfunction i32array() {\n return i32array_ref.buffer === wasm.memory.buffer ? i32array_ref : (i32array_ref = new Int32Array(wasm.memory.buffer));\n}\n\nfunction u32array() {\n return u32array_ref.buffer === wasm.memory.buffer ? u32array_ref : (u32array_ref = new Uint32Array(wasm.memory.buffer));\n}\n\nfunction ptr_to_u8array(ptr, len) {\n return u8array().subarray(ptr, ptr + len);\n}\n\nfunction ptr_to_u32array(ptr, len) {\n return u32array().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction u8array_to_ptr(buffer) {\n const ptr = wasm.__wbindgen_malloc(buffer.length);\n u8array().set(buffer, ptr);\n\n return ptr;\n}\n\nfunction string_to_ptr(string) {\n let offset = 0;\n let len = string.length;\n let ptr = wasm.__wbindgen_malloc(string.length);\n\n const u8 = u8array();\n while (len > offset) {\n const code = string.charCodeAt(offset);\n\n if (code > 0x7F) break;\n u8[ptr + offset++] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) string = string.substring(offset);\n ptr = wasm.__wbindgen_realloc(ptr, len, len = offset + string.length * 3);\n const ret = utf8encoder.encodeInto(string, u8array().subarray(ptr + offset, ptr + len));\n\n offset += ret.written;\n }\n\n return [ptr, offset];\n}\n\nconst nullish = x => x == null;\n\nmodule.exports = {\n render(ptr, id, scale, r, g, b, text, max_width, wrap_style = false) {\n const str = string_to_ptr(text);\n wasm.render(ptr, id, scale, r, g, b, str[0], str[1], !nullish(max_width), max_width || 0, wrap_style);\n },\n buffer(id) {\n wasm.buffer(8, id);\n const i32 = i32array();\n const slice = ptr_to_u8array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], i32[3]);\n\n return slice;\n },\n meta(id) {\n wasm.meta(8, id);\n const i32 = i32array();\n const slice = ptr_to_u32array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], 4 * i32[3]);\n\n return slice;\n },\n async load(id, buffer, scale = 128) {\n if (!wasm) {\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n u8array_ref = new Uint8Array(wasm.memory.buffer);\n i32array_ref = new Int32Array(wasm.memory.buffer);\n u32array_ref = new Uint32Array(wasm.memory.buffer);\n }\n\n wasm.load(id, u8array_to_ptr(buffer), buffer.length, scale);\n },\n free(id) {\n wasm.free(id);\n }\n}\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet cachedTextDecoder = new TextDecoder('utf-8', {ignoreBOM: true, fatal: true});\n\ncachedTextDecoder.decode();\n\nlet cachegetUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n\tif (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n\t}\n\treturn cachegetUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n\treturn cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n\tif (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n\t}\n\treturn cachegetInt32Memory0;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n\treturn getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray8ToWasm0(arg, malloc) {\n\tconst ptr = malloc(arg.length * 1);\n\tgetUint8Memory0().set(arg, ptr / 1);\n\tWASM_VECTOR_LEN = arg.length;\n\treturn ptr;\n}\n\nclass GIFEncoder {\n\tfree() {\n\t\twasm.__wbg_gif_encoder_free(this.ptr);\n\t}\n\n\t/**\n\t * @param {number} width\n\t * @param {number} height\n\t * @param {number} repeat\n\t */\n\tstatic async initialize(width, height, repeat) {\n\t\tif (!wasm) {\n\t\t\tconst module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(r => r.arrayBuffer()));\n\t\t\tconst instance = new WebAssembly.Instance(module, {\n\t\t\t\t__wbindgen_placeholder__: {\n\t\t\t\t\t__wbindgen_throw: function (arg0, arg1) {\n\t\t\t\t\t\tthrow new Error(getStringFromWasm0(arg0, arg1));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\twasm = instance.exports;\n\t\t}\n\n\t\tconst ret = wasm.gif_encoder_new(width, height, repeat);\n\t\treturn new GIFEncoder(ret);\n\t}\n\n\tconstructor(ptr) {\n\t\tthis.ptr = ptr;\n\t}\n\n\t/**\n\t * @returns {Uint8Array}\n\t */\n\tbuffer() {\n\t\ttry {\n\t\t\tconst retptr = wasm.__wbindgen_export_0.value - 16;\n\t\t\twasm.__wbindgen_export_0.value = retptr;\n\t\t\twasm.gif_encoder_buffer(retptr, this.ptr);\n\t\t\tconst r0 = getInt32Memory0()[retptr / 4];\n\t\t\tconst r1 = getInt32Memory0()[retptr / 4 + 1];\n\t\t\tconst v0 = getArrayU8FromWasm0(r0, r1).slice();\n\t\t\twasm.__wbindgen_free(r0, r1 * 1);\n\t\t\treturn v0;\n\t\t} finally {\n\t\t\twasm.__wbindgen_export_0.value += 16;\n\t\t}\n\t}\n\n\t/**\n\t * @param {number} delay\n\t * @param {number} quality\n\t * @param {Uint8Array} buffer\n\t */\n\tadd(delay, quality, buffer) {\n\t\tconst ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n\t\twasm.gif_encoder_add(this.ptr, delay, quality, ptr0, WASM_VECTOR_LEN);\n\t}\n}\n\nmodule.exports = {GIFEncoder};\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet cachegetUint8Memory0 = null;\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1);\n getUint8Memory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachegetUint16Memory0 = null;\n\nfunction getUint16Memory0() {\n if (cachegetUint16Memory0 === null || cachegetUint16Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint16Memory0 = new Uint16Array(wasm.memory.buffer);\n }\n return cachegetUint16Memory0;\n}\n\nfunction getArrayU16FromWasm0(ptr, len) {\n return getUint16Memory0().subarray(ptr / 2, ptr / 2 + len);\n}\n\nasync function initWASM() {\n if (wasm) return;\n\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n wasm = instance.exports;\n}\n\nmodule.exports = {\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} quality\n * @param {Uint8Array|Uint8ClampedArray} buffer\n * @returns {Uint8Array}\n */\n async encode(width, height, quality, buffer) {\n await initWASM();\n\n try {\n const retptr = wasm.__wbindgen_export_0.value - 16;\n wasm.__wbindgen_export_0.value = retptr;\n const ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n wasm.encode(retptr, width, height, quality, ptr0, WASM_VECTOR_LEN);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v1 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 1);\n return v1;\n } finally {\n wasm.__wbindgen_export_0.value += 16;\n }\n },\n /**\n * @param {number} ptr\n * @param {Uint8Array} buffer\n * @param {number} width\n * @param {number} height\n * @returns {number}\n */\n async decode(ptr, buffer, width, height) {\n await initWASM();\n\n const ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n return wasm.decode(ptr, ptr0, WASM_VECTOR_LEN, width, height);\n },\n /**\n * @param {number} id\n * @returns {Uint16Array}\n */\n meta(id) {\n try {\n const retptr = wasm.__wbindgen_export_0.value - 16;\n wasm.__wbindgen_export_0.value = retptr;\n wasm.meta(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU16FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 2);\n return v0;\n } finally {\n wasm.__wbindgen_export_0.value += 16;\n }\n },\n /**\n * @param {number} id\n * @returns {Uint8Array}\n */\n buffer(id) {\n try {\n const retptr = wasm.__wbindgen_export_0.value - 16;\n wasm.__wbindgen_export_0.value = retptr;\n wasm.buffer(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 1);\n return v0;\n } finally {\n wasm.__wbindgen_export_0.value += 16;\n }\n },\n /**\n * @param {number} id\n */\n free(id) {\n wasm.free(id);\n }\n}\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet WASM_VECTOR_LEN = 0;\n\nlet cachegetUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nlet cachedTextEncoder = new TextEncoder();\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n }\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n });\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const textEncoder = new TextEncoder();\n const buf = textEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nlet cachegetUint32Memory0 = null;\n\nfunction getUint32Memory0() {\n if (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer);\n }\n return cachegetUint32Memory0;\n}\n\nfunction getArrayU32FromWasm0(ptr, len) {\n return getUint32Memory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n return getUint8Memory0().subarray(ptr, ptr + len);\n}\n\nmodule.exports = {\n /**\n * @param {number} ptr\n * @param {string} svg\n * @param {number} fit_kind\n * @param {number} zoom\n * @param {number} width\n * @param {number} height\n * @returns {number}\n */\n async rgba(ptr, svg, fit_kind, zoom, width, height) {\n if (!wasm) {\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n wasm = instance.exports;\n }\n\n const ptr0 = passStringToWasm0(svg, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n return wasm.rgba(ptr, ptr0, WASM_VECTOR_LEN, fit_kind, zoom, width, height);\n },\n /**\n * @param {number} id\n * @returns {Uint32Array}\n */\n meta(id) {\n try {\n const retptr = wasm.__wbindgen_export_2.value - 16;\n wasm.__wbindgen_export_2.value = retptr;\n wasm.meta(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU32FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 4);\n return v0;\n } finally {\n wasm.__wbindgen_export_2.value += 16;\n }\n },\n /**\n * @param {number} id\n * @returns {Uint8Array}\n */\n buffer(id) {\n try {\n const retptr = wasm.__wbindgen_export_2.value - 16;\n wasm.__wbindgen_export_2.value = retptr;\n wasm.buffer(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1);\n return v0;\n } finally {\n wasm.__wbindgen_export_2.value += 16;\n }\n },\n /**\n * @param {number} id\n */\n free(id) {\n wasm.free(id);\n }\n};\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet cachegetUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n\tif (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n\t}\n\treturn cachegetUint8Memory0;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray8ToWasm0(arg, malloc) {\n\tconst ptr = malloc(arg.length * 1);\n\tgetUint8Memory0().set(arg, ptr / 1);\n\tWASM_VECTOR_LEN = arg.length;\n\treturn ptr;\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n\tif (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n\t}\n\treturn cachegetInt32Memory0;\n}\n\nlet cachegetUint32Memory0 = null;\n\nfunction getUint32Memory0() {\n\tif (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer);\n\t}\n\treturn cachegetUint32Memory0;\n}\n\nfunction getArrayU32FromWasm0(ptr, len) {\n\treturn getUint32Memory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n\treturn getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nmodule.exports = {\n\t/**\n\t * @param {number} ptr\n\t * @param {Uint8Array} buffer\n\t * @returns {number}\n\t */\n\tasync decode(ptr, buffer) {\n\t\tif (!wasm) {\n\t\t\tconst module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(r => r.arrayBuffer()));\n\t\t\tconst instance = new WebAssembly.Instance(module);\n\t\t\twasm = instance.exports;\n\t\t}\n\n\t\tconst ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n\t\treturn wasm.decode(ptr, ptr0, WASM_VECTOR_LEN);\n\t},\n\t/**\n\t * @param {number} id\n\t * @returns {Uint32Array}\n\t */\n\tmeta(id) {\n\t\ttry {\n\t\t\tconst retptr = wasm.__wbindgen_export_1.value - 16;\n\t\t\twasm.__wbindgen_export_1.value = retptr;\n\t\t\twasm.meta(retptr, id);\n\t\t\tconst r0 = getInt32Memory0()[retptr / 4];\n\t\t\tconst r1 = getInt32Memory0()[retptr / 4 + 1];\n\t\t\tconst v0 = getArrayU32FromWasm0(r0, r1).slice();\n\t\t\twasm.__wbindgen_free(r0, r1 * 4);\n\t\t\treturn v0;\n\t\t} finally {\n\t\t\twasm.__wbindgen_export_1.value += 16;\n\t\t}\n\t},\n\t/**\n\t * @param {number} id\n\t * @returns {Uint8Array}\n\t */\n\tbuffer(id) {\n\t\ttry {\n\t\t\tconst retptr = wasm.__wbindgen_export_1.value - 16;\n\t\t\twasm.__wbindgen_export_1.value = retptr;\n\t\t\twasm.buffer(retptr, id);\n\t\t\tconst r0 = getInt32Memory0()[retptr / 4];\n\t\t\tconst r1 = getInt32Memory0()[retptr / 4 + 1];\n\t\t\tconst v0 = getArrayU8FromWasm0(r0, r1).slice();\n\t\t\twasm.__wbindgen_free(r0, r1 * 1);\n\t\t\treturn v0;\n\t\t} finally {\n\t\t\twasm.__wbindgen_export_1.value += 16;\n\t\t}\n\t},\n\t/**\n\t * @param {number} id\n\t */\n\tfree(id) {\n\t\twasm.free(id);\n\t}\n}\n","const {version} = require('../../package.json');\nasync function load() {\n let wasm;\n\n {\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n }\n\n let u8array_ref = new Uint8Array(wasm.memory.buffer);\n let i32array_ref = new Int32Array(wasm.memory.buffer);\n\n function u8array() {\n return u8array_ref.buffer === wasm.memory.buffer ? u8array_ref : (u8array_ref = new Uint8Array(wasm.memory.buffer));\n }\n\n function i32array() {\n return i32array_ref.buffer === wasm.memory.buffer ? i32array_ref : (i32array_ref = new Int32Array(wasm.memory.buffer));\n }\n\n function ptr_to_u8array(ptr, len) {\n return u8array().subarray(ptr, ptr + len);\n }\n\n function u8array_to_ptr(buffer) {\n const ptr = wasm.__wbindgen_malloc(buffer.length);\n u8array().set(buffer, ptr);\n return ptr;\n }\n\n return {\n compress(buffer, level) {\n const ptr = u8array_to_ptr(buffer);\n wasm.compress(8, ptr, buffer.length, level);\n\n const i32 = i32array();\n const slice = ptr_to_u8array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], i32[3]);\n return slice;\n }, decompress(buffer, limit) {\n const ptr = u8array_to_ptr(buffer);\n\n try {\n wasm.decompress(8, ptr, buffer.length, limit);\n\n const i32 = i32array();\n const slice = ptr_to_u8array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], i32[3]);\n return slice;\n } catch {\n wasm.__wbindgen_free(ptr, buffer.length);\n throw new Error('zlib: panic');\n }\n }\n };\n}\n\nmodule.exports = {\n async compress(buffer, level) {\n const {compress} = module.exports = await load();\n\n return compress(buffer, level);\n },\n async decompress(buffer, limit) {\n const {decompress} = module.exports = await load();\n\n return decompress(buffer, limit);\n }\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file From eb1aa5a7809930d4db64ea2bf2e6b03c00bad2b2 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Thu, 7 Jan 2021 15:44:00 +0100 Subject: [PATCH 005/120] change lib target to umd --- example/index.html | 1 + webpack.config.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/example/index.html b/example/index.html index 78b44e3..0d5f6fa 100644 --- a/example/index.html +++ b/example/index.html @@ -8,6 +8,7 @@

ImageScript example

display)

You can find more examples on GitHub

ImageScript Example Result + diff --git a/webpack.config.js b/webpack.config.js index 5ac4a94..40d4491 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -4,7 +4,7 @@ module.exports = { entry: './ImageScript.js', output: { library: 'ImageScript', - libraryTarget: 'var', + libraryTarget: 'umd', path: path.resolve('./browser'), filename: 'ImageScript.js' }, From cac4b77d995ab2200b387ad7846db1534c549429 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 7 Jan 2021 14:44:53 +0000 Subject: [PATCH 006/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index 76f1c4a..b9dfcff 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -var ImageScript;ImageScript=(()=>{var t={655:(t,e,r)=>{const n=r(347),i=r(723),s=r(876),o=r(327),a=r(76),h=r(667);class _{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,n){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&n)>>>0}static rgbToColor(t,e,r){return _.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,n){let i,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),n=Math.min(1,Math.max(0,n)),0===e)i=s=o=r;else{const n=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;i=n(h,a,t+1/3),s=n(h,a,t),o=n(h,a,t-1/3)}return _.rgbaToColor(255*i,255*s,255*o,255*n)}static hslToColor(t,e,r){return _.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,n){t/=255,e/=255,r/=255;const i=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(i+s)/2;if(i===s)o=a=0;else{const n=i-s;switch(a=h>.5?n/(2-i-s):n/(i+s),i){case t:o=(e-r)/n+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return _.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${_.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${_.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${_.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${_.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let n=1;n<=this.width;n++)this.__view__.setUint32(e,t(n,r),!1),e+=4}return this}clone(){const t=_.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=_.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.resize(this.width*t,this.height*t,e)}resize(t,e,r=_.RESIZE_NEAREST_NEIGHBOR){if(t===_.RESIZE_AUTO&&e===_.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===_.RESIZE_AUTO?t=this.width/this.height*e:e===_.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");if(r===_.RESIZE_NEAREST_NEIGHBOR)return this.__resize_nearest_neighbor__(t,e);throw new Error("Invalid resize mode")}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let n=0;nthis.width&&(r=this.width),n>this.height&&(n=this.height),this.__apply__(this.__crop__(t,e,r,n))}__crop__(t,e,r,n){t=~~t,e=~~e;const i=new this.constructor(r,n);for(let s=0;sthis.width||o>this.height)continue;const a=i(n,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,n,i){t<0&&(r+=t,t=1),e<0&&(n+=e,e=1);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),i);const a=4*(s+e*this.width),h=4*(t+e*this.width);let _=Math.max(Math.min(e+n,this.height),1);for(;e<--_;)this.bitmap.copyWithin(4*(t+_*this.width),h,a);return this}drawCircle(t,e,r,n){const i=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let n=r;n{const[i,s,o,a]=_.rgbaToHSLA(...this.getRGBAAt(r,n));return _.hslaToColor(i,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,n)=>{const[i,s,o,a]=_.rgbaToHSLA(...this.getRGBAAt(r,n));return _.hslaToColor(i,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let n=0;n=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+i*this.width),a=t.__view__.getUint32(4*(r+n*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,_.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,n=r+1,i=256-r;return(255&n*(t>>>24)+i*(e>>>24)>>8)<<24|(255&n*(t>>16&255)+i*(e>>16&255)>>8)<<16|(255&n*(t>>8&255)+i*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[n,i,s,o]=_.rgbaToHSLA(..._.colorToRGBA(r));this.__set_pixel__(t,e,_.hslaToColor(n,i,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[n,i,s,o]=_.rgbaToHSLA(..._.colorToRGBA(r));this.__set_pixel__(t,e,_.hslaToColor(n,1-i,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[n,i,s,o]=_.rgbaToHSLA(..._.colorToRGBA(r));this.__set_pixel__(t,e,_.hslaToColor(1-n,i,s,o))}return this}hueShift(t){for(const[e,r,n]of this.iterateWithColors()){const[i,s,o,a]=_.rgbaToHSLA(..._.colorToRGBA(n));this.__set_pixel__(e,r,_.hslaToColor(i+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const n=new Array(262143);for(let i=0;i~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;n[l]=(n[l]||0)+1}let i=-1,s=0;if(n.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return _.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),n=Math.sin(r),i=Math.cos(r),s=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.width,o=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.height,a=_.new(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,u=this.height/2-.5;let c=0;do{let t=0;const e=f-n*(c-l),r=u+i*(c-l);do{const s=e+i*(t-h),o=r+n*(t-h);_.__interpolate__(this,a,t,c,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),n=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>n[0];if(2===r.length){const t=this.__gradient__(n[0],n[1]);return e=>e<=r[0]?n[0]:e>=r[1]?n[1]:t((e-r[0])/(r[1]-r[0]))}const i=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=i)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const n=(r-t)**2;for(let i=1;i<=t;i++)n+(i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const n=(r-t)**2;for(let i=this.height-t;i<=this.height;i++)n+(this.height-i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const n=(this.width-r-t)**2;for(let i=1;i<=t;i++)n+(i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const n=(this.width-r-t)**2;for(let i=this.height-t;i<=this.height;i++)n+(this.height-i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,n=t>>16&255,i=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-n,h=(e>>8&255)-i,_=(255&e)-s;return t=>(255&r+t*o)<<24|(255&n+t*a)<<16|(255&i+t*h)<<8|255&s+t*_}async encode(t=1){return await n.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){t=Math.max(1,Math.min(100,t));const e=new this.constructor(this.width,this.height);return e.fill(255),e.composite(this),o.encode(this.width,this.height,t,e.bitmap)}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),2303741511===r.getUint32(0,!1)){const{width:r,height:i,pixels:s}=await n.decode(t);e=new this(r,i),e.bitmap.set(s)}else if(r.getUint32(0,!1)>>>8==16767231){if(1===await o.decode(0,t,0,0))throw new Error("Failed decoding JPEG image");const[r,n,i]=o.meta(0);e=new this(n,i);const s=o.buffer(0);if(o.free(0),0===r){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"!=typeof t&&(t=t.toString());const n=await s.rgba(0,t,r,e,e,e);if(1===n)throw new Error("Failed parsing SVG");if(2===n)throw new Error("Failed rendering SVG");const i=new this(...s.meta(0));return i.bitmap.set(s.buffer(0)),s.free(0),i}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,r,n=4294967295,s=1/0,o=this.WRAP_STYLE_WORD){const[a,h,l,f]=_.colorToRGBA(n);await i.load(0,t,e),i.render(0,0,e,a,h,l,r,s===1/0?null:s,o);const u=i.buffer(0),[c,w]=i.meta(0);i.free(0);const g=new this(c,w);return g.bitmap.set(u),g.opacity(f/255),g}}class l extends _{constructor(t,e,r=100){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof _))throw new TypeError("Invalid image passed");const r=new l(t.width,t.height,e);return r.bitmap.set(t.bitmap),r}}t.exports={Image:_,GIF:class extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof l))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){const e=await h.GIFEncoder.initialize(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof l))throw new Error("GIF contains invalid frames");e.add(~~(r.duration/10),t,r.bitmap)}const r=e.buffer();return e.free(),r}},Frame:l}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.14","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let r=0;for(const n of t)e.set(n,r),r+=n.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,n=4294967295;for(;r>>8,n=e[255&(n^t[r++])]^n>>>8,n=e[255&(n^t[r++])]^n>>>8,n=e[255&(n^t[r++])]^n>>>8;for(;r>>8;return(4294967295^n)>>>0}},347:(t,e,r)=>{const n=r(883),i=r(354),{compress:s,decompress:o}=r(423),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),l=n(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:r,channels:i,depth:o=8,level:c=0}){let w=0,g=0;const b=e*i,d=new Uint8Array(r+t.length);for(;w>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,n,i){let s=0;if(0===r){for(;s{const{version:n}=r(306);let i,s,o,a;const h=new TextEncoder;function _(){return i.buffer===a.memory.buffer?i:i=new Uint8Array(a.memory.buffer)}function l(){return s.buffer===a.memory.buffer?s:s=new Int32Array(a.memory.buffer)}t.exports={render(t,e,r,n,i,s,o,l,f=!1){const u=function(t){let e=0,r=t.length,n=a.__wbindgen_malloc(t.length);const i=_();for(;r>e;){const r=t.charCodeAt(e);if(r>127)break;i[n+e++]=r}return e!==r&&(0!==e&&(t=t.substring(e)),n=a.__wbindgen_realloc(n,r,r=e+3*t.length),e+=h.encodeInto(t,_().subarray(n+e,n+r)).written),[n,e]}(o);a.render(t,e,r,n,i,s,u[0],u[1],!(null==l),l||0,f)},buffer(t){a.buffer(8,t);const e=l(),r=(n=e[2],i=e[3],_().subarray(n,n+i)).slice();var n,i;return a.__wbindgen_free(e[2],e[3]),r},meta(t){a.meta(8,t);const e=l(),r=(n=e[2],i=e[3],(o.buffer===a.memory.buffer?o:o=new Uint32Array(a.memory.buffer)).subarray(n/4,n/4+i)).slice();var n,i;return a.__wbindgen_free(e[2],4*e[3]),r},async load(t,e,r=128){if(!a){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/font.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);a=e.exports,i=new Uint8Array(a.memory.buffer),s=new Int32Array(a.memory.buffer),o=new Uint32Array(a.memory.buffer)}a.load(t,function(t){const e=a.__wbindgen_malloc(t.length);return _().set(t,e),e}(e),e.length,r)},free(t){a.free(t)}}},667:(t,e,r)=>{const{version:n}=r(306);let i,s=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});s.decode();let o=null;function a(){return null!==o&&o.buffer===i.memory.buffer||(o=new Uint8Array(i.memory.buffer)),o}let h=null;function _(){return null!==h&&h.buffer===i.memory.buffer||(h=new Int32Array(i.memory.buffer)),h}let l=0;class f{free(){i.__wbg_gif_encoder_free(this.ptr)}static async initialize(t,e,r){if(!i){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/gif.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t,{__wbindgen_placeholder__:{__wbindgen_throw:function(t,e){throw new Error((r=t,n=e,s.decode(a().subarray(r,r+n))));var r,n}}});i=e.exports}const o=i.gif_encoder_new(t,e,r);return new f(o)}constructor(t){this.ptr=t}buffer(){try{const r=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=r,i.gif_encoder_buffer(r,this.ptr);const n=_()[r/4],s=_()[r/4+1],o=(t=n,e=s,a().subarray(t/1,t/1+e)).slice();return i.__wbindgen_free(n,1*s),o}finally{i.__wbindgen_export_0.value+=16}var t,e}add(t,e,r){const n=function(t,e){const r=e(1*t.length);return a().set(t,r/1),l=t.length,r}(r,i.__wbindgen_malloc);i.gif_encoder_add(this.ptr,t,e,n,l)}}t.exports={GIFEncoder:f}},327:(t,e,r)=>{const{version:n}=r(306);let i,s=null;function o(){return null!==s&&s.buffer===i.memory.buffer||(s=new Uint8Array(i.memory.buffer)),s}let a=0;function h(t,e){const r=e(1*t.length);return o().set(t,r/1),a=t.length,r}let _=null;function l(){return null!==_&&_.buffer===i.memory.buffer||(_=new Int32Array(i.memory.buffer)),_}function f(t,e){return o().subarray(t/1,t/1+e)}let u=null;async function c(){if(i)return;const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/jpeg.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);i=e.exports}t.exports={async encode(t,e,r,n){await c();try{const s=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=s;const o=h(n,i.__wbindgen_malloc);i.encode(s,t,e,r,o,a);const _=l()[s/4],u=l()[s/4+1],c=f(_,u).slice();return i.__wbindgen_free(_,1*u),c}finally{i.__wbindgen_export_0.value+=16}},async decode(t,e,r,n){await c();const s=h(e,i.__wbindgen_malloc);return i.decode(t,s,a,r,n)},meta(t){try{const n=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=n,i.meta(n,t);const s=l()[n/4],o=l()[n/4+1],a=(e=s,r=o,(null!==u&&u.buffer===i.memory.buffer||(u=new Uint16Array(i.memory.buffer)),u).subarray(e/2,e/2+r)).slice();return i.__wbindgen_free(s,2*o),a}finally{i.__wbindgen_export_0.value+=16}var e,r},buffer(t){try{const e=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=e,i.buffer(e,t);const r=l()[e/4],n=l()[e/4+1],s=f(r,n).slice();return i.__wbindgen_free(r,1*n),s}finally{i.__wbindgen_export_0.value+=16}},free(t){i.free(t)}}},876:(t,e,r)=>{const{version:n}=r(306);let i,s=0,o=null;function a(){return null!==o&&o.buffer===i.memory.buffer||(o=new Uint8Array(i.memory.buffer)),o}let h=new TextEncoder;const _="function"==typeof h.encodeInto?function(t,e){return h.encodeInto(t,e)}:function(t,e){const r=h.encode(t);return e.set(r),{read:t.length,written:r.length}};let l=null;function f(){return null!==l&&l.buffer===i.memory.buffer||(l=new Int32Array(i.memory.buffer)),l}let u=null;t.exports={async rgba(t,e,r,o,h,l){if(!i){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/svg.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);i=e.exports}const f=function(t,e,r){if(void 0===r){const r=(new TextEncoder).encode(t),n=e(r.length);return a().subarray(n,n+r.length).set(r),s=r.length,n}let n=t.length,i=e(n);const o=a();let h=0;for(;h127)break;o[i+h]=e}if(h!==n){0!==h&&(t=t.slice(h)),i=r(i,n,n=h+3*t.length);const e=a().subarray(i+h,i+n);h+=_(t,e).written}return s=h,i}(e,i.__wbindgen_malloc,i.__wbindgen_realloc);return i.rgba(t,f,s,r,o,h,l)},meta(t){try{const n=i.__wbindgen_export_2.value-16;i.__wbindgen_export_2.value=n,i.meta(n,t);const s=f()[n/4],o=f()[n/4+1],a=(e=s,r=o,(null!==u&&u.buffer===i.memory.buffer||(u=new Uint32Array(i.memory.buffer)),u).subarray(e/4,e/4+r)).slice();return i.__wbindgen_free(s,4*o),a}finally{i.__wbindgen_export_2.value+=16}var e,r},buffer(t){try{const n=i.__wbindgen_export_2.value-16;i.__wbindgen_export_2.value=n,i.buffer(n,t);const s=f()[n/4],o=f()[n/4+1],h=(e=s,r=o,a().subarray(e,e+r)).slice();return i.__wbindgen_free(s,o),h}finally{i.__wbindgen_export_2.value+=16}var e,r},free(t){i.free(t)}}},76:(t,e,r)=>{const{version:n}=r(306);let i,s=null;function o(){return null!==s&&s.buffer===i.memory.buffer||(s=new Uint8Array(i.memory.buffer)),s}let a=0,h=null;function _(){return null!==h&&h.buffer===i.memory.buffer||(h=new Int32Array(i.memory.buffer)),h}let l=null;t.exports={async decode(t,e){if(!i){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/tiff.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);i=e.exports}const r=function(t,e){const r=e(1*t.length);return o().set(t,r/1),a=t.length,r}(e,i.__wbindgen_malloc);return i.decode(t,r,a)},meta(t){try{const n=i.__wbindgen_export_1.value-16;i.__wbindgen_export_1.value=n,i.meta(n,t);const s=_()[n/4],o=_()[n/4+1],a=(e=s,r=o,(null!==l&&l.buffer===i.memory.buffer||(l=new Uint32Array(i.memory.buffer)),l).subarray(e/4,e/4+r)).slice();return i.__wbindgen_free(s,4*o),a}finally{i.__wbindgen_export_1.value+=16}var e,r},buffer(t){try{const n=i.__wbindgen_export_1.value-16;i.__wbindgen_export_1.value=n,i.buffer(n,t);const s=_()[n/4],a=_()[n/4+1],h=(e=s,r=a,o().subarray(e/1,e/1+r)).slice();return i.__wbindgen_free(s,1*a),h}finally{i.__wbindgen_export_1.value+=16}var e,r},free(t){i.free(t)}}},423:(t,e,r)=>{const{version:n}=r(306);async function i(){let t;{const e=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/zlib.wasm`).then((t=>t.arrayBuffer()))),r=new WebAssembly.Instance(e);t=r.exports}let e=new Uint8Array(t.memory.buffer),r=new Int32Array(t.memory.buffer);function i(){return e.buffer===t.memory.buffer?e:e=new Uint8Array(t.memory.buffer)}function s(){return r.buffer===t.memory.buffer?r:r=new Int32Array(t.memory.buffer)}function o(t,e){return i().subarray(t,t+e)}function a(e){const r=t.__wbindgen_malloc(e.length);return i().set(e,r),r}return{compress(e,r){const n=a(e);t.compress(8,n,e.length,r);const i=s(),h=o(i[2],i[3]).slice();return t.__wbindgen_free(i[2],i[3]),h},decompress(e,r){const n=a(e);try{t.decompress(8,n,e.length,r);const i=s(),a=o(i[2],i[3]).slice();return t.__wbindgen_free(i[2],i[3]),a}catch{throw t.__wbindgen_free(n,e.length),new Error("zlib: panic")}}}}t.exports={async compress(e,r){const{compress:n}=t.exports=await i();return n(e,r)},async decompress(e,r){const{decompress:n}=t.exports=await i();return n(e,r)}}}},e={};return function r(n){if(e[n])return e[n].exports;var i=e[n]={exports:{}};return t[n](i,i.exports,r),i.exports}(655)})(); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const n=r(347),i=r(723),s=r(876),o=r(327),a=r(76),h=r(667);class _{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,n){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&n)>>>0}static rgbToColor(t,e,r){return _.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,n){let i,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),n=Math.min(1,Math.max(0,n)),0===e)i=s=o=r;else{const n=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;i=n(h,a,t+1/3),s=n(h,a,t),o=n(h,a,t-1/3)}return _.rgbaToColor(255*i,255*s,255*o,255*n)}static hslToColor(t,e,r){return _.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,n){t/=255,e/=255,r/=255;const i=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(i+s)/2;if(i===s)o=a=0;else{const n=i-s;switch(a=h>.5?n/(2-i-s):n/(i+s),i){case t:o=(e-r)/n+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return _.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${_.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${_.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${_.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${_.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let n=1;n<=this.width;n++)this.__view__.setUint32(e,t(n,r),!1),e+=4}return this}clone(){const t=_.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=_.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.resize(this.width*t,this.height*t,e)}resize(t,e,r=_.RESIZE_NEAREST_NEIGHBOR){if(t===_.RESIZE_AUTO&&e===_.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===_.RESIZE_AUTO?t=this.width/this.height*e:e===_.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");if(r===_.RESIZE_NEAREST_NEIGHBOR)return this.__resize_nearest_neighbor__(t,e);throw new Error("Invalid resize mode")}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let n=0;nthis.width&&(r=this.width),n>this.height&&(n=this.height),this.__apply__(this.__crop__(t,e,r,n))}__crop__(t,e,r,n){t=~~t,e=~~e;const i=new this.constructor(r,n);for(let s=0;sthis.width||o>this.height)continue;const a=i(n,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,n,i){t<0&&(r+=t,t=1),e<0&&(n+=e,e=1);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),i);const a=4*(s+e*this.width),h=4*(t+e*this.width);let _=Math.max(Math.min(e+n,this.height),1);for(;e<--_;)this.bitmap.copyWithin(4*(t+_*this.width),h,a);return this}drawCircle(t,e,r,n){const i=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let n=r;n{const[i,s,o,a]=_.rgbaToHSLA(...this.getRGBAAt(r,n));return _.hslaToColor(i,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,n)=>{const[i,s,o,a]=_.rgbaToHSLA(...this.getRGBAAt(r,n));return _.hslaToColor(i,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let n=0;n=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+i*this.width),a=t.__view__.getUint32(4*(r+n*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,_.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,n=r+1,i=256-r;return(255&n*(t>>>24)+i*(e>>>24)>>8)<<24|(255&n*(t>>16&255)+i*(e>>16&255)>>8)<<16|(255&n*(t>>8&255)+i*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[n,i,s,o]=_.rgbaToHSLA(..._.colorToRGBA(r));this.__set_pixel__(t,e,_.hslaToColor(n,i,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[n,i,s,o]=_.rgbaToHSLA(..._.colorToRGBA(r));this.__set_pixel__(t,e,_.hslaToColor(n,1-i,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[n,i,s,o]=_.rgbaToHSLA(..._.colorToRGBA(r));this.__set_pixel__(t,e,_.hslaToColor(1-n,i,s,o))}return this}hueShift(t){for(const[e,r,n]of this.iterateWithColors()){const[i,s,o,a]=_.rgbaToHSLA(..._.colorToRGBA(n));this.__set_pixel__(e,r,_.hslaToColor(i+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const n=new Array(262143);for(let i=0;i~~(63*t)));if(t&&h63-r)continue;const f=o<<12|a<<6|h;n[f]=(n[f]||0)+1}let i=-1,s=0;if(n.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return _.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),n=Math.sin(r),i=Math.cos(r),s=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.width,o=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.height,a=_.new(s,o),h=s/2-.5,f=o/2-.5,l=this.width/2-.5,u=this.height/2-.5;let c=0;do{let t=0;const e=l-n*(c-f),r=u+i*(c-f);do{const s=e+i*(t-h),o=r+n*(t-h);_.__interpolate__(this,a,t,c,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),n=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>n[0];if(2===r.length){const t=this.__gradient__(n[0],n[1]);return e=>e<=r[0]?n[0]:e>=r[1]?n[1]:t((e-r[0])/(r[1]-r[0]))}const i=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=i)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const n=(r-t)**2;for(let i=1;i<=t;i++)n+(i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const n=(r-t)**2;for(let i=this.height-t;i<=this.height;i++)n+(this.height-i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const n=(this.width-r-t)**2;for(let i=1;i<=t;i++)n+(i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const n=(this.width-r-t)**2;for(let i=this.height-t;i<=this.height;i++)n+(this.height-i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,n=t>>16&255,i=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-n,h=(e>>8&255)-i,_=(255&e)-s;return t=>(255&r+t*o)<<24|(255&n+t*a)<<16|(255&i+t*h)<<8|255&s+t*_}async encode(t=1){return await n.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){t=Math.max(1,Math.min(100,t));const e=new this.constructor(this.width,this.height);return e.fill(255),e.composite(this),o.encode(this.width,this.height,t,e.bitmap)}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),2303741511===r.getUint32(0,!1)){const{width:r,height:i,pixels:s}=await n.decode(t);e=new this(r,i),e.bitmap.set(s)}else if(r.getUint32(0,!1)>>>8==16767231){if(1===await o.decode(0,t,0,0))throw new Error("Failed decoding JPEG image");const[r,n,i]=o.meta(0);e=new this(n,i);const s=o.buffer(0);if(o.free(0),0===r){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"!=typeof t&&(t=t.toString());const n=await s.rgba(0,t,r,e,e,e);if(1===n)throw new Error("Failed parsing SVG");if(2===n)throw new Error("Failed rendering SVG");const i=new this(...s.meta(0));return i.bitmap.set(s.buffer(0)),s.free(0),i}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,r,n=4294967295,s=1/0,o=this.WRAP_STYLE_WORD){const[a,h,f,l]=_.colorToRGBA(n);await i.load(0,t,e),i.render(0,0,e,a,h,f,r,s===1/0?null:s,o);const u=i.buffer(0),[c,w]=i.meta(0);i.free(0);const g=new this(c,w);return g.bitmap.set(u),g.opacity(l/255),g}}class f extends _{constructor(t,e,r=100){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof _))throw new TypeError("Invalid image passed");const r=new f(t.width,t.height,e);return r.bitmap.set(t.bitmap),r}}t.exports={Image:_,GIF:class extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof f))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){const e=await h.GIFEncoder.initialize(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof f))throw new Error("GIF contains invalid frames");e.add(~~(r.duration/10),t,r.bitmap)}const r=e.buffer();return e.free(),r}},Frame:f}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.14","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let r=0;for(const n of t)e.set(n,r),r+=n.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,n=4294967295;for(;r>>8,n=e[255&(n^t[r++])]^n>>>8,n=e[255&(n^t[r++])]^n>>>8,n=e[255&(n^t[r++])]^n>>>8;for(;r>>8;return(4294967295^n)>>>0}},347:(t,e,r)=>{const n=r(883),i=r(354),{compress:s,decompress:o}=r(423),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),l=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:r,channels:i,depth:o=8,level:c=0}){let w=0,g=0;const b=e*i,d=new Uint8Array(r+t.length);for(;w>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,n,i){let s=0;if(0===r){for(;s{const{version:n}=r(306);let i,s,o,a;const h=new TextEncoder;function _(){return i.buffer===a.memory.buffer?i:i=new Uint8Array(a.memory.buffer)}function f(){return s.buffer===a.memory.buffer?s:s=new Int32Array(a.memory.buffer)}t.exports={render(t,e,r,n,i,s,o,f,l=!1){const u=function(t){let e=0,r=t.length,n=a.__wbindgen_malloc(t.length);const i=_();for(;r>e;){const r=t.charCodeAt(e);if(r>127)break;i[n+e++]=r}return e!==r&&(0!==e&&(t=t.substring(e)),n=a.__wbindgen_realloc(n,r,r=e+3*t.length),e+=h.encodeInto(t,_().subarray(n+e,n+r)).written),[n,e]}(o);a.render(t,e,r,n,i,s,u[0],u[1],!(null==f),f||0,l)},buffer(t){a.buffer(8,t);const e=f(),r=(n=e[2],i=e[3],_().subarray(n,n+i)).slice();var n,i;return a.__wbindgen_free(e[2],e[3]),r},meta(t){a.meta(8,t);const e=f(),r=(n=e[2],i=e[3],(o.buffer===a.memory.buffer?o:o=new Uint32Array(a.memory.buffer)).subarray(n/4,n/4+i)).slice();var n,i;return a.__wbindgen_free(e[2],4*e[3]),r},async load(t,e,r=128){if(!a){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/font.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);a=e.exports,i=new Uint8Array(a.memory.buffer),s=new Int32Array(a.memory.buffer),o=new Uint32Array(a.memory.buffer)}a.load(t,function(t){const e=a.__wbindgen_malloc(t.length);return _().set(t,e),e}(e),e.length,r)},free(t){a.free(t)}}},667:(t,e,r)=>{const{version:n}=r(306);let i,s=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});s.decode();let o=null;function a(){return null!==o&&o.buffer===i.memory.buffer||(o=new Uint8Array(i.memory.buffer)),o}let h=null;function _(){return null!==h&&h.buffer===i.memory.buffer||(h=new Int32Array(i.memory.buffer)),h}let f=0;class l{free(){i.__wbg_gif_encoder_free(this.ptr)}static async initialize(t,e,r){if(!i){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/gif.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t,{__wbindgen_placeholder__:{__wbindgen_throw:function(t,e){throw new Error((r=t,n=e,s.decode(a().subarray(r,r+n))));var r,n}}});i=e.exports}const o=i.gif_encoder_new(t,e,r);return new l(o)}constructor(t){this.ptr=t}buffer(){try{const r=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=r,i.gif_encoder_buffer(r,this.ptr);const n=_()[r/4],s=_()[r/4+1],o=(t=n,e=s,a().subarray(t/1,t/1+e)).slice();return i.__wbindgen_free(n,1*s),o}finally{i.__wbindgen_export_0.value+=16}var t,e}add(t,e,r){const n=function(t,e){const r=e(1*t.length);return a().set(t,r/1),f=t.length,r}(r,i.__wbindgen_malloc);i.gif_encoder_add(this.ptr,t,e,n,f)}}t.exports={GIFEncoder:l}},327:(t,e,r)=>{const{version:n}=r(306);let i,s=null;function o(){return null!==s&&s.buffer===i.memory.buffer||(s=new Uint8Array(i.memory.buffer)),s}let a=0;function h(t,e){const r=e(1*t.length);return o().set(t,r/1),a=t.length,r}let _=null;function f(){return null!==_&&_.buffer===i.memory.buffer||(_=new Int32Array(i.memory.buffer)),_}function l(t,e){return o().subarray(t/1,t/1+e)}let u=null;async function c(){if(i)return;const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/jpeg.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);i=e.exports}t.exports={async encode(t,e,r,n){await c();try{const s=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=s;const o=h(n,i.__wbindgen_malloc);i.encode(s,t,e,r,o,a);const _=f()[s/4],u=f()[s/4+1],c=l(_,u).slice();return i.__wbindgen_free(_,1*u),c}finally{i.__wbindgen_export_0.value+=16}},async decode(t,e,r,n){await c();const s=h(e,i.__wbindgen_malloc);return i.decode(t,s,a,r,n)},meta(t){try{const n=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=n,i.meta(n,t);const s=f()[n/4],o=f()[n/4+1],a=(e=s,r=o,(null!==u&&u.buffer===i.memory.buffer||(u=new Uint16Array(i.memory.buffer)),u).subarray(e/2,e/2+r)).slice();return i.__wbindgen_free(s,2*o),a}finally{i.__wbindgen_export_0.value+=16}var e,r},buffer(t){try{const e=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=e,i.buffer(e,t);const r=f()[e/4],n=f()[e/4+1],s=l(r,n).slice();return i.__wbindgen_free(r,1*n),s}finally{i.__wbindgen_export_0.value+=16}},free(t){i.free(t)}}},876:(t,e,r)=>{const{version:n}=r(306);let i,s=0,o=null;function a(){return null!==o&&o.buffer===i.memory.buffer||(o=new Uint8Array(i.memory.buffer)),o}let h=new TextEncoder;const _="function"==typeof h.encodeInto?function(t,e){return h.encodeInto(t,e)}:function(t,e){const r=h.encode(t);return e.set(r),{read:t.length,written:r.length}};let f=null;function l(){return null!==f&&f.buffer===i.memory.buffer||(f=new Int32Array(i.memory.buffer)),f}let u=null;t.exports={async rgba(t,e,r,o,h,f){if(!i){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/svg.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);i=e.exports}const l=function(t,e,r){if(void 0===r){const r=(new TextEncoder).encode(t),n=e(r.length);return a().subarray(n,n+r.length).set(r),s=r.length,n}let n=t.length,i=e(n);const o=a();let h=0;for(;h127)break;o[i+h]=e}if(h!==n){0!==h&&(t=t.slice(h)),i=r(i,n,n=h+3*t.length);const e=a().subarray(i+h,i+n);h+=_(t,e).written}return s=h,i}(e,i.__wbindgen_malloc,i.__wbindgen_realloc);return i.rgba(t,l,s,r,o,h,f)},meta(t){try{const n=i.__wbindgen_export_2.value-16;i.__wbindgen_export_2.value=n,i.meta(n,t);const s=l()[n/4],o=l()[n/4+1],a=(e=s,r=o,(null!==u&&u.buffer===i.memory.buffer||(u=new Uint32Array(i.memory.buffer)),u).subarray(e/4,e/4+r)).slice();return i.__wbindgen_free(s,4*o),a}finally{i.__wbindgen_export_2.value+=16}var e,r},buffer(t){try{const n=i.__wbindgen_export_2.value-16;i.__wbindgen_export_2.value=n,i.buffer(n,t);const s=l()[n/4],o=l()[n/4+1],h=(e=s,r=o,a().subarray(e,e+r)).slice();return i.__wbindgen_free(s,o),h}finally{i.__wbindgen_export_2.value+=16}var e,r},free(t){i.free(t)}}},76:(t,e,r)=>{const{version:n}=r(306);let i,s=null;function o(){return null!==s&&s.buffer===i.memory.buffer||(s=new Uint8Array(i.memory.buffer)),s}let a=0,h=null;function _(){return null!==h&&h.buffer===i.memory.buffer||(h=new Int32Array(i.memory.buffer)),h}let f=null;t.exports={async decode(t,e){if(!i){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/tiff.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);i=e.exports}const r=function(t,e){const r=e(1*t.length);return o().set(t,r/1),a=t.length,r}(e,i.__wbindgen_malloc);return i.decode(t,r,a)},meta(t){try{const n=i.__wbindgen_export_1.value-16;i.__wbindgen_export_1.value=n,i.meta(n,t);const s=_()[n/4],o=_()[n/4+1],a=(e=s,r=o,(null!==f&&f.buffer===i.memory.buffer||(f=new Uint32Array(i.memory.buffer)),f).subarray(e/4,e/4+r)).slice();return i.__wbindgen_free(s,4*o),a}finally{i.__wbindgen_export_1.value+=16}var e,r},buffer(t){try{const n=i.__wbindgen_export_1.value-16;i.__wbindgen_export_1.value=n,i.buffer(n,t);const s=_()[n/4],a=_()[n/4+1],h=(e=s,r=a,o().subarray(e/1,e/1+r)).slice();return i.__wbindgen_free(s,1*a),h}finally{i.__wbindgen_export_1.value+=16}var e,r},free(t){i.free(t)}}},423:(t,e,r)=>{const{version:n}=r(306);async function i(){let t;{const e=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/zlib.wasm`).then((t=>t.arrayBuffer()))),r=new WebAssembly.Instance(e);t=r.exports}let e=new Uint8Array(t.memory.buffer),r=new Int32Array(t.memory.buffer);function i(){return e.buffer===t.memory.buffer?e:e=new Uint8Array(t.memory.buffer)}function s(){return r.buffer===t.memory.buffer?r:r=new Int32Array(t.memory.buffer)}function o(t,e){return i().subarray(t,t+e)}function a(e){const r=t.__wbindgen_malloc(e.length);return i().set(e,r),r}return{compress(e,r){const n=a(e);t.compress(8,n,e.length,r);const i=s(),h=o(i[2],i[3]).slice();return t.__wbindgen_free(i[2],i[3]),h},decompress(e,r){const n=a(e);try{t.decompress(8,n,e.length,r);const i=s(),a=o(i[2],i[3]).slice();return t.__wbindgen_free(i[2],i[3]),a}catch{throw t.__wbindgen_free(n,e.length),new Error("zlib: panic")}}}}t.exports={async compress(e,r){const{compress:n}=t.exports=await i();return n(e,r)},async decompress(e,r){const{decompress:n}=t.exports=await i();return n(e,r)}}}},e={},function r(n){if(e[n])return e[n].exports;var i=e[n]={exports:{}};return t[n](i,i.exports,r),i.exports}(655);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index 7aca92c..93dde59 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","resize","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__apply__","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","jpegCanvas","composite","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","pixelType","meta","free","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","toString","status","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","load","render","Frame","duration","super","frame","module","exports","GIF","frames","loopCount","indexOf","reduce","acc","encoder","GIFEncoder","initialize","add","encoded","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","0","6","bytespp","p_offset","c_offset","chunks","palette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","u8array_ref","i32array_ref","u32array_ref","wasm","utf8encoder","TextEncoder","u8array","memory","i32array","Int32Array","ptr","id","max_width","wrap_style","str","string","len","__wbindgen_malloc","u8","code","charCodeAt","substring","__wbindgen_realloc","encodeInto","written","string_to_ptr","i32","__wbindgen_free","WebAssembly","Module","fetch","then","arrayBuffer","instance","Instance","u8array_to_ptr","cachedTextDecoder","TextDecoder","ignoreBOM","fatal","cachegetUint8Memory0","getUint8Memory0","cachegetInt32Memory0","getInt32Memory0","WASM_VECTOR_LEN","__wbg_gif_encoder_free","repeat","__wbindgen_placeholder__","__wbindgen_throw","arg0","arg1","ret","gif_encoder_new","retptr","__wbindgen_export_0","gif_encoder_buffer","r0","r1","v0","delay","ptr0","arg","malloc","passArray8ToWasm0","gif_encoder_add","getArrayU8FromWasm0","cachegetUint16Memory0","async","initWASM","v1","Uint16Array","cachedTextEncoder","encodeString","buf","read","cachegetUint32Memory0","fit_kind","zoom","realloc","mem","passStringToWasm0","__wbindgen_export_2","__wbindgen_export_1","ptr_to_u8array","limit","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32((~~y - 1) * this.width + (~~x - 1), false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.resize(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n return this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n this.__apply__(image);\n\n return this;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n quality = Math.max(1, Math.min(100, quality));\n const jpegCanvas = new this.constructor(this.width, this.height);\n jpegCanvas.fill(0xff);\n jpegCanvas.composite(this);\n return jpeglib.encode(this.width, this.height, quality, jpegCanvas.bitmap);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n const status = await jpeglib.decode(0, data, 0, 0);\n if (status === 1) throw new Error('Failed decoding JPEG image');\n const [pixelType, width, height] = jpeglib.meta(0);\n image = new this(width, height);\n const buffer = jpeglib.buffer(0);\n jpeglib.free(0);\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n const status = await tifflib.decode(0, data);\n if (status === 1) throw new Error('Failed decoding TIFF image');\n const meta = tifflib.meta(0);\n const buffer = tifflib.buffer(0);\n tifflib.free(0);\n\n image = new this(...meta);\n image.bitmap.set(buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg !== 'string')\n svg = svg.toString();\n\n const status = await svglib.rgba(0, svg, mode, size, size, size);\n if (status === 1) throw new Error('Failed parsing SVG');\n if (status === 2) throw new Error('Failed rendering SVG');\n const meta = svglib.meta(0);\n const image = new this(...meta);\n image.bitmap.set(svglib.buffer(0));\n svglib.free(0);\n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n const [r, g, b, a] = Image.colorToRGBA(color);\n await fontlib.load(0, font, scale);\n fontlib.render(0, 0, scale, r, g, b, text, wrapWidth === Infinity ? null : wrapWidth, wrapStyle);\n const buffer = fontlib.buffer(0);\n const [width, height] = fontlib.meta(0);\n fontlib.free(0);\n const image = new this(width, height);\n image.bitmap.set(buffer);\n image.opacity(a / 0xff);\n\n return image;\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n const encoder = await giflib.GIFEncoder.initialize(this.width, this.height, this.loopCount);\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), quality, frame.bitmap);\n }\n\n const encoded = encoder.buffer();\n encoder.free();\n return encoded;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n const compressed = await compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette;\n if (array[25] === 3)\n palette = new Uint32Array(2 ** bpc);\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) {\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n array = await decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (channels === 1 && palette) {\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const {version} = require('../../package.json');\nlet u8array_ref, i32array_ref, u32array_ref, wasm;\n\nconst utf8encoder = new TextEncoder();\n\nfunction u8array() {\n return u8array_ref.buffer === wasm.memory.buffer ? u8array_ref : (u8array_ref = new Uint8Array(wasm.memory.buffer));\n}\n\nfunction i32array() {\n return i32array_ref.buffer === wasm.memory.buffer ? i32array_ref : (i32array_ref = new Int32Array(wasm.memory.buffer));\n}\n\nfunction u32array() {\n return u32array_ref.buffer === wasm.memory.buffer ? u32array_ref : (u32array_ref = new Uint32Array(wasm.memory.buffer));\n}\n\nfunction ptr_to_u8array(ptr, len) {\n return u8array().subarray(ptr, ptr + len);\n}\n\nfunction ptr_to_u32array(ptr, len) {\n return u32array().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction u8array_to_ptr(buffer) {\n const ptr = wasm.__wbindgen_malloc(buffer.length);\n u8array().set(buffer, ptr);\n\n return ptr;\n}\n\nfunction string_to_ptr(string) {\n let offset = 0;\n let len = string.length;\n let ptr = wasm.__wbindgen_malloc(string.length);\n\n const u8 = u8array();\n while (len > offset) {\n const code = string.charCodeAt(offset);\n\n if (code > 0x7F) break;\n u8[ptr + offset++] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) string = string.substring(offset);\n ptr = wasm.__wbindgen_realloc(ptr, len, len = offset + string.length * 3);\n const ret = utf8encoder.encodeInto(string, u8array().subarray(ptr + offset, ptr + len));\n\n offset += ret.written;\n }\n\n return [ptr, offset];\n}\n\nconst nullish = x => x == null;\n\nmodule.exports = {\n render(ptr, id, scale, r, g, b, text, max_width, wrap_style = false) {\n const str = string_to_ptr(text);\n wasm.render(ptr, id, scale, r, g, b, str[0], str[1], !nullish(max_width), max_width || 0, wrap_style);\n },\n buffer(id) {\n wasm.buffer(8, id);\n const i32 = i32array();\n const slice = ptr_to_u8array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], i32[3]);\n\n return slice;\n },\n meta(id) {\n wasm.meta(8, id);\n const i32 = i32array();\n const slice = ptr_to_u32array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], 4 * i32[3]);\n\n return slice;\n },\n async load(id, buffer, scale = 128) {\n if (!wasm) {\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n u8array_ref = new Uint8Array(wasm.memory.buffer);\n i32array_ref = new Int32Array(wasm.memory.buffer);\n u32array_ref = new Uint32Array(wasm.memory.buffer);\n }\n\n wasm.load(id, u8array_to_ptr(buffer), buffer.length, scale);\n },\n free(id) {\n wasm.free(id);\n }\n}\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet cachedTextDecoder = new TextDecoder('utf-8', {ignoreBOM: true, fatal: true});\n\ncachedTextDecoder.decode();\n\nlet cachegetUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n\tif (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n\t}\n\treturn cachegetUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n\treturn cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n\tif (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n\t}\n\treturn cachegetInt32Memory0;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n\treturn getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray8ToWasm0(arg, malloc) {\n\tconst ptr = malloc(arg.length * 1);\n\tgetUint8Memory0().set(arg, ptr / 1);\n\tWASM_VECTOR_LEN = arg.length;\n\treturn ptr;\n}\n\nclass GIFEncoder {\n\tfree() {\n\t\twasm.__wbg_gif_encoder_free(this.ptr);\n\t}\n\n\t/**\n\t * @param {number} width\n\t * @param {number} height\n\t * @param {number} repeat\n\t */\n\tstatic async initialize(width, height, repeat) {\n\t\tif (!wasm) {\n\t\t\tconst module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(r => r.arrayBuffer()));\n\t\t\tconst instance = new WebAssembly.Instance(module, {\n\t\t\t\t__wbindgen_placeholder__: {\n\t\t\t\t\t__wbindgen_throw: function (arg0, arg1) {\n\t\t\t\t\t\tthrow new Error(getStringFromWasm0(arg0, arg1));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\twasm = instance.exports;\n\t\t}\n\n\t\tconst ret = wasm.gif_encoder_new(width, height, repeat);\n\t\treturn new GIFEncoder(ret);\n\t}\n\n\tconstructor(ptr) {\n\t\tthis.ptr = ptr;\n\t}\n\n\t/**\n\t * @returns {Uint8Array}\n\t */\n\tbuffer() {\n\t\ttry {\n\t\t\tconst retptr = wasm.__wbindgen_export_0.value - 16;\n\t\t\twasm.__wbindgen_export_0.value = retptr;\n\t\t\twasm.gif_encoder_buffer(retptr, this.ptr);\n\t\t\tconst r0 = getInt32Memory0()[retptr / 4];\n\t\t\tconst r1 = getInt32Memory0()[retptr / 4 + 1];\n\t\t\tconst v0 = getArrayU8FromWasm0(r0, r1).slice();\n\t\t\twasm.__wbindgen_free(r0, r1 * 1);\n\t\t\treturn v0;\n\t\t} finally {\n\t\t\twasm.__wbindgen_export_0.value += 16;\n\t\t}\n\t}\n\n\t/**\n\t * @param {number} delay\n\t * @param {number} quality\n\t * @param {Uint8Array} buffer\n\t */\n\tadd(delay, quality, buffer) {\n\t\tconst ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n\t\twasm.gif_encoder_add(this.ptr, delay, quality, ptr0, WASM_VECTOR_LEN);\n\t}\n}\n\nmodule.exports = {GIFEncoder};\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet cachegetUint8Memory0 = null;\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1);\n getUint8Memory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachegetUint16Memory0 = null;\n\nfunction getUint16Memory0() {\n if (cachegetUint16Memory0 === null || cachegetUint16Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint16Memory0 = new Uint16Array(wasm.memory.buffer);\n }\n return cachegetUint16Memory0;\n}\n\nfunction getArrayU16FromWasm0(ptr, len) {\n return getUint16Memory0().subarray(ptr / 2, ptr / 2 + len);\n}\n\nasync function initWASM() {\n if (wasm) return;\n\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n wasm = instance.exports;\n}\n\nmodule.exports = {\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} quality\n * @param {Uint8Array|Uint8ClampedArray} buffer\n * @returns {Uint8Array}\n */\n async encode(width, height, quality, buffer) {\n await initWASM();\n\n try {\n const retptr = wasm.__wbindgen_export_0.value - 16;\n wasm.__wbindgen_export_0.value = retptr;\n const ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n wasm.encode(retptr, width, height, quality, ptr0, WASM_VECTOR_LEN);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v1 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 1);\n return v1;\n } finally {\n wasm.__wbindgen_export_0.value += 16;\n }\n },\n /**\n * @param {number} ptr\n * @param {Uint8Array} buffer\n * @param {number} width\n * @param {number} height\n * @returns {number}\n */\n async decode(ptr, buffer, width, height) {\n await initWASM();\n\n const ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n return wasm.decode(ptr, ptr0, WASM_VECTOR_LEN, width, height);\n },\n /**\n * @param {number} id\n * @returns {Uint16Array}\n */\n meta(id) {\n try {\n const retptr = wasm.__wbindgen_export_0.value - 16;\n wasm.__wbindgen_export_0.value = retptr;\n wasm.meta(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU16FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 2);\n return v0;\n } finally {\n wasm.__wbindgen_export_0.value += 16;\n }\n },\n /**\n * @param {number} id\n * @returns {Uint8Array}\n */\n buffer(id) {\n try {\n const retptr = wasm.__wbindgen_export_0.value - 16;\n wasm.__wbindgen_export_0.value = retptr;\n wasm.buffer(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 1);\n return v0;\n } finally {\n wasm.__wbindgen_export_0.value += 16;\n }\n },\n /**\n * @param {number} id\n */\n free(id) {\n wasm.free(id);\n }\n}\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet WASM_VECTOR_LEN = 0;\n\nlet cachegetUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nlet cachedTextEncoder = new TextEncoder();\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n }\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n });\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const textEncoder = new TextEncoder();\n const buf = textEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nlet cachegetUint32Memory0 = null;\n\nfunction getUint32Memory0() {\n if (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer);\n }\n return cachegetUint32Memory0;\n}\n\nfunction getArrayU32FromWasm0(ptr, len) {\n return getUint32Memory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n return getUint8Memory0().subarray(ptr, ptr + len);\n}\n\nmodule.exports = {\n /**\n * @param {number} ptr\n * @param {string} svg\n * @param {number} fit_kind\n * @param {number} zoom\n * @param {number} width\n * @param {number} height\n * @returns {number}\n */\n async rgba(ptr, svg, fit_kind, zoom, width, height) {\n if (!wasm) {\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n wasm = instance.exports;\n }\n\n const ptr0 = passStringToWasm0(svg, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n return wasm.rgba(ptr, ptr0, WASM_VECTOR_LEN, fit_kind, zoom, width, height);\n },\n /**\n * @param {number} id\n * @returns {Uint32Array}\n */\n meta(id) {\n try {\n const retptr = wasm.__wbindgen_export_2.value - 16;\n wasm.__wbindgen_export_2.value = retptr;\n wasm.meta(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU32FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 4);\n return v0;\n } finally {\n wasm.__wbindgen_export_2.value += 16;\n }\n },\n /**\n * @param {number} id\n * @returns {Uint8Array}\n */\n buffer(id) {\n try {\n const retptr = wasm.__wbindgen_export_2.value - 16;\n wasm.__wbindgen_export_2.value = retptr;\n wasm.buffer(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1);\n return v0;\n } finally {\n wasm.__wbindgen_export_2.value += 16;\n }\n },\n /**\n * @param {number} id\n */\n free(id) {\n wasm.free(id);\n }\n};\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet cachegetUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n\tif (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n\t}\n\treturn cachegetUint8Memory0;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray8ToWasm0(arg, malloc) {\n\tconst ptr = malloc(arg.length * 1);\n\tgetUint8Memory0().set(arg, ptr / 1);\n\tWASM_VECTOR_LEN = arg.length;\n\treturn ptr;\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n\tif (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n\t}\n\treturn cachegetInt32Memory0;\n}\n\nlet cachegetUint32Memory0 = null;\n\nfunction getUint32Memory0() {\n\tif (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer);\n\t}\n\treturn cachegetUint32Memory0;\n}\n\nfunction getArrayU32FromWasm0(ptr, len) {\n\treturn getUint32Memory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n\treturn getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nmodule.exports = {\n\t/**\n\t * @param {number} ptr\n\t * @param {Uint8Array} buffer\n\t * @returns {number}\n\t */\n\tasync decode(ptr, buffer) {\n\t\tif (!wasm) {\n\t\t\tconst module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(r => r.arrayBuffer()));\n\t\t\tconst instance = new WebAssembly.Instance(module);\n\t\t\twasm = instance.exports;\n\t\t}\n\n\t\tconst ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n\t\treturn wasm.decode(ptr, ptr0, WASM_VECTOR_LEN);\n\t},\n\t/**\n\t * @param {number} id\n\t * @returns {Uint32Array}\n\t */\n\tmeta(id) {\n\t\ttry {\n\t\t\tconst retptr = wasm.__wbindgen_export_1.value - 16;\n\t\t\twasm.__wbindgen_export_1.value = retptr;\n\t\t\twasm.meta(retptr, id);\n\t\t\tconst r0 = getInt32Memory0()[retptr / 4];\n\t\t\tconst r1 = getInt32Memory0()[retptr / 4 + 1];\n\t\t\tconst v0 = getArrayU32FromWasm0(r0, r1).slice();\n\t\t\twasm.__wbindgen_free(r0, r1 * 4);\n\t\t\treturn v0;\n\t\t} finally {\n\t\t\twasm.__wbindgen_export_1.value += 16;\n\t\t}\n\t},\n\t/**\n\t * @param {number} id\n\t * @returns {Uint8Array}\n\t */\n\tbuffer(id) {\n\t\ttry {\n\t\t\tconst retptr = wasm.__wbindgen_export_1.value - 16;\n\t\t\twasm.__wbindgen_export_1.value = retptr;\n\t\t\twasm.buffer(retptr, id);\n\t\t\tconst r0 = getInt32Memory0()[retptr / 4];\n\t\t\tconst r1 = getInt32Memory0()[retptr / 4 + 1];\n\t\t\tconst v0 = getArrayU8FromWasm0(r0, r1).slice();\n\t\t\twasm.__wbindgen_free(r0, r1 * 1);\n\t\t\treturn v0;\n\t\t} finally {\n\t\t\twasm.__wbindgen_export_1.value += 16;\n\t\t}\n\t},\n\t/**\n\t * @param {number} id\n\t */\n\tfree(id) {\n\t\twasm.free(id);\n\t}\n}\n","const {version} = require('../../package.json');\nasync function load() {\n let wasm;\n\n {\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n }\n\n let u8array_ref = new Uint8Array(wasm.memory.buffer);\n let i32array_ref = new Int32Array(wasm.memory.buffer);\n\n function u8array() {\n return u8array_ref.buffer === wasm.memory.buffer ? u8array_ref : (u8array_ref = new Uint8Array(wasm.memory.buffer));\n }\n\n function i32array() {\n return i32array_ref.buffer === wasm.memory.buffer ? i32array_ref : (i32array_ref = new Int32Array(wasm.memory.buffer));\n }\n\n function ptr_to_u8array(ptr, len) {\n return u8array().subarray(ptr, ptr + len);\n }\n\n function u8array_to_ptr(buffer) {\n const ptr = wasm.__wbindgen_malloc(buffer.length);\n u8array().set(buffer, ptr);\n return ptr;\n }\n\n return {\n compress(buffer, level) {\n const ptr = u8array_to_ptr(buffer);\n wasm.compress(8, ptr, buffer.length, level);\n\n const i32 = i32array();\n const slice = ptr_to_u8array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], i32[3]);\n return slice;\n }, decompress(buffer, limit) {\n const ptr = u8array_to_ptr(buffer);\n\n try {\n wasm.decompress(8, ptr, buffer.length, limit);\n\n const i32 = i32array();\n const slice = ptr_to_u8array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], i32[3]);\n return slice;\n } catch {\n wasm.__wbindgen_free(ptr, buffer.length);\n throw new Error('zlib: panic');\n }\n }\n };\n}\n\nmodule.exports = {\n async compress(buffer, level) {\n const {compress} = module.exports = await load();\n\n return compress(buffer, level);\n },\n async decompress(buffer, limit) {\n const {decompress} = module.exports = await load();\n\n return decompress(buffer, limit);\n }\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","resize","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__apply__","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","jpegCanvas","composite","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","pixelType","meta","free","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","toString","status","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","load","render","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","GIFEncoder","initialize","add","encoded","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","0","6","bytespp","p_offset","c_offset","chunks","palette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","u8array_ref","i32array_ref","u32array_ref","wasm","utf8encoder","TextEncoder","u8array","memory","i32array","Int32Array","ptr","id","max_width","wrap_style","str","string","len","__wbindgen_malloc","u8","code","charCodeAt","substring","__wbindgen_realloc","encodeInto","written","string_to_ptr","i32","__wbindgen_free","WebAssembly","Module","fetch","then","arrayBuffer","instance","Instance","u8array_to_ptr","cachedTextDecoder","TextDecoder","ignoreBOM","fatal","cachegetUint8Memory0","getUint8Memory0","cachegetInt32Memory0","getInt32Memory0","WASM_VECTOR_LEN","__wbg_gif_encoder_free","repeat","__wbindgen_placeholder__","__wbindgen_throw","arg0","arg1","ret","gif_encoder_new","retptr","__wbindgen_export_0","gif_encoder_buffer","r0","r1","v0","delay","ptr0","arg","malloc","passArray8ToWasm0","gif_encoder_add","getArrayU8FromWasm0","cachegetUint16Memory0","async","initWASM","v1","Uint16Array","cachedTextEncoder","encodeString","buf","read","cachegetUint32Memory0","fit_kind","zoom","realloc","mem","passStringToWasm0","__wbindgen_export_2","__wbindgen_export_1","ptr_to_u8array","limit","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32((~~y - 1) * this.width + (~~x - 1), false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.resize(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n return this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n this.__apply__(image);\n\n return this;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n quality = Math.max(1, Math.min(100, quality));\n const jpegCanvas = new this.constructor(this.width, this.height);\n jpegCanvas.fill(0xff);\n jpegCanvas.composite(this);\n return jpeglib.encode(this.width, this.height, quality, jpegCanvas.bitmap);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n const status = await jpeglib.decode(0, data, 0, 0);\n if (status === 1) throw new Error('Failed decoding JPEG image');\n const [pixelType, width, height] = jpeglib.meta(0);\n image = new this(width, height);\n const buffer = jpeglib.buffer(0);\n jpeglib.free(0);\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n const status = await tifflib.decode(0, data);\n if (status === 1) throw new Error('Failed decoding TIFF image');\n const meta = tifflib.meta(0);\n const buffer = tifflib.buffer(0);\n tifflib.free(0);\n\n image = new this(...meta);\n image.bitmap.set(buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg !== 'string')\n svg = svg.toString();\n\n const status = await svglib.rgba(0, svg, mode, size, size, size);\n if (status === 1) throw new Error('Failed parsing SVG');\n if (status === 2) throw new Error('Failed rendering SVG');\n const meta = svglib.meta(0);\n const image = new this(...meta);\n image.bitmap.set(svglib.buffer(0));\n svglib.free(0);\n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n const [r, g, b, a] = Image.colorToRGBA(color);\n await fontlib.load(0, font, scale);\n fontlib.render(0, 0, scale, r, g, b, text, wrapWidth === Infinity ? null : wrapWidth, wrapStyle);\n const buffer = fontlib.buffer(0);\n const [width, height] = fontlib.meta(0);\n fontlib.free(0);\n const image = new this(width, height);\n image.bitmap.set(buffer);\n image.opacity(a / 0xff);\n\n return image;\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n const encoder = await giflib.GIFEncoder.initialize(this.width, this.height, this.loopCount);\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), quality, frame.bitmap);\n }\n\n const encoded = encoder.buffer();\n encoder.free();\n return encoded;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n const compressed = await compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette;\n if (array[25] === 3)\n palette = new Uint32Array(2 ** bpc);\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) {\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n array = await decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (channels === 1 && palette) {\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const {version} = require('../../package.json');\nlet u8array_ref, i32array_ref, u32array_ref, wasm;\n\nconst utf8encoder = new TextEncoder();\n\nfunction u8array() {\n return u8array_ref.buffer === wasm.memory.buffer ? u8array_ref : (u8array_ref = new Uint8Array(wasm.memory.buffer));\n}\n\nfunction i32array() {\n return i32array_ref.buffer === wasm.memory.buffer ? i32array_ref : (i32array_ref = new Int32Array(wasm.memory.buffer));\n}\n\nfunction u32array() {\n return u32array_ref.buffer === wasm.memory.buffer ? u32array_ref : (u32array_ref = new Uint32Array(wasm.memory.buffer));\n}\n\nfunction ptr_to_u8array(ptr, len) {\n return u8array().subarray(ptr, ptr + len);\n}\n\nfunction ptr_to_u32array(ptr, len) {\n return u32array().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction u8array_to_ptr(buffer) {\n const ptr = wasm.__wbindgen_malloc(buffer.length);\n u8array().set(buffer, ptr);\n\n return ptr;\n}\n\nfunction string_to_ptr(string) {\n let offset = 0;\n let len = string.length;\n let ptr = wasm.__wbindgen_malloc(string.length);\n\n const u8 = u8array();\n while (len > offset) {\n const code = string.charCodeAt(offset);\n\n if (code > 0x7F) break;\n u8[ptr + offset++] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) string = string.substring(offset);\n ptr = wasm.__wbindgen_realloc(ptr, len, len = offset + string.length * 3);\n const ret = utf8encoder.encodeInto(string, u8array().subarray(ptr + offset, ptr + len));\n\n offset += ret.written;\n }\n\n return [ptr, offset];\n}\n\nconst nullish = x => x == null;\n\nmodule.exports = {\n render(ptr, id, scale, r, g, b, text, max_width, wrap_style = false) {\n const str = string_to_ptr(text);\n wasm.render(ptr, id, scale, r, g, b, str[0], str[1], !nullish(max_width), max_width || 0, wrap_style);\n },\n buffer(id) {\n wasm.buffer(8, id);\n const i32 = i32array();\n const slice = ptr_to_u8array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], i32[3]);\n\n return slice;\n },\n meta(id) {\n wasm.meta(8, id);\n const i32 = i32array();\n const slice = ptr_to_u32array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], 4 * i32[3]);\n\n return slice;\n },\n async load(id, buffer, scale = 128) {\n if (!wasm) {\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n u8array_ref = new Uint8Array(wasm.memory.buffer);\n i32array_ref = new Int32Array(wasm.memory.buffer);\n u32array_ref = new Uint32Array(wasm.memory.buffer);\n }\n\n wasm.load(id, u8array_to_ptr(buffer), buffer.length, scale);\n },\n free(id) {\n wasm.free(id);\n }\n}\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet cachedTextDecoder = new TextDecoder('utf-8', {ignoreBOM: true, fatal: true});\n\ncachedTextDecoder.decode();\n\nlet cachegetUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n\tif (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n\t}\n\treturn cachegetUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n\treturn cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n\tif (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n\t}\n\treturn cachegetInt32Memory0;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n\treturn getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray8ToWasm0(arg, malloc) {\n\tconst ptr = malloc(arg.length * 1);\n\tgetUint8Memory0().set(arg, ptr / 1);\n\tWASM_VECTOR_LEN = arg.length;\n\treturn ptr;\n}\n\nclass GIFEncoder {\n\tfree() {\n\t\twasm.__wbg_gif_encoder_free(this.ptr);\n\t}\n\n\t/**\n\t * @param {number} width\n\t * @param {number} height\n\t * @param {number} repeat\n\t */\n\tstatic async initialize(width, height, repeat) {\n\t\tif (!wasm) {\n\t\t\tconst module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(r => r.arrayBuffer()));\n\t\t\tconst instance = new WebAssembly.Instance(module, {\n\t\t\t\t__wbindgen_placeholder__: {\n\t\t\t\t\t__wbindgen_throw: function (arg0, arg1) {\n\t\t\t\t\t\tthrow new Error(getStringFromWasm0(arg0, arg1));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\twasm = instance.exports;\n\t\t}\n\n\t\tconst ret = wasm.gif_encoder_new(width, height, repeat);\n\t\treturn new GIFEncoder(ret);\n\t}\n\n\tconstructor(ptr) {\n\t\tthis.ptr = ptr;\n\t}\n\n\t/**\n\t * @returns {Uint8Array}\n\t */\n\tbuffer() {\n\t\ttry {\n\t\t\tconst retptr = wasm.__wbindgen_export_0.value - 16;\n\t\t\twasm.__wbindgen_export_0.value = retptr;\n\t\t\twasm.gif_encoder_buffer(retptr, this.ptr);\n\t\t\tconst r0 = getInt32Memory0()[retptr / 4];\n\t\t\tconst r1 = getInt32Memory0()[retptr / 4 + 1];\n\t\t\tconst v0 = getArrayU8FromWasm0(r0, r1).slice();\n\t\t\twasm.__wbindgen_free(r0, r1 * 1);\n\t\t\treturn v0;\n\t\t} finally {\n\t\t\twasm.__wbindgen_export_0.value += 16;\n\t\t}\n\t}\n\n\t/**\n\t * @param {number} delay\n\t * @param {number} quality\n\t * @param {Uint8Array} buffer\n\t */\n\tadd(delay, quality, buffer) {\n\t\tconst ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n\t\twasm.gif_encoder_add(this.ptr, delay, quality, ptr0, WASM_VECTOR_LEN);\n\t}\n}\n\nmodule.exports = {GIFEncoder};\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet cachegetUint8Memory0 = null;\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1);\n getUint8Memory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachegetUint16Memory0 = null;\n\nfunction getUint16Memory0() {\n if (cachegetUint16Memory0 === null || cachegetUint16Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint16Memory0 = new Uint16Array(wasm.memory.buffer);\n }\n return cachegetUint16Memory0;\n}\n\nfunction getArrayU16FromWasm0(ptr, len) {\n return getUint16Memory0().subarray(ptr / 2, ptr / 2 + len);\n}\n\nasync function initWASM() {\n if (wasm) return;\n\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n wasm = instance.exports;\n}\n\nmodule.exports = {\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} quality\n * @param {Uint8Array|Uint8ClampedArray} buffer\n * @returns {Uint8Array}\n */\n async encode(width, height, quality, buffer) {\n await initWASM();\n\n try {\n const retptr = wasm.__wbindgen_export_0.value - 16;\n wasm.__wbindgen_export_0.value = retptr;\n const ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n wasm.encode(retptr, width, height, quality, ptr0, WASM_VECTOR_LEN);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v1 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 1);\n return v1;\n } finally {\n wasm.__wbindgen_export_0.value += 16;\n }\n },\n /**\n * @param {number} ptr\n * @param {Uint8Array} buffer\n * @param {number} width\n * @param {number} height\n * @returns {number}\n */\n async decode(ptr, buffer, width, height) {\n await initWASM();\n\n const ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n return wasm.decode(ptr, ptr0, WASM_VECTOR_LEN, width, height);\n },\n /**\n * @param {number} id\n * @returns {Uint16Array}\n */\n meta(id) {\n try {\n const retptr = wasm.__wbindgen_export_0.value - 16;\n wasm.__wbindgen_export_0.value = retptr;\n wasm.meta(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU16FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 2);\n return v0;\n } finally {\n wasm.__wbindgen_export_0.value += 16;\n }\n },\n /**\n * @param {number} id\n * @returns {Uint8Array}\n */\n buffer(id) {\n try {\n const retptr = wasm.__wbindgen_export_0.value - 16;\n wasm.__wbindgen_export_0.value = retptr;\n wasm.buffer(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 1);\n return v0;\n } finally {\n wasm.__wbindgen_export_0.value += 16;\n }\n },\n /**\n * @param {number} id\n */\n free(id) {\n wasm.free(id);\n }\n}\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet WASM_VECTOR_LEN = 0;\n\nlet cachegetUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nlet cachedTextEncoder = new TextEncoder();\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n }\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n });\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const textEncoder = new TextEncoder();\n const buf = textEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nlet cachegetUint32Memory0 = null;\n\nfunction getUint32Memory0() {\n if (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer);\n }\n return cachegetUint32Memory0;\n}\n\nfunction getArrayU32FromWasm0(ptr, len) {\n return getUint32Memory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n return getUint8Memory0().subarray(ptr, ptr + len);\n}\n\nmodule.exports = {\n /**\n * @param {number} ptr\n * @param {string} svg\n * @param {number} fit_kind\n * @param {number} zoom\n * @param {number} width\n * @param {number} height\n * @returns {number}\n */\n async rgba(ptr, svg, fit_kind, zoom, width, height) {\n if (!wasm) {\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n wasm = instance.exports;\n }\n\n const ptr0 = passStringToWasm0(svg, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n return wasm.rgba(ptr, ptr0, WASM_VECTOR_LEN, fit_kind, zoom, width, height);\n },\n /**\n * @param {number} id\n * @returns {Uint32Array}\n */\n meta(id) {\n try {\n const retptr = wasm.__wbindgen_export_2.value - 16;\n wasm.__wbindgen_export_2.value = retptr;\n wasm.meta(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU32FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 4);\n return v0;\n } finally {\n wasm.__wbindgen_export_2.value += 16;\n }\n },\n /**\n * @param {number} id\n * @returns {Uint8Array}\n */\n buffer(id) {\n try {\n const retptr = wasm.__wbindgen_export_2.value - 16;\n wasm.__wbindgen_export_2.value = retptr;\n wasm.buffer(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1);\n return v0;\n } finally {\n wasm.__wbindgen_export_2.value += 16;\n }\n },\n /**\n * @param {number} id\n */\n free(id) {\n wasm.free(id);\n }\n};\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet cachegetUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n\tif (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n\t}\n\treturn cachegetUint8Memory0;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray8ToWasm0(arg, malloc) {\n\tconst ptr = malloc(arg.length * 1);\n\tgetUint8Memory0().set(arg, ptr / 1);\n\tWASM_VECTOR_LEN = arg.length;\n\treturn ptr;\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n\tif (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n\t}\n\treturn cachegetInt32Memory0;\n}\n\nlet cachegetUint32Memory0 = null;\n\nfunction getUint32Memory0() {\n\tif (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer);\n\t}\n\treturn cachegetUint32Memory0;\n}\n\nfunction getArrayU32FromWasm0(ptr, len) {\n\treturn getUint32Memory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n\treturn getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nmodule.exports = {\n\t/**\n\t * @param {number} ptr\n\t * @param {Uint8Array} buffer\n\t * @returns {number}\n\t */\n\tasync decode(ptr, buffer) {\n\t\tif (!wasm) {\n\t\t\tconst module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(r => r.arrayBuffer()));\n\t\t\tconst instance = new WebAssembly.Instance(module);\n\t\t\twasm = instance.exports;\n\t\t}\n\n\t\tconst ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n\t\treturn wasm.decode(ptr, ptr0, WASM_VECTOR_LEN);\n\t},\n\t/**\n\t * @param {number} id\n\t * @returns {Uint32Array}\n\t */\n\tmeta(id) {\n\t\ttry {\n\t\t\tconst retptr = wasm.__wbindgen_export_1.value - 16;\n\t\t\twasm.__wbindgen_export_1.value = retptr;\n\t\t\twasm.meta(retptr, id);\n\t\t\tconst r0 = getInt32Memory0()[retptr / 4];\n\t\t\tconst r1 = getInt32Memory0()[retptr / 4 + 1];\n\t\t\tconst v0 = getArrayU32FromWasm0(r0, r1).slice();\n\t\t\twasm.__wbindgen_free(r0, r1 * 4);\n\t\t\treturn v0;\n\t\t} finally {\n\t\t\twasm.__wbindgen_export_1.value += 16;\n\t\t}\n\t},\n\t/**\n\t * @param {number} id\n\t * @returns {Uint8Array}\n\t */\n\tbuffer(id) {\n\t\ttry {\n\t\t\tconst retptr = wasm.__wbindgen_export_1.value - 16;\n\t\t\twasm.__wbindgen_export_1.value = retptr;\n\t\t\twasm.buffer(retptr, id);\n\t\t\tconst r0 = getInt32Memory0()[retptr / 4];\n\t\t\tconst r1 = getInt32Memory0()[retptr / 4 + 1];\n\t\t\tconst v0 = getArrayU8FromWasm0(r0, r1).slice();\n\t\t\twasm.__wbindgen_free(r0, r1 * 1);\n\t\t\treturn v0;\n\t\t} finally {\n\t\t\twasm.__wbindgen_export_1.value += 16;\n\t\t}\n\t},\n\t/**\n\t * @param {number} id\n\t */\n\tfree(id) {\n\t\twasm.free(id);\n\t}\n}\n","const {version} = require('../../package.json');\nasync function load() {\n let wasm;\n\n {\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n }\n\n let u8array_ref = new Uint8Array(wasm.memory.buffer);\n let i32array_ref = new Int32Array(wasm.memory.buffer);\n\n function u8array() {\n return u8array_ref.buffer === wasm.memory.buffer ? u8array_ref : (u8array_ref = new Uint8Array(wasm.memory.buffer));\n }\n\n function i32array() {\n return i32array_ref.buffer === wasm.memory.buffer ? i32array_ref : (i32array_ref = new Int32Array(wasm.memory.buffer));\n }\n\n function ptr_to_u8array(ptr, len) {\n return u8array().subarray(ptr, ptr + len);\n }\n\n function u8array_to_ptr(buffer) {\n const ptr = wasm.__wbindgen_malloc(buffer.length);\n u8array().set(buffer, ptr);\n return ptr;\n }\n\n return {\n compress(buffer, level) {\n const ptr = u8array_to_ptr(buffer);\n wasm.compress(8, ptr, buffer.length, level);\n\n const i32 = i32array();\n const slice = ptr_to_u8array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], i32[3]);\n return slice;\n }, decompress(buffer, limit) {\n const ptr = u8array_to_ptr(buffer);\n\n try {\n wasm.decompress(8, ptr, buffer.length, limit);\n\n const i32 = i32array();\n const slice = ptr_to_u8array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], i32[3]);\n return slice;\n } catch {\n wasm.__wbindgen_free(ptr, buffer.length);\n throw new Error('zlib: panic');\n }\n }\n };\n}\n\nmodule.exports = {\n async compress(buffer, level) {\n const {compress} = module.exports = await load();\n\n return compress(buffer, level);\n },\n async decompress(buffer, limit) {\n const {decompress} = module.exports = await load();\n\n return decompress(buffer, limit);\n }\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file From a0a08c109431dc0f2a7fee17029b31676a25671c Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Thu, 7 Jan 2021 15:56:23 +0100 Subject: [PATCH 007/120] fix example --- README.md | 20 ++++++++++++++------ example/index.html | 1 - example/runner.js | 1 + example/worker.js | 2 ++ 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 7ca5a06..3b77dc7 100644 --- a/README.md +++ b/README.md @@ -20,15 +20,23 @@ It can achieve much more performant results by utilizing lower-level memory acce - TIFFs - [Rendering SVGs](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#rendersvg) - [Rendering vector fonts](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#rendertext) -- Image manipulation functions ([crop](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#crop), [rotate](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#rotate), [composite](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#composite), ...) -- Color manipulation functions ([invert](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#invert), [hueShift](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#hueshift), ...) -- Color information functions ([averageColor](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#averagecolor), [dominantColor](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#dominantcolor), ...) -- Encoding images as [PNGs](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#encode), [JPEGs](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#encodejpeg) and [GIFs](https://oss-is.dreadful.tech/classes/_imagescript_.gif.html#encode) +- Image manipulation functions ([crop](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#crop) + , [rotate](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#rotate) + , [composite](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#composite), ...) +- Color manipulation functions ([invert](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#invert) + , [hueShift](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#hueshift), ...) +- Color information + functions ([averageColor](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#averagecolor) + , [dominantColor](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#dominantcolor), ...) +- Encoding images as [PNGs](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#encode) + , [JPEGs](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#encodejpeg) + and [GIFs](https://oss-is.dreadful.tech/classes/_imagescript_.gif.html#encode) --- -### Example -An example on how to use ImageScript in your web project can be found in [/example/](/example/). +### Usage + +An example on how to integrate ImageScript into your web project can be found in [/example/](/example/). --- diff --git a/example/index.html b/example/index.html index 0d5f6fa..78b44e3 100644 --- a/example/index.html +++ b/example/index.html @@ -8,7 +8,6 @@

ImageScript example

display)

You can find more examples on GitHub

ImageScript Example Result - diff --git a/example/runner.js b/example/runner.js index 60cc435..7b19123 100644 --- a/example/runner.js +++ b/example/runner.js @@ -1,3 +1,4 @@ +// we need to spawn a worker thread to compile large WASM (we don't want to be blocking the main thread) const worker = new Worker('worker.js'); // worker threads dont have access to the document, so we just receive the blob URI and use it as src worker.onmessage = msg => document.querySelector('#image').src = msg.data; diff --git a/example/worker.js b/example/worker.js index c970698..0e23084 100644 --- a/example/worker.js +++ b/example/worker.js @@ -1,3 +1,5 @@ +importScripts('https://cdn.jsdelivr.net/gh/matmen/imagescript@browser/browser/ImageScript.js'); + (async () => { const avatar = await fetch('https://raw.githubusercontent.com/matmen/ImageScript/master/tests/targets/readme.png').then(r => r.arrayBuffer()); const image = await ImageScript.Image.decode(avatar); From c32613bf1cf1c56b2b08e65f68337872ca48aa64 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Thu, 7 Jan 2021 15:59:01 +0100 Subject: [PATCH 008/120] dont fail the build if theres nothing to push --- .github/workflows/webpack.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/webpack.yml b/.github/workflows/webpack.yml index 34c3a5d..bb9c92d 100644 --- a/.github/workflows/webpack.yml +++ b/.github/workflows/webpack.yml @@ -26,5 +26,4 @@ jobs: - run: git config --local user.name "github-actions[bot]" - run: git config --local user.email "github-actions[bot]@users.noreply.github.com" - run: git add -A - - run: git commit -m "Update bundle" - - run: git push + - run: git commit -m "Update bundle" && git push || echo "Nothing to bundle!" From 350c7f45fae3a124e2abc52096c8034d73d807dc Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sun, 10 Jan 2021 00:21:05 +0100 Subject: [PATCH 009/120] stop wasting bytes decoding PLTE, support indexed transparency --- utils/png.js | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/utils/png.js b/utils/png.js index 81773cc..43406ec 100644 --- a/utils/png.js +++ b/utils/png.js @@ -85,9 +85,7 @@ module.exports = { let c_offset = 33; const chunks = []; - let palette; - if (array[25] === 3) - palette = new Uint32Array(2 ** bpc); + let palette, alphaPalette; let type; while (type !== 1229278788) { @@ -96,9 +94,18 @@ module.exports = { // IDAT if (type === 1229209940) chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset))); - else if (type === 1347179589) { + else if (type === 1347179589) { // PLTE + if (palette) + throw new Error('PLTE can only occur once in an image'); + palette = new Uint32Array(view.getUint32(c_offset)); for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3) palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff; + } else if (type === 1951551059) { // tRNS + if (alphaPalette) + throw new Error('tRNS can only occur once in an image'); + alphaPalette = new Uint8Array(view.getUint32(c_offset)); + for (let i = 0; i < alphaPalette.length; i++) + alphaPalette[i] = array[8 + c_offset + i]; } c_offset += 4 + 4 + 4 + view.getUint32(c_offset); @@ -119,7 +126,14 @@ module.exports = { p_offset += row_length; } - if (channels === 1 && palette) { + if (pixel_type === 3) { + if (!palette) + throw new Error('Indexed color PNG has no PLTE'); + + if (alphaPalette) + for (let i = 0; i < alphaPalette.length; i++) + palette[i] &= 0xffffff00 | alphaPalette[i]; + channels = 4; const newPixels = new Uint8Array(width * height * 4); const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength); @@ -210,4 +224,4 @@ module.exports = { } } } -}; \ No newline at end of file +}; From b5c50b3f07e6586c9851554482060bc8016045c8 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Wed, 13 Jan 2021 14:28:12 +0100 Subject: [PATCH 010/120] move rescaling ops to private functions so rescaling can be done without calling __apply__ --- ImageScript.js | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index 2096cd5..a45a9ba 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -363,8 +363,13 @@ class Image { * @returns {Image} */ scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) { + const image = this.__scale__(factor, mode); + return this.__apply__(image); + } + + __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) { if (factor === 1) return this; - return this.resize(this.width * factor, this.height * factor, mode); + return this.__resize__(this.width * factor, this.height * factor, mode); } /** @@ -376,6 +381,11 @@ class Image { * @returns {Image} The resized image */ resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) { + const image = this.__resize__(width, height, mode); + return this.__apply__(image); + } + + __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) { if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both'); else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height; else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width; @@ -387,9 +397,12 @@ class Image { if (height < 1) throw new RangeError('Image has to be at least 1 pixel high'); + let image; if (mode === Image.RESIZE_NEAREST_NEIGHBOR) - return this.__resize_nearest_neighbor__(width, height); + image = this.__resize_nearest_neighbor__(width, height); else throw new Error('Invalid resize mode'); + + return image; } /** @@ -412,9 +425,7 @@ class Image { } } - this.__apply__(image); - - return this; + return image; } /** From ce20392ba0f15201221536cfe791c3910e39e528 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 13 Jan 2021 13:36:23 +0000 Subject: [PATCH 011/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index b9dfcff..57142bd 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const n=r(347),i=r(723),s=r(876),o=r(327),a=r(76),h=r(667);class _{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,n){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&n)>>>0}static rgbToColor(t,e,r){return _.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,n){let i,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),n=Math.min(1,Math.max(0,n)),0===e)i=s=o=r;else{const n=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;i=n(h,a,t+1/3),s=n(h,a,t),o=n(h,a,t-1/3)}return _.rgbaToColor(255*i,255*s,255*o,255*n)}static hslToColor(t,e,r){return _.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,n){t/=255,e/=255,r/=255;const i=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(i+s)/2;if(i===s)o=a=0;else{const n=i-s;switch(a=h>.5?n/(2-i-s):n/(i+s),i){case t:o=(e-r)/n+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return _.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${_.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${_.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${_.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${_.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let n=1;n<=this.width;n++)this.__view__.setUint32(e,t(n,r),!1),e+=4}return this}clone(){const t=_.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=_.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.resize(this.width*t,this.height*t,e)}resize(t,e,r=_.RESIZE_NEAREST_NEIGHBOR){if(t===_.RESIZE_AUTO&&e===_.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===_.RESIZE_AUTO?t=this.width/this.height*e:e===_.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");if(r===_.RESIZE_NEAREST_NEIGHBOR)return this.__resize_nearest_neighbor__(t,e);throw new Error("Invalid resize mode")}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let n=0;nthis.width&&(r=this.width),n>this.height&&(n=this.height),this.__apply__(this.__crop__(t,e,r,n))}__crop__(t,e,r,n){t=~~t,e=~~e;const i=new this.constructor(r,n);for(let s=0;sthis.width||o>this.height)continue;const a=i(n,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,n,i){t<0&&(r+=t,t=1),e<0&&(n+=e,e=1);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),i);const a=4*(s+e*this.width),h=4*(t+e*this.width);let _=Math.max(Math.min(e+n,this.height),1);for(;e<--_;)this.bitmap.copyWithin(4*(t+_*this.width),h,a);return this}drawCircle(t,e,r,n){const i=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let n=r;n{const[i,s,o,a]=_.rgbaToHSLA(...this.getRGBAAt(r,n));return _.hslaToColor(i,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,n)=>{const[i,s,o,a]=_.rgbaToHSLA(...this.getRGBAAt(r,n));return _.hslaToColor(i,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let n=0;n=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+i*this.width),a=t.__view__.getUint32(4*(r+n*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,_.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,n=r+1,i=256-r;return(255&n*(t>>>24)+i*(e>>>24)>>8)<<24|(255&n*(t>>16&255)+i*(e>>16&255)>>8)<<16|(255&n*(t>>8&255)+i*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[n,i,s,o]=_.rgbaToHSLA(..._.colorToRGBA(r));this.__set_pixel__(t,e,_.hslaToColor(n,i,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[n,i,s,o]=_.rgbaToHSLA(..._.colorToRGBA(r));this.__set_pixel__(t,e,_.hslaToColor(n,1-i,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[n,i,s,o]=_.rgbaToHSLA(..._.colorToRGBA(r));this.__set_pixel__(t,e,_.hslaToColor(1-n,i,s,o))}return this}hueShift(t){for(const[e,r,n]of this.iterateWithColors()){const[i,s,o,a]=_.rgbaToHSLA(..._.colorToRGBA(n));this.__set_pixel__(e,r,_.hslaToColor(i+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const n=new Array(262143);for(let i=0;i~~(63*t)));if(t&&h63-r)continue;const f=o<<12|a<<6|h;n[f]=(n[f]||0)+1}let i=-1,s=0;if(n.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return _.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),n=Math.sin(r),i=Math.cos(r),s=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.width,o=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.height,a=_.new(s,o),h=s/2-.5,f=o/2-.5,l=this.width/2-.5,u=this.height/2-.5;let c=0;do{let t=0;const e=l-n*(c-f),r=u+i*(c-f);do{const s=e+i*(t-h),o=r+n*(t-h);_.__interpolate__(this,a,t,c,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),n=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>n[0];if(2===r.length){const t=this.__gradient__(n[0],n[1]);return e=>e<=r[0]?n[0]:e>=r[1]?n[1]:t((e-r[0])/(r[1]-r[0]))}const i=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=i)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const n=(r-t)**2;for(let i=1;i<=t;i++)n+(i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const n=(r-t)**2;for(let i=this.height-t;i<=this.height;i++)n+(this.height-i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const n=(this.width-r-t)**2;for(let i=1;i<=t;i++)n+(i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const n=(this.width-r-t)**2;for(let i=this.height-t;i<=this.height;i++)n+(this.height-i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,n=t>>16&255,i=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-n,h=(e>>8&255)-i,_=(255&e)-s;return t=>(255&r+t*o)<<24|(255&n+t*a)<<16|(255&i+t*h)<<8|255&s+t*_}async encode(t=1){return await n.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){t=Math.max(1,Math.min(100,t));const e=new this.constructor(this.width,this.height);return e.fill(255),e.composite(this),o.encode(this.width,this.height,t,e.bitmap)}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),2303741511===r.getUint32(0,!1)){const{width:r,height:i,pixels:s}=await n.decode(t);e=new this(r,i),e.bitmap.set(s)}else if(r.getUint32(0,!1)>>>8==16767231){if(1===await o.decode(0,t,0,0))throw new Error("Failed decoding JPEG image");const[r,n,i]=o.meta(0);e=new this(n,i);const s=o.buffer(0);if(o.free(0),0===r){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"!=typeof t&&(t=t.toString());const n=await s.rgba(0,t,r,e,e,e);if(1===n)throw new Error("Failed parsing SVG");if(2===n)throw new Error("Failed rendering SVG");const i=new this(...s.meta(0));return i.bitmap.set(s.buffer(0)),s.free(0),i}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,r,n=4294967295,s=1/0,o=this.WRAP_STYLE_WORD){const[a,h,f,l]=_.colorToRGBA(n);await i.load(0,t,e),i.render(0,0,e,a,h,f,r,s===1/0?null:s,o);const u=i.buffer(0),[c,w]=i.meta(0);i.free(0);const g=new this(c,w);return g.bitmap.set(u),g.opacity(l/255),g}}class f extends _{constructor(t,e,r=100){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof _))throw new TypeError("Invalid image passed");const r=new f(t.width,t.height,e);return r.bitmap.set(t.bitmap),r}}t.exports={Image:_,GIF:class extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof f))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){const e=await h.GIFEncoder.initialize(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof f))throw new Error("GIF contains invalid frames");e.add(~~(r.duration/10),t,r.bitmap)}const r=e.buffer();return e.free(),r}},Frame:f}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.14","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let r=0;for(const n of t)e.set(n,r),r+=n.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,n=4294967295;for(;r>>8,n=e[255&(n^t[r++])]^n>>>8,n=e[255&(n^t[r++])]^n>>>8,n=e[255&(n^t[r++])]^n>>>8;for(;r>>8;return(4294967295^n)>>>0}},347:(t,e,r)=>{const n=r(883),i=r(354),{compress:s,decompress:o}=r(423),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),l=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:r,channels:i,depth:o=8,level:c=0}){let w=0,g=0;const b=e*i,d=new Uint8Array(r+t.length);for(;w>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,n,i){let s=0;if(0===r){for(;s{const{version:n}=r(306);let i,s,o,a;const h=new TextEncoder;function _(){return i.buffer===a.memory.buffer?i:i=new Uint8Array(a.memory.buffer)}function f(){return s.buffer===a.memory.buffer?s:s=new Int32Array(a.memory.buffer)}t.exports={render(t,e,r,n,i,s,o,f,l=!1){const u=function(t){let e=0,r=t.length,n=a.__wbindgen_malloc(t.length);const i=_();for(;r>e;){const r=t.charCodeAt(e);if(r>127)break;i[n+e++]=r}return e!==r&&(0!==e&&(t=t.substring(e)),n=a.__wbindgen_realloc(n,r,r=e+3*t.length),e+=h.encodeInto(t,_().subarray(n+e,n+r)).written),[n,e]}(o);a.render(t,e,r,n,i,s,u[0],u[1],!(null==f),f||0,l)},buffer(t){a.buffer(8,t);const e=f(),r=(n=e[2],i=e[3],_().subarray(n,n+i)).slice();var n,i;return a.__wbindgen_free(e[2],e[3]),r},meta(t){a.meta(8,t);const e=f(),r=(n=e[2],i=e[3],(o.buffer===a.memory.buffer?o:o=new Uint32Array(a.memory.buffer)).subarray(n/4,n/4+i)).slice();var n,i;return a.__wbindgen_free(e[2],4*e[3]),r},async load(t,e,r=128){if(!a){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/font.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);a=e.exports,i=new Uint8Array(a.memory.buffer),s=new Int32Array(a.memory.buffer),o=new Uint32Array(a.memory.buffer)}a.load(t,function(t){const e=a.__wbindgen_malloc(t.length);return _().set(t,e),e}(e),e.length,r)},free(t){a.free(t)}}},667:(t,e,r)=>{const{version:n}=r(306);let i,s=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});s.decode();let o=null;function a(){return null!==o&&o.buffer===i.memory.buffer||(o=new Uint8Array(i.memory.buffer)),o}let h=null;function _(){return null!==h&&h.buffer===i.memory.buffer||(h=new Int32Array(i.memory.buffer)),h}let f=0;class l{free(){i.__wbg_gif_encoder_free(this.ptr)}static async initialize(t,e,r){if(!i){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/gif.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t,{__wbindgen_placeholder__:{__wbindgen_throw:function(t,e){throw new Error((r=t,n=e,s.decode(a().subarray(r,r+n))));var r,n}}});i=e.exports}const o=i.gif_encoder_new(t,e,r);return new l(o)}constructor(t){this.ptr=t}buffer(){try{const r=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=r,i.gif_encoder_buffer(r,this.ptr);const n=_()[r/4],s=_()[r/4+1],o=(t=n,e=s,a().subarray(t/1,t/1+e)).slice();return i.__wbindgen_free(n,1*s),o}finally{i.__wbindgen_export_0.value+=16}var t,e}add(t,e,r){const n=function(t,e){const r=e(1*t.length);return a().set(t,r/1),f=t.length,r}(r,i.__wbindgen_malloc);i.gif_encoder_add(this.ptr,t,e,n,f)}}t.exports={GIFEncoder:l}},327:(t,e,r)=>{const{version:n}=r(306);let i,s=null;function o(){return null!==s&&s.buffer===i.memory.buffer||(s=new Uint8Array(i.memory.buffer)),s}let a=0;function h(t,e){const r=e(1*t.length);return o().set(t,r/1),a=t.length,r}let _=null;function f(){return null!==_&&_.buffer===i.memory.buffer||(_=new Int32Array(i.memory.buffer)),_}function l(t,e){return o().subarray(t/1,t/1+e)}let u=null;async function c(){if(i)return;const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/jpeg.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);i=e.exports}t.exports={async encode(t,e,r,n){await c();try{const s=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=s;const o=h(n,i.__wbindgen_malloc);i.encode(s,t,e,r,o,a);const _=f()[s/4],u=f()[s/4+1],c=l(_,u).slice();return i.__wbindgen_free(_,1*u),c}finally{i.__wbindgen_export_0.value+=16}},async decode(t,e,r,n){await c();const s=h(e,i.__wbindgen_malloc);return i.decode(t,s,a,r,n)},meta(t){try{const n=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=n,i.meta(n,t);const s=f()[n/4],o=f()[n/4+1],a=(e=s,r=o,(null!==u&&u.buffer===i.memory.buffer||(u=new Uint16Array(i.memory.buffer)),u).subarray(e/2,e/2+r)).slice();return i.__wbindgen_free(s,2*o),a}finally{i.__wbindgen_export_0.value+=16}var e,r},buffer(t){try{const e=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=e,i.buffer(e,t);const r=f()[e/4],n=f()[e/4+1],s=l(r,n).slice();return i.__wbindgen_free(r,1*n),s}finally{i.__wbindgen_export_0.value+=16}},free(t){i.free(t)}}},876:(t,e,r)=>{const{version:n}=r(306);let i,s=0,o=null;function a(){return null!==o&&o.buffer===i.memory.buffer||(o=new Uint8Array(i.memory.buffer)),o}let h=new TextEncoder;const _="function"==typeof h.encodeInto?function(t,e){return h.encodeInto(t,e)}:function(t,e){const r=h.encode(t);return e.set(r),{read:t.length,written:r.length}};let f=null;function l(){return null!==f&&f.buffer===i.memory.buffer||(f=new Int32Array(i.memory.buffer)),f}let u=null;t.exports={async rgba(t,e,r,o,h,f){if(!i){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/svg.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);i=e.exports}const l=function(t,e,r){if(void 0===r){const r=(new TextEncoder).encode(t),n=e(r.length);return a().subarray(n,n+r.length).set(r),s=r.length,n}let n=t.length,i=e(n);const o=a();let h=0;for(;h127)break;o[i+h]=e}if(h!==n){0!==h&&(t=t.slice(h)),i=r(i,n,n=h+3*t.length);const e=a().subarray(i+h,i+n);h+=_(t,e).written}return s=h,i}(e,i.__wbindgen_malloc,i.__wbindgen_realloc);return i.rgba(t,l,s,r,o,h,f)},meta(t){try{const n=i.__wbindgen_export_2.value-16;i.__wbindgen_export_2.value=n,i.meta(n,t);const s=l()[n/4],o=l()[n/4+1],a=(e=s,r=o,(null!==u&&u.buffer===i.memory.buffer||(u=new Uint32Array(i.memory.buffer)),u).subarray(e/4,e/4+r)).slice();return i.__wbindgen_free(s,4*o),a}finally{i.__wbindgen_export_2.value+=16}var e,r},buffer(t){try{const n=i.__wbindgen_export_2.value-16;i.__wbindgen_export_2.value=n,i.buffer(n,t);const s=l()[n/4],o=l()[n/4+1],h=(e=s,r=o,a().subarray(e,e+r)).slice();return i.__wbindgen_free(s,o),h}finally{i.__wbindgen_export_2.value+=16}var e,r},free(t){i.free(t)}}},76:(t,e,r)=>{const{version:n}=r(306);let i,s=null;function o(){return null!==s&&s.buffer===i.memory.buffer||(s=new Uint8Array(i.memory.buffer)),s}let a=0,h=null;function _(){return null!==h&&h.buffer===i.memory.buffer||(h=new Int32Array(i.memory.buffer)),h}let f=null;t.exports={async decode(t,e){if(!i){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/tiff.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);i=e.exports}const r=function(t,e){const r=e(1*t.length);return o().set(t,r/1),a=t.length,r}(e,i.__wbindgen_malloc);return i.decode(t,r,a)},meta(t){try{const n=i.__wbindgen_export_1.value-16;i.__wbindgen_export_1.value=n,i.meta(n,t);const s=_()[n/4],o=_()[n/4+1],a=(e=s,r=o,(null!==f&&f.buffer===i.memory.buffer||(f=new Uint32Array(i.memory.buffer)),f).subarray(e/4,e/4+r)).slice();return i.__wbindgen_free(s,4*o),a}finally{i.__wbindgen_export_1.value+=16}var e,r},buffer(t){try{const n=i.__wbindgen_export_1.value-16;i.__wbindgen_export_1.value=n,i.buffer(n,t);const s=_()[n/4],a=_()[n/4+1],h=(e=s,r=a,o().subarray(e/1,e/1+r)).slice();return i.__wbindgen_free(s,1*a),h}finally{i.__wbindgen_export_1.value+=16}var e,r},free(t){i.free(t)}}},423:(t,e,r)=>{const{version:n}=r(306);async function i(){let t;{const e=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/zlib.wasm`).then((t=>t.arrayBuffer()))),r=new WebAssembly.Instance(e);t=r.exports}let e=new Uint8Array(t.memory.buffer),r=new Int32Array(t.memory.buffer);function i(){return e.buffer===t.memory.buffer?e:e=new Uint8Array(t.memory.buffer)}function s(){return r.buffer===t.memory.buffer?r:r=new Int32Array(t.memory.buffer)}function o(t,e){return i().subarray(t,t+e)}function a(e){const r=t.__wbindgen_malloc(e.length);return i().set(e,r),r}return{compress(e,r){const n=a(e);t.compress(8,n,e.length,r);const i=s(),h=o(i[2],i[3]).slice();return t.__wbindgen_free(i[2],i[3]),h},decompress(e,r){const n=a(e);try{t.decompress(8,n,e.length,r);const i=s(),a=o(i[2],i[3]).slice();return t.__wbindgen_free(i[2],i[3]),a}catch{throw t.__wbindgen_free(n,e.length),new Error("zlib: panic")}}}}t.exports={async compress(e,r){const{compress:n}=t.exports=await i();return n(e,r)},async decompress(e,r){const{decompress:n}=t.exports=await i();return n(e,r)}}}},e={},function r(n){if(e[n])return e[n].exports;var i=e[n]={exports:{}};return t[n](i,i.exports,r),i.exports}(655);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const n=r(347),i=r(723),s=r(876),o=r(327),a=r(76),h=r(667);class _{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,n){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&n)>>>0}static rgbToColor(t,e,r){return _.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,n){let i,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),n=Math.min(1,Math.max(0,n)),0===e)i=s=o=r;else{const n=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;i=n(h,a,t+1/3),s=n(h,a,t),o=n(h,a,t-1/3)}return _.rgbaToColor(255*i,255*s,255*o,255*n)}static hslToColor(t,e,r){return _.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,n){t/=255,e/=255,r/=255;const i=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(i+s)/2;if(i===s)o=a=0;else{const n=i-s;switch(a=h>.5?n/(2-i-s):n/(i+s),i){case t:o=(e-r)/n+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return _.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${_.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${_.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${_.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${_.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let n=1;n<=this.width;n++)this.__view__.setUint32(e,t(n,r),!1),e+=4}return this}clone(){const t=_.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=_.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=_.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=_.RESIZE_NEAREST_NEIGHBOR){const n=this.__resize__(t,e,r);return this.__apply__(n)}__resize__(t,e,r=_.RESIZE_NEAREST_NEIGHBOR){if(t===_.RESIZE_AUTO&&e===_.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===_.RESIZE_AUTO?t=this.width/this.height*e:e===_.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let n;if(r!==_.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return n=this.__resize_nearest_neighbor__(t,e),n}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let n=0;nthis.width&&(r=this.width),n>this.height&&(n=this.height),this.__apply__(this.__crop__(t,e,r,n))}__crop__(t,e,r,n){t=~~t,e=~~e;const i=new this.constructor(r,n);for(let s=0;sthis.width||o>this.height)continue;const a=i(n,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,n,i){t<0&&(r+=t,t=1),e<0&&(n+=e,e=1);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),i);const a=4*(s+e*this.width),h=4*(t+e*this.width);let _=Math.max(Math.min(e+n,this.height),1);for(;e<--_;)this.bitmap.copyWithin(4*(t+_*this.width),h,a);return this}drawCircle(t,e,r,n){const i=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let n=r;n{const[i,s,o,a]=_.rgbaToHSLA(...this.getRGBAAt(r,n));return _.hslaToColor(i,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,n)=>{const[i,s,o,a]=_.rgbaToHSLA(...this.getRGBAAt(r,n));return _.hslaToColor(i,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let n=0;n=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+i*this.width),a=t.__view__.getUint32(4*(r+n*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,_.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,n=r+1,i=256-r;return(255&n*(t>>>24)+i*(e>>>24)>>8)<<24|(255&n*(t>>16&255)+i*(e>>16&255)>>8)<<16|(255&n*(t>>8&255)+i*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[n,i,s,o]=_.rgbaToHSLA(..._.colorToRGBA(r));this.__set_pixel__(t,e,_.hslaToColor(n,i,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[n,i,s,o]=_.rgbaToHSLA(..._.colorToRGBA(r));this.__set_pixel__(t,e,_.hslaToColor(n,1-i,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[n,i,s,o]=_.rgbaToHSLA(..._.colorToRGBA(r));this.__set_pixel__(t,e,_.hslaToColor(1-n,i,s,o))}return this}hueShift(t){for(const[e,r,n]of this.iterateWithColors()){const[i,s,o,a]=_.rgbaToHSLA(..._.colorToRGBA(n));this.__set_pixel__(e,r,_.hslaToColor(i+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const n=new Array(262143);for(let i=0;i~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;n[l]=(n[l]||0)+1}let i=-1,s=0;if(n.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return _.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),n=Math.sin(r),i=Math.cos(r),s=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.width,o=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.height,a=_.new(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,c=this.height/2-.5;let u=0;do{let t=0;const e=f-n*(u-l),r=c+i*(u-l);do{const s=e+i*(t-h),o=r+n*(t-h);_.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),n=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>n[0];if(2===r.length){const t=this.__gradient__(n[0],n[1]);return e=>e<=r[0]?n[0]:e>=r[1]?n[1]:t((e-r[0])/(r[1]-r[0]))}const i=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=i)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const n=(r-t)**2;for(let i=1;i<=t;i++)n+(i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const n=(r-t)**2;for(let i=this.height-t;i<=this.height;i++)n+(this.height-i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const n=(this.width-r-t)**2;for(let i=1;i<=t;i++)n+(i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const n=(this.width-r-t)**2;for(let i=this.height-t;i<=this.height;i++)n+(this.height-i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,n=t>>16&255,i=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-n,h=(e>>8&255)-i,_=(255&e)-s;return t=>(255&r+t*o)<<24|(255&n+t*a)<<16|(255&i+t*h)<<8|255&s+t*_}async encode(t=1){return await n.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){t=Math.max(1,Math.min(100,t));const e=new this.constructor(this.width,this.height);return e.fill(255),e.composite(this),o.encode(this.width,this.height,t,e.bitmap)}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),2303741511===r.getUint32(0,!1)){const{width:r,height:i,pixels:s}=await n.decode(t);e=new this(r,i),e.bitmap.set(s)}else if(r.getUint32(0,!1)>>>8==16767231){if(1===await o.decode(0,t,0,0))throw new Error("Failed decoding JPEG image");const[r,n,i]=o.meta(0);e=new this(n,i);const s=o.buffer(0);if(o.free(0),0===r){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"!=typeof t&&(t=t.toString());const n=await s.rgba(0,t,r,e,e,e);if(1===n)throw new Error("Failed parsing SVG");if(2===n)throw new Error("Failed rendering SVG");const i=new this(...s.meta(0));return i.bitmap.set(s.buffer(0)),s.free(0),i}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,r,n=4294967295,s=1/0,o=this.WRAP_STYLE_WORD){const[a,h,l,f]=_.colorToRGBA(n);await i.load(0,t,e),i.render(0,0,e,a,h,l,r,s===1/0?null:s,o);const c=i.buffer(0),[u,w]=i.meta(0);i.free(0);const g=new this(u,w);return g.bitmap.set(c),g.opacity(f/255),g}}class l extends _{constructor(t,e,r=100){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof _))throw new TypeError("Invalid image passed");const r=new l(t.width,t.height,e);return r.bitmap.set(t.bitmap),r}}t.exports={Image:_,GIF:class extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof l))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){const e=await h.GIFEncoder.initialize(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof l))throw new Error("GIF contains invalid frames");e.add(~~(r.duration/10),t,r.bitmap)}const r=e.buffer();return e.free(),r}},Frame:l}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.14","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let r=0;for(const n of t)e.set(n,r),r+=n.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,n=4294967295;for(;r>>8,n=e[255&(n^t[r++])]^n>>>8,n=e[255&(n^t[r++])]^n>>>8,n=e[255&(n^t[r++])]^n>>>8;for(;r>>8;return(4294967295^n)>>>0}},347:(t,e,r)=>{const n=r(883),i=r(354),{compress:s,decompress:o}=r(423),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),l=n(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),c={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:r,channels:i,depth:o=8,level:u=0}){let w=0,g=0;const b=e*i,d=new Uint8Array(r+t.length);for(;w>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,n,i){let s=0;if(0===r){for(;s{const{version:n}=r(306);let i,s,o,a;const h=new TextEncoder;function _(){return i.buffer===a.memory.buffer?i:i=new Uint8Array(a.memory.buffer)}function l(){return s.buffer===a.memory.buffer?s:s=new Int32Array(a.memory.buffer)}t.exports={render(t,e,r,n,i,s,o,l,f=!1){const c=function(t){let e=0,r=t.length,n=a.__wbindgen_malloc(t.length);const i=_();for(;r>e;){const r=t.charCodeAt(e);if(r>127)break;i[n+e++]=r}return e!==r&&(0!==e&&(t=t.substring(e)),n=a.__wbindgen_realloc(n,r,r=e+3*t.length),e+=h.encodeInto(t,_().subarray(n+e,n+r)).written),[n,e]}(o);a.render(t,e,r,n,i,s,c[0],c[1],!(null==l),l||0,f)},buffer(t){a.buffer(8,t);const e=l(),r=(n=e[2],i=e[3],_().subarray(n,n+i)).slice();var n,i;return a.__wbindgen_free(e[2],e[3]),r},meta(t){a.meta(8,t);const e=l(),r=(n=e[2],i=e[3],(o.buffer===a.memory.buffer?o:o=new Uint32Array(a.memory.buffer)).subarray(n/4,n/4+i)).slice();var n,i;return a.__wbindgen_free(e[2],4*e[3]),r},async load(t,e,r=128){if(!a){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/font.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);a=e.exports,i=new Uint8Array(a.memory.buffer),s=new Int32Array(a.memory.buffer),o=new Uint32Array(a.memory.buffer)}a.load(t,function(t){const e=a.__wbindgen_malloc(t.length);return _().set(t,e),e}(e),e.length,r)},free(t){a.free(t)}}},667:(t,e,r)=>{const{version:n}=r(306);let i,s=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});s.decode();let o=null;function a(){return null!==o&&o.buffer===i.memory.buffer||(o=new Uint8Array(i.memory.buffer)),o}let h=null;function _(){return null!==h&&h.buffer===i.memory.buffer||(h=new Int32Array(i.memory.buffer)),h}let l=0;class f{free(){i.__wbg_gif_encoder_free(this.ptr)}static async initialize(t,e,r){if(!i){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/gif.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t,{__wbindgen_placeholder__:{__wbindgen_throw:function(t,e){throw new Error((r=t,n=e,s.decode(a().subarray(r,r+n))));var r,n}}});i=e.exports}const o=i.gif_encoder_new(t,e,r);return new f(o)}constructor(t){this.ptr=t}buffer(){try{const r=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=r,i.gif_encoder_buffer(r,this.ptr);const n=_()[r/4],s=_()[r/4+1],o=(t=n,e=s,a().subarray(t/1,t/1+e)).slice();return i.__wbindgen_free(n,1*s),o}finally{i.__wbindgen_export_0.value+=16}var t,e}add(t,e,r){const n=function(t,e){const r=e(1*t.length);return a().set(t,r/1),l=t.length,r}(r,i.__wbindgen_malloc);i.gif_encoder_add(this.ptr,t,e,n,l)}}t.exports={GIFEncoder:f}},327:(t,e,r)=>{const{version:n}=r(306);let i,s=null;function o(){return null!==s&&s.buffer===i.memory.buffer||(s=new Uint8Array(i.memory.buffer)),s}let a=0;function h(t,e){const r=e(1*t.length);return o().set(t,r/1),a=t.length,r}let _=null;function l(){return null!==_&&_.buffer===i.memory.buffer||(_=new Int32Array(i.memory.buffer)),_}function f(t,e){return o().subarray(t/1,t/1+e)}let c=null;async function u(){if(i)return;const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/jpeg.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);i=e.exports}t.exports={async encode(t,e,r,n){await u();try{const s=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=s;const o=h(n,i.__wbindgen_malloc);i.encode(s,t,e,r,o,a);const _=l()[s/4],c=l()[s/4+1],u=f(_,c).slice();return i.__wbindgen_free(_,1*c),u}finally{i.__wbindgen_export_0.value+=16}},async decode(t,e,r,n){await u();const s=h(e,i.__wbindgen_malloc);return i.decode(t,s,a,r,n)},meta(t){try{const n=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=n,i.meta(n,t);const s=l()[n/4],o=l()[n/4+1],a=(e=s,r=o,(null!==c&&c.buffer===i.memory.buffer||(c=new Uint16Array(i.memory.buffer)),c).subarray(e/2,e/2+r)).slice();return i.__wbindgen_free(s,2*o),a}finally{i.__wbindgen_export_0.value+=16}var e,r},buffer(t){try{const e=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=e,i.buffer(e,t);const r=l()[e/4],n=l()[e/4+1],s=f(r,n).slice();return i.__wbindgen_free(r,1*n),s}finally{i.__wbindgen_export_0.value+=16}},free(t){i.free(t)}}},876:(t,e,r)=>{const{version:n}=r(306);let i,s=0,o=null;function a(){return null!==o&&o.buffer===i.memory.buffer||(o=new Uint8Array(i.memory.buffer)),o}let h=new TextEncoder;const _="function"==typeof h.encodeInto?function(t,e){return h.encodeInto(t,e)}:function(t,e){const r=h.encode(t);return e.set(r),{read:t.length,written:r.length}};let l=null;function f(){return null!==l&&l.buffer===i.memory.buffer||(l=new Int32Array(i.memory.buffer)),l}let c=null;t.exports={async rgba(t,e,r,o,h,l){if(!i){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/svg.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);i=e.exports}const f=function(t,e,r){if(void 0===r){const r=(new TextEncoder).encode(t),n=e(r.length);return a().subarray(n,n+r.length).set(r),s=r.length,n}let n=t.length,i=e(n);const o=a();let h=0;for(;h127)break;o[i+h]=e}if(h!==n){0!==h&&(t=t.slice(h)),i=r(i,n,n=h+3*t.length);const e=a().subarray(i+h,i+n);h+=_(t,e).written}return s=h,i}(e,i.__wbindgen_malloc,i.__wbindgen_realloc);return i.rgba(t,f,s,r,o,h,l)},meta(t){try{const n=i.__wbindgen_export_2.value-16;i.__wbindgen_export_2.value=n,i.meta(n,t);const s=f()[n/4],o=f()[n/4+1],a=(e=s,r=o,(null!==c&&c.buffer===i.memory.buffer||(c=new Uint32Array(i.memory.buffer)),c).subarray(e/4,e/4+r)).slice();return i.__wbindgen_free(s,4*o),a}finally{i.__wbindgen_export_2.value+=16}var e,r},buffer(t){try{const n=i.__wbindgen_export_2.value-16;i.__wbindgen_export_2.value=n,i.buffer(n,t);const s=f()[n/4],o=f()[n/4+1],h=(e=s,r=o,a().subarray(e,e+r)).slice();return i.__wbindgen_free(s,o),h}finally{i.__wbindgen_export_2.value+=16}var e,r},free(t){i.free(t)}}},76:(t,e,r)=>{const{version:n}=r(306);let i,s=null;function o(){return null!==s&&s.buffer===i.memory.buffer||(s=new Uint8Array(i.memory.buffer)),s}let a=0,h=null;function _(){return null!==h&&h.buffer===i.memory.buffer||(h=new Int32Array(i.memory.buffer)),h}let l=null;t.exports={async decode(t,e){if(!i){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/tiff.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);i=e.exports}const r=function(t,e){const r=e(1*t.length);return o().set(t,r/1),a=t.length,r}(e,i.__wbindgen_malloc);return i.decode(t,r,a)},meta(t){try{const n=i.__wbindgen_export_1.value-16;i.__wbindgen_export_1.value=n,i.meta(n,t);const s=_()[n/4],o=_()[n/4+1],a=(e=s,r=o,(null!==l&&l.buffer===i.memory.buffer||(l=new Uint32Array(i.memory.buffer)),l).subarray(e/4,e/4+r)).slice();return i.__wbindgen_free(s,4*o),a}finally{i.__wbindgen_export_1.value+=16}var e,r},buffer(t){try{const n=i.__wbindgen_export_1.value-16;i.__wbindgen_export_1.value=n,i.buffer(n,t);const s=_()[n/4],a=_()[n/4+1],h=(e=s,r=a,o().subarray(e/1,e/1+r)).slice();return i.__wbindgen_free(s,1*a),h}finally{i.__wbindgen_export_1.value+=16}var e,r},free(t){i.free(t)}}},423:(t,e,r)=>{const{version:n}=r(306);async function i(){let t;{const e=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/zlib.wasm`).then((t=>t.arrayBuffer()))),r=new WebAssembly.Instance(e);t=r.exports}let e=new Uint8Array(t.memory.buffer),r=new Int32Array(t.memory.buffer);function i(){return e.buffer===t.memory.buffer?e:e=new Uint8Array(t.memory.buffer)}function s(){return r.buffer===t.memory.buffer?r:r=new Int32Array(t.memory.buffer)}function o(t,e){return i().subarray(t,t+e)}function a(e){const r=t.__wbindgen_malloc(e.length);return i().set(e,r),r}return{compress(e,r){const n=a(e);t.compress(8,n,e.length,r);const i=s(),h=o(i[2],i[3]).slice();return t.__wbindgen_free(i[2],i[3]),h},decompress(e,r){const n=a(e);try{t.decompress(8,n,e.length,r);const i=s(),a=o(i[2],i[3]).slice();return t.__wbindgen_free(i[2],i[3]),a}catch{throw t.__wbindgen_free(n,e.length),new Error("zlib: panic")}}}}t.exports={async compress(e,r){const{compress:n}=t.exports=await i();return n(e,r)},async decompress(e,r){const{decompress:n}=t.exports=await i();return n(e,r)}}}},e={},function r(n){if(e[n])return e[n].exports;var i=e[n]={exports:{}};return t[n](i,i.exports,r),i.exports}(655);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index 93dde59..86e0db9 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","resize","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__apply__","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","jpegCanvas","composite","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","pixelType","meta","free","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","toString","status","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","load","render","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","GIFEncoder","initialize","add","encoded","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","0","6","bytespp","p_offset","c_offset","chunks","palette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","u8array_ref","i32array_ref","u32array_ref","wasm","utf8encoder","TextEncoder","u8array","memory","i32array","Int32Array","ptr","id","max_width","wrap_style","str","string","len","__wbindgen_malloc","u8","code","charCodeAt","substring","__wbindgen_realloc","encodeInto","written","string_to_ptr","i32","__wbindgen_free","WebAssembly","Module","fetch","then","arrayBuffer","instance","Instance","u8array_to_ptr","cachedTextDecoder","TextDecoder","ignoreBOM","fatal","cachegetUint8Memory0","getUint8Memory0","cachegetInt32Memory0","getInt32Memory0","WASM_VECTOR_LEN","__wbg_gif_encoder_free","repeat","__wbindgen_placeholder__","__wbindgen_throw","arg0","arg1","ret","gif_encoder_new","retptr","__wbindgen_export_0","gif_encoder_buffer","r0","r1","v0","delay","ptr0","arg","malloc","passArray8ToWasm0","gif_encoder_add","getArrayU8FromWasm0","cachegetUint16Memory0","async","initWASM","v1","Uint16Array","cachedTextEncoder","encodeString","buf","read","cachegetUint32Memory0","fit_kind","zoom","realloc","mem","passStringToWasm0","__wbindgen_export_2","__wbindgen_export_1","ptr_to_u8array","limit","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32((~~y - 1) * this.width + (~~x - 1), false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.resize(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n return this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n this.__apply__(image);\n\n return this;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n quality = Math.max(1, Math.min(100, quality));\n const jpegCanvas = new this.constructor(this.width, this.height);\n jpegCanvas.fill(0xff);\n jpegCanvas.composite(this);\n return jpeglib.encode(this.width, this.height, quality, jpegCanvas.bitmap);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n const status = await jpeglib.decode(0, data, 0, 0);\n if (status === 1) throw new Error('Failed decoding JPEG image');\n const [pixelType, width, height] = jpeglib.meta(0);\n image = new this(width, height);\n const buffer = jpeglib.buffer(0);\n jpeglib.free(0);\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n const status = await tifflib.decode(0, data);\n if (status === 1) throw new Error('Failed decoding TIFF image');\n const meta = tifflib.meta(0);\n const buffer = tifflib.buffer(0);\n tifflib.free(0);\n\n image = new this(...meta);\n image.bitmap.set(buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg !== 'string')\n svg = svg.toString();\n\n const status = await svglib.rgba(0, svg, mode, size, size, size);\n if (status === 1) throw new Error('Failed parsing SVG');\n if (status === 2) throw new Error('Failed rendering SVG');\n const meta = svglib.meta(0);\n const image = new this(...meta);\n image.bitmap.set(svglib.buffer(0));\n svglib.free(0);\n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n const [r, g, b, a] = Image.colorToRGBA(color);\n await fontlib.load(0, font, scale);\n fontlib.render(0, 0, scale, r, g, b, text, wrapWidth === Infinity ? null : wrapWidth, wrapStyle);\n const buffer = fontlib.buffer(0);\n const [width, height] = fontlib.meta(0);\n fontlib.free(0);\n const image = new this(width, height);\n image.bitmap.set(buffer);\n image.opacity(a / 0xff);\n\n return image;\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n const encoder = await giflib.GIFEncoder.initialize(this.width, this.height, this.loopCount);\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), quality, frame.bitmap);\n }\n\n const encoded = encoder.buffer();\n encoder.free();\n return encoded;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n const compressed = await compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette;\n if (array[25] === 3)\n palette = new Uint32Array(2 ** bpc);\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) {\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n array = await decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (channels === 1 && palette) {\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const {version} = require('../../package.json');\nlet u8array_ref, i32array_ref, u32array_ref, wasm;\n\nconst utf8encoder = new TextEncoder();\n\nfunction u8array() {\n return u8array_ref.buffer === wasm.memory.buffer ? u8array_ref : (u8array_ref = new Uint8Array(wasm.memory.buffer));\n}\n\nfunction i32array() {\n return i32array_ref.buffer === wasm.memory.buffer ? i32array_ref : (i32array_ref = new Int32Array(wasm.memory.buffer));\n}\n\nfunction u32array() {\n return u32array_ref.buffer === wasm.memory.buffer ? u32array_ref : (u32array_ref = new Uint32Array(wasm.memory.buffer));\n}\n\nfunction ptr_to_u8array(ptr, len) {\n return u8array().subarray(ptr, ptr + len);\n}\n\nfunction ptr_to_u32array(ptr, len) {\n return u32array().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction u8array_to_ptr(buffer) {\n const ptr = wasm.__wbindgen_malloc(buffer.length);\n u8array().set(buffer, ptr);\n\n return ptr;\n}\n\nfunction string_to_ptr(string) {\n let offset = 0;\n let len = string.length;\n let ptr = wasm.__wbindgen_malloc(string.length);\n\n const u8 = u8array();\n while (len > offset) {\n const code = string.charCodeAt(offset);\n\n if (code > 0x7F) break;\n u8[ptr + offset++] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) string = string.substring(offset);\n ptr = wasm.__wbindgen_realloc(ptr, len, len = offset + string.length * 3);\n const ret = utf8encoder.encodeInto(string, u8array().subarray(ptr + offset, ptr + len));\n\n offset += ret.written;\n }\n\n return [ptr, offset];\n}\n\nconst nullish = x => x == null;\n\nmodule.exports = {\n render(ptr, id, scale, r, g, b, text, max_width, wrap_style = false) {\n const str = string_to_ptr(text);\n wasm.render(ptr, id, scale, r, g, b, str[0], str[1], !nullish(max_width), max_width || 0, wrap_style);\n },\n buffer(id) {\n wasm.buffer(8, id);\n const i32 = i32array();\n const slice = ptr_to_u8array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], i32[3]);\n\n return slice;\n },\n meta(id) {\n wasm.meta(8, id);\n const i32 = i32array();\n const slice = ptr_to_u32array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], 4 * i32[3]);\n\n return slice;\n },\n async load(id, buffer, scale = 128) {\n if (!wasm) {\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n u8array_ref = new Uint8Array(wasm.memory.buffer);\n i32array_ref = new Int32Array(wasm.memory.buffer);\n u32array_ref = new Uint32Array(wasm.memory.buffer);\n }\n\n wasm.load(id, u8array_to_ptr(buffer), buffer.length, scale);\n },\n free(id) {\n wasm.free(id);\n }\n}\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet cachedTextDecoder = new TextDecoder('utf-8', {ignoreBOM: true, fatal: true});\n\ncachedTextDecoder.decode();\n\nlet cachegetUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n\tif (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n\t}\n\treturn cachegetUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n\treturn cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n\tif (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n\t}\n\treturn cachegetInt32Memory0;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n\treturn getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray8ToWasm0(arg, malloc) {\n\tconst ptr = malloc(arg.length * 1);\n\tgetUint8Memory0().set(arg, ptr / 1);\n\tWASM_VECTOR_LEN = arg.length;\n\treturn ptr;\n}\n\nclass GIFEncoder {\n\tfree() {\n\t\twasm.__wbg_gif_encoder_free(this.ptr);\n\t}\n\n\t/**\n\t * @param {number} width\n\t * @param {number} height\n\t * @param {number} repeat\n\t */\n\tstatic async initialize(width, height, repeat) {\n\t\tif (!wasm) {\n\t\t\tconst module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(r => r.arrayBuffer()));\n\t\t\tconst instance = new WebAssembly.Instance(module, {\n\t\t\t\t__wbindgen_placeholder__: {\n\t\t\t\t\t__wbindgen_throw: function (arg0, arg1) {\n\t\t\t\t\t\tthrow new Error(getStringFromWasm0(arg0, arg1));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\twasm = instance.exports;\n\t\t}\n\n\t\tconst ret = wasm.gif_encoder_new(width, height, repeat);\n\t\treturn new GIFEncoder(ret);\n\t}\n\n\tconstructor(ptr) {\n\t\tthis.ptr = ptr;\n\t}\n\n\t/**\n\t * @returns {Uint8Array}\n\t */\n\tbuffer() {\n\t\ttry {\n\t\t\tconst retptr = wasm.__wbindgen_export_0.value - 16;\n\t\t\twasm.__wbindgen_export_0.value = retptr;\n\t\t\twasm.gif_encoder_buffer(retptr, this.ptr);\n\t\t\tconst r0 = getInt32Memory0()[retptr / 4];\n\t\t\tconst r1 = getInt32Memory0()[retptr / 4 + 1];\n\t\t\tconst v0 = getArrayU8FromWasm0(r0, r1).slice();\n\t\t\twasm.__wbindgen_free(r0, r1 * 1);\n\t\t\treturn v0;\n\t\t} finally {\n\t\t\twasm.__wbindgen_export_0.value += 16;\n\t\t}\n\t}\n\n\t/**\n\t * @param {number} delay\n\t * @param {number} quality\n\t * @param {Uint8Array} buffer\n\t */\n\tadd(delay, quality, buffer) {\n\t\tconst ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n\t\twasm.gif_encoder_add(this.ptr, delay, quality, ptr0, WASM_VECTOR_LEN);\n\t}\n}\n\nmodule.exports = {GIFEncoder};\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet cachegetUint8Memory0 = null;\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1);\n getUint8Memory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachegetUint16Memory0 = null;\n\nfunction getUint16Memory0() {\n if (cachegetUint16Memory0 === null || cachegetUint16Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint16Memory0 = new Uint16Array(wasm.memory.buffer);\n }\n return cachegetUint16Memory0;\n}\n\nfunction getArrayU16FromWasm0(ptr, len) {\n return getUint16Memory0().subarray(ptr / 2, ptr / 2 + len);\n}\n\nasync function initWASM() {\n if (wasm) return;\n\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n wasm = instance.exports;\n}\n\nmodule.exports = {\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} quality\n * @param {Uint8Array|Uint8ClampedArray} buffer\n * @returns {Uint8Array}\n */\n async encode(width, height, quality, buffer) {\n await initWASM();\n\n try {\n const retptr = wasm.__wbindgen_export_0.value - 16;\n wasm.__wbindgen_export_0.value = retptr;\n const ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n wasm.encode(retptr, width, height, quality, ptr0, WASM_VECTOR_LEN);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v1 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 1);\n return v1;\n } finally {\n wasm.__wbindgen_export_0.value += 16;\n }\n },\n /**\n * @param {number} ptr\n * @param {Uint8Array} buffer\n * @param {number} width\n * @param {number} height\n * @returns {number}\n */\n async decode(ptr, buffer, width, height) {\n await initWASM();\n\n const ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n return wasm.decode(ptr, ptr0, WASM_VECTOR_LEN, width, height);\n },\n /**\n * @param {number} id\n * @returns {Uint16Array}\n */\n meta(id) {\n try {\n const retptr = wasm.__wbindgen_export_0.value - 16;\n wasm.__wbindgen_export_0.value = retptr;\n wasm.meta(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU16FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 2);\n return v0;\n } finally {\n wasm.__wbindgen_export_0.value += 16;\n }\n },\n /**\n * @param {number} id\n * @returns {Uint8Array}\n */\n buffer(id) {\n try {\n const retptr = wasm.__wbindgen_export_0.value - 16;\n wasm.__wbindgen_export_0.value = retptr;\n wasm.buffer(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 1);\n return v0;\n } finally {\n wasm.__wbindgen_export_0.value += 16;\n }\n },\n /**\n * @param {number} id\n */\n free(id) {\n wasm.free(id);\n }\n}\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet WASM_VECTOR_LEN = 0;\n\nlet cachegetUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nlet cachedTextEncoder = new TextEncoder();\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n }\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n });\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const textEncoder = new TextEncoder();\n const buf = textEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nlet cachegetUint32Memory0 = null;\n\nfunction getUint32Memory0() {\n if (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer);\n }\n return cachegetUint32Memory0;\n}\n\nfunction getArrayU32FromWasm0(ptr, len) {\n return getUint32Memory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n return getUint8Memory0().subarray(ptr, ptr + len);\n}\n\nmodule.exports = {\n /**\n * @param {number} ptr\n * @param {string} svg\n * @param {number} fit_kind\n * @param {number} zoom\n * @param {number} width\n * @param {number} height\n * @returns {number}\n */\n async rgba(ptr, svg, fit_kind, zoom, width, height) {\n if (!wasm) {\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n wasm = instance.exports;\n }\n\n const ptr0 = passStringToWasm0(svg, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n return wasm.rgba(ptr, ptr0, WASM_VECTOR_LEN, fit_kind, zoom, width, height);\n },\n /**\n * @param {number} id\n * @returns {Uint32Array}\n */\n meta(id) {\n try {\n const retptr = wasm.__wbindgen_export_2.value - 16;\n wasm.__wbindgen_export_2.value = retptr;\n wasm.meta(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU32FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 4);\n return v0;\n } finally {\n wasm.__wbindgen_export_2.value += 16;\n }\n },\n /**\n * @param {number} id\n * @returns {Uint8Array}\n */\n buffer(id) {\n try {\n const retptr = wasm.__wbindgen_export_2.value - 16;\n wasm.__wbindgen_export_2.value = retptr;\n wasm.buffer(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1);\n return v0;\n } finally {\n wasm.__wbindgen_export_2.value += 16;\n }\n },\n /**\n * @param {number} id\n */\n free(id) {\n wasm.free(id);\n }\n};\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet cachegetUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n\tif (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n\t}\n\treturn cachegetUint8Memory0;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray8ToWasm0(arg, malloc) {\n\tconst ptr = malloc(arg.length * 1);\n\tgetUint8Memory0().set(arg, ptr / 1);\n\tWASM_VECTOR_LEN = arg.length;\n\treturn ptr;\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n\tif (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n\t}\n\treturn cachegetInt32Memory0;\n}\n\nlet cachegetUint32Memory0 = null;\n\nfunction getUint32Memory0() {\n\tif (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer);\n\t}\n\treturn cachegetUint32Memory0;\n}\n\nfunction getArrayU32FromWasm0(ptr, len) {\n\treturn getUint32Memory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n\treturn getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nmodule.exports = {\n\t/**\n\t * @param {number} ptr\n\t * @param {Uint8Array} buffer\n\t * @returns {number}\n\t */\n\tasync decode(ptr, buffer) {\n\t\tif (!wasm) {\n\t\t\tconst module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(r => r.arrayBuffer()));\n\t\t\tconst instance = new WebAssembly.Instance(module);\n\t\t\twasm = instance.exports;\n\t\t}\n\n\t\tconst ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n\t\treturn wasm.decode(ptr, ptr0, WASM_VECTOR_LEN);\n\t},\n\t/**\n\t * @param {number} id\n\t * @returns {Uint32Array}\n\t */\n\tmeta(id) {\n\t\ttry {\n\t\t\tconst retptr = wasm.__wbindgen_export_1.value - 16;\n\t\t\twasm.__wbindgen_export_1.value = retptr;\n\t\t\twasm.meta(retptr, id);\n\t\t\tconst r0 = getInt32Memory0()[retptr / 4];\n\t\t\tconst r1 = getInt32Memory0()[retptr / 4 + 1];\n\t\t\tconst v0 = getArrayU32FromWasm0(r0, r1).slice();\n\t\t\twasm.__wbindgen_free(r0, r1 * 4);\n\t\t\treturn v0;\n\t\t} finally {\n\t\t\twasm.__wbindgen_export_1.value += 16;\n\t\t}\n\t},\n\t/**\n\t * @param {number} id\n\t * @returns {Uint8Array}\n\t */\n\tbuffer(id) {\n\t\ttry {\n\t\t\tconst retptr = wasm.__wbindgen_export_1.value - 16;\n\t\t\twasm.__wbindgen_export_1.value = retptr;\n\t\t\twasm.buffer(retptr, id);\n\t\t\tconst r0 = getInt32Memory0()[retptr / 4];\n\t\t\tconst r1 = getInt32Memory0()[retptr / 4 + 1];\n\t\t\tconst v0 = getArrayU8FromWasm0(r0, r1).slice();\n\t\t\twasm.__wbindgen_free(r0, r1 * 1);\n\t\t\treturn v0;\n\t\t} finally {\n\t\t\twasm.__wbindgen_export_1.value += 16;\n\t\t}\n\t},\n\t/**\n\t * @param {number} id\n\t */\n\tfree(id) {\n\t\twasm.free(id);\n\t}\n}\n","const {version} = require('../../package.json');\nasync function load() {\n let wasm;\n\n {\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n }\n\n let u8array_ref = new Uint8Array(wasm.memory.buffer);\n let i32array_ref = new Int32Array(wasm.memory.buffer);\n\n function u8array() {\n return u8array_ref.buffer === wasm.memory.buffer ? u8array_ref : (u8array_ref = new Uint8Array(wasm.memory.buffer));\n }\n\n function i32array() {\n return i32array_ref.buffer === wasm.memory.buffer ? i32array_ref : (i32array_ref = new Int32Array(wasm.memory.buffer));\n }\n\n function ptr_to_u8array(ptr, len) {\n return u8array().subarray(ptr, ptr + len);\n }\n\n function u8array_to_ptr(buffer) {\n const ptr = wasm.__wbindgen_malloc(buffer.length);\n u8array().set(buffer, ptr);\n return ptr;\n }\n\n return {\n compress(buffer, level) {\n const ptr = u8array_to_ptr(buffer);\n wasm.compress(8, ptr, buffer.length, level);\n\n const i32 = i32array();\n const slice = ptr_to_u8array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], i32[3]);\n return slice;\n }, decompress(buffer, limit) {\n const ptr = u8array_to_ptr(buffer);\n\n try {\n wasm.decompress(8, ptr, buffer.length, limit);\n\n const i32 = i32array();\n const slice = ptr_to_u8array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], i32[3]);\n return slice;\n } catch {\n wasm.__wbindgen_free(ptr, buffer.length);\n throw new Error('zlib: panic');\n }\n }\n };\n}\n\nmodule.exports = {\n async compress(buffer, level) {\n const {compress} = module.exports = await load();\n\n return compress(buffer, level);\n },\n async decompress(buffer, limit) {\n const {decompress} = module.exports = await load();\n\n return decompress(buffer, limit);\n }\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","jpegCanvas","composite","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","pixelType","meta","free","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","toString","status","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","load","render","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","GIFEncoder","initialize","add","encoded","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","u8array_ref","i32array_ref","u32array_ref","wasm","utf8encoder","TextEncoder","u8array","memory","i32array","Int32Array","ptr","id","max_width","wrap_style","str","string","len","__wbindgen_malloc","u8","code","charCodeAt","substring","__wbindgen_realloc","encodeInto","written","string_to_ptr","i32","__wbindgen_free","WebAssembly","Module","fetch","then","arrayBuffer","instance","Instance","u8array_to_ptr","cachedTextDecoder","TextDecoder","ignoreBOM","fatal","cachegetUint8Memory0","getUint8Memory0","cachegetInt32Memory0","getInt32Memory0","WASM_VECTOR_LEN","__wbg_gif_encoder_free","repeat","__wbindgen_placeholder__","__wbindgen_throw","arg0","arg1","ret","gif_encoder_new","retptr","__wbindgen_export_0","gif_encoder_buffer","r0","r1","v0","delay","ptr0","arg","malloc","passArray8ToWasm0","gif_encoder_add","getArrayU8FromWasm0","cachegetUint16Memory0","async","initWASM","v1","Uint16Array","cachedTextEncoder","encodeString","buf","read","cachegetUint32Memory0","fit_kind","zoom","realloc","mem","passStringToWasm0","__wbindgen_export_2","__wbindgen_export_1","ptr_to_u8array","limit","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32((~~y - 1) * this.width + (~~x - 1), false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n quality = Math.max(1, Math.min(100, quality));\n const jpegCanvas = new this.constructor(this.width, this.height);\n jpegCanvas.fill(0xff);\n jpegCanvas.composite(this);\n return jpeglib.encode(this.width, this.height, quality, jpegCanvas.bitmap);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n const status = await jpeglib.decode(0, data, 0, 0);\n if (status === 1) throw new Error('Failed decoding JPEG image');\n const [pixelType, width, height] = jpeglib.meta(0);\n image = new this(width, height);\n const buffer = jpeglib.buffer(0);\n jpeglib.free(0);\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n const status = await tifflib.decode(0, data);\n if (status === 1) throw new Error('Failed decoding TIFF image');\n const meta = tifflib.meta(0);\n const buffer = tifflib.buffer(0);\n tifflib.free(0);\n\n image = new this(...meta);\n image.bitmap.set(buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg !== 'string')\n svg = svg.toString();\n\n const status = await svglib.rgba(0, svg, mode, size, size, size);\n if (status === 1) throw new Error('Failed parsing SVG');\n if (status === 2) throw new Error('Failed rendering SVG');\n const meta = svglib.meta(0);\n const image = new this(...meta);\n image.bitmap.set(svglib.buffer(0));\n svglib.free(0);\n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n const [r, g, b, a] = Image.colorToRGBA(color);\n await fontlib.load(0, font, scale);\n fontlib.render(0, 0, scale, r, g, b, text, wrapWidth === Infinity ? null : wrapWidth, wrapStyle);\n const buffer = fontlib.buffer(0);\n const [width, height] = fontlib.meta(0);\n fontlib.free(0);\n const image = new this(width, height);\n image.bitmap.set(buffer);\n image.opacity(a / 0xff);\n\n return image;\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n const encoder = await giflib.GIFEncoder.initialize(this.width, this.height, this.loopCount);\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), quality, frame.bitmap);\n }\n\n const encoded = encoder.buffer();\n encoder.free();\n return encoded;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n const compressed = await compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n array = await decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\nlet u8array_ref, i32array_ref, u32array_ref, wasm;\n\nconst utf8encoder = new TextEncoder();\n\nfunction u8array() {\n return u8array_ref.buffer === wasm.memory.buffer ? u8array_ref : (u8array_ref = new Uint8Array(wasm.memory.buffer));\n}\n\nfunction i32array() {\n return i32array_ref.buffer === wasm.memory.buffer ? i32array_ref : (i32array_ref = new Int32Array(wasm.memory.buffer));\n}\n\nfunction u32array() {\n return u32array_ref.buffer === wasm.memory.buffer ? u32array_ref : (u32array_ref = new Uint32Array(wasm.memory.buffer));\n}\n\nfunction ptr_to_u8array(ptr, len) {\n return u8array().subarray(ptr, ptr + len);\n}\n\nfunction ptr_to_u32array(ptr, len) {\n return u32array().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction u8array_to_ptr(buffer) {\n const ptr = wasm.__wbindgen_malloc(buffer.length);\n u8array().set(buffer, ptr);\n\n return ptr;\n}\n\nfunction string_to_ptr(string) {\n let offset = 0;\n let len = string.length;\n let ptr = wasm.__wbindgen_malloc(string.length);\n\n const u8 = u8array();\n while (len > offset) {\n const code = string.charCodeAt(offset);\n\n if (code > 0x7F) break;\n u8[ptr + offset++] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) string = string.substring(offset);\n ptr = wasm.__wbindgen_realloc(ptr, len, len = offset + string.length * 3);\n const ret = utf8encoder.encodeInto(string, u8array().subarray(ptr + offset, ptr + len));\n\n offset += ret.written;\n }\n\n return [ptr, offset];\n}\n\nconst nullish = x => x == null;\n\nmodule.exports = {\n render(ptr, id, scale, r, g, b, text, max_width, wrap_style = false) {\n const str = string_to_ptr(text);\n wasm.render(ptr, id, scale, r, g, b, str[0], str[1], !nullish(max_width), max_width || 0, wrap_style);\n },\n buffer(id) {\n wasm.buffer(8, id);\n const i32 = i32array();\n const slice = ptr_to_u8array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], i32[3]);\n\n return slice;\n },\n meta(id) {\n wasm.meta(8, id);\n const i32 = i32array();\n const slice = ptr_to_u32array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], 4 * i32[3]);\n\n return slice;\n },\n async load(id, buffer, scale = 128) {\n if (!wasm) {\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n u8array_ref = new Uint8Array(wasm.memory.buffer);\n i32array_ref = new Int32Array(wasm.memory.buffer);\n u32array_ref = new Uint32Array(wasm.memory.buffer);\n }\n\n wasm.load(id, u8array_to_ptr(buffer), buffer.length, scale);\n },\n free(id) {\n wasm.free(id);\n }\n}\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet cachedTextDecoder = new TextDecoder('utf-8', {ignoreBOM: true, fatal: true});\n\ncachedTextDecoder.decode();\n\nlet cachegetUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n\tif (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n\t}\n\treturn cachegetUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n\treturn cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n\tif (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n\t}\n\treturn cachegetInt32Memory0;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n\treturn getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray8ToWasm0(arg, malloc) {\n\tconst ptr = malloc(arg.length * 1);\n\tgetUint8Memory0().set(arg, ptr / 1);\n\tWASM_VECTOR_LEN = arg.length;\n\treturn ptr;\n}\n\nclass GIFEncoder {\n\tfree() {\n\t\twasm.__wbg_gif_encoder_free(this.ptr);\n\t}\n\n\t/**\n\t * @param {number} width\n\t * @param {number} height\n\t * @param {number} repeat\n\t */\n\tstatic async initialize(width, height, repeat) {\n\t\tif (!wasm) {\n\t\t\tconst module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(r => r.arrayBuffer()));\n\t\t\tconst instance = new WebAssembly.Instance(module, {\n\t\t\t\t__wbindgen_placeholder__: {\n\t\t\t\t\t__wbindgen_throw: function (arg0, arg1) {\n\t\t\t\t\t\tthrow new Error(getStringFromWasm0(arg0, arg1));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\twasm = instance.exports;\n\t\t}\n\n\t\tconst ret = wasm.gif_encoder_new(width, height, repeat);\n\t\treturn new GIFEncoder(ret);\n\t}\n\n\tconstructor(ptr) {\n\t\tthis.ptr = ptr;\n\t}\n\n\t/**\n\t * @returns {Uint8Array}\n\t */\n\tbuffer() {\n\t\ttry {\n\t\t\tconst retptr = wasm.__wbindgen_export_0.value - 16;\n\t\t\twasm.__wbindgen_export_0.value = retptr;\n\t\t\twasm.gif_encoder_buffer(retptr, this.ptr);\n\t\t\tconst r0 = getInt32Memory0()[retptr / 4];\n\t\t\tconst r1 = getInt32Memory0()[retptr / 4 + 1];\n\t\t\tconst v0 = getArrayU8FromWasm0(r0, r1).slice();\n\t\t\twasm.__wbindgen_free(r0, r1 * 1);\n\t\t\treturn v0;\n\t\t} finally {\n\t\t\twasm.__wbindgen_export_0.value += 16;\n\t\t}\n\t}\n\n\t/**\n\t * @param {number} delay\n\t * @param {number} quality\n\t * @param {Uint8Array} buffer\n\t */\n\tadd(delay, quality, buffer) {\n\t\tconst ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n\t\twasm.gif_encoder_add(this.ptr, delay, quality, ptr0, WASM_VECTOR_LEN);\n\t}\n}\n\nmodule.exports = {GIFEncoder};\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet cachegetUint8Memory0 = null;\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1);\n getUint8Memory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachegetUint16Memory0 = null;\n\nfunction getUint16Memory0() {\n if (cachegetUint16Memory0 === null || cachegetUint16Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint16Memory0 = new Uint16Array(wasm.memory.buffer);\n }\n return cachegetUint16Memory0;\n}\n\nfunction getArrayU16FromWasm0(ptr, len) {\n return getUint16Memory0().subarray(ptr / 2, ptr / 2 + len);\n}\n\nasync function initWASM() {\n if (wasm) return;\n\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n wasm = instance.exports;\n}\n\nmodule.exports = {\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} quality\n * @param {Uint8Array|Uint8ClampedArray} buffer\n * @returns {Uint8Array}\n */\n async encode(width, height, quality, buffer) {\n await initWASM();\n\n try {\n const retptr = wasm.__wbindgen_export_0.value - 16;\n wasm.__wbindgen_export_0.value = retptr;\n const ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n wasm.encode(retptr, width, height, quality, ptr0, WASM_VECTOR_LEN);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v1 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 1);\n return v1;\n } finally {\n wasm.__wbindgen_export_0.value += 16;\n }\n },\n /**\n * @param {number} ptr\n * @param {Uint8Array} buffer\n * @param {number} width\n * @param {number} height\n * @returns {number}\n */\n async decode(ptr, buffer, width, height) {\n await initWASM();\n\n const ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n return wasm.decode(ptr, ptr0, WASM_VECTOR_LEN, width, height);\n },\n /**\n * @param {number} id\n * @returns {Uint16Array}\n */\n meta(id) {\n try {\n const retptr = wasm.__wbindgen_export_0.value - 16;\n wasm.__wbindgen_export_0.value = retptr;\n wasm.meta(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU16FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 2);\n return v0;\n } finally {\n wasm.__wbindgen_export_0.value += 16;\n }\n },\n /**\n * @param {number} id\n * @returns {Uint8Array}\n */\n buffer(id) {\n try {\n const retptr = wasm.__wbindgen_export_0.value - 16;\n wasm.__wbindgen_export_0.value = retptr;\n wasm.buffer(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 1);\n return v0;\n } finally {\n wasm.__wbindgen_export_0.value += 16;\n }\n },\n /**\n * @param {number} id\n */\n free(id) {\n wasm.free(id);\n }\n}\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet WASM_VECTOR_LEN = 0;\n\nlet cachegetUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nlet cachedTextEncoder = new TextEncoder();\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n }\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n });\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const textEncoder = new TextEncoder();\n const buf = textEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nlet cachegetUint32Memory0 = null;\n\nfunction getUint32Memory0() {\n if (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer);\n }\n return cachegetUint32Memory0;\n}\n\nfunction getArrayU32FromWasm0(ptr, len) {\n return getUint32Memory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n return getUint8Memory0().subarray(ptr, ptr + len);\n}\n\nmodule.exports = {\n /**\n * @param {number} ptr\n * @param {string} svg\n * @param {number} fit_kind\n * @param {number} zoom\n * @param {number} width\n * @param {number} height\n * @returns {number}\n */\n async rgba(ptr, svg, fit_kind, zoom, width, height) {\n if (!wasm) {\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n wasm = instance.exports;\n }\n\n const ptr0 = passStringToWasm0(svg, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n return wasm.rgba(ptr, ptr0, WASM_VECTOR_LEN, fit_kind, zoom, width, height);\n },\n /**\n * @param {number} id\n * @returns {Uint32Array}\n */\n meta(id) {\n try {\n const retptr = wasm.__wbindgen_export_2.value - 16;\n wasm.__wbindgen_export_2.value = retptr;\n wasm.meta(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU32FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 4);\n return v0;\n } finally {\n wasm.__wbindgen_export_2.value += 16;\n }\n },\n /**\n * @param {number} id\n * @returns {Uint8Array}\n */\n buffer(id) {\n try {\n const retptr = wasm.__wbindgen_export_2.value - 16;\n wasm.__wbindgen_export_2.value = retptr;\n wasm.buffer(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1);\n return v0;\n } finally {\n wasm.__wbindgen_export_2.value += 16;\n }\n },\n /**\n * @param {number} id\n */\n free(id) {\n wasm.free(id);\n }\n};\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet cachegetUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n\tif (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n\t}\n\treturn cachegetUint8Memory0;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray8ToWasm0(arg, malloc) {\n\tconst ptr = malloc(arg.length * 1);\n\tgetUint8Memory0().set(arg, ptr / 1);\n\tWASM_VECTOR_LEN = arg.length;\n\treturn ptr;\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n\tif (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n\t}\n\treturn cachegetInt32Memory0;\n}\n\nlet cachegetUint32Memory0 = null;\n\nfunction getUint32Memory0() {\n\tif (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer);\n\t}\n\treturn cachegetUint32Memory0;\n}\n\nfunction getArrayU32FromWasm0(ptr, len) {\n\treturn getUint32Memory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n\treturn getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nmodule.exports = {\n\t/**\n\t * @param {number} ptr\n\t * @param {Uint8Array} buffer\n\t * @returns {number}\n\t */\n\tasync decode(ptr, buffer) {\n\t\tif (!wasm) {\n\t\t\tconst module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(r => r.arrayBuffer()));\n\t\t\tconst instance = new WebAssembly.Instance(module);\n\t\t\twasm = instance.exports;\n\t\t}\n\n\t\tconst ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n\t\treturn wasm.decode(ptr, ptr0, WASM_VECTOR_LEN);\n\t},\n\t/**\n\t * @param {number} id\n\t * @returns {Uint32Array}\n\t */\n\tmeta(id) {\n\t\ttry {\n\t\t\tconst retptr = wasm.__wbindgen_export_1.value - 16;\n\t\t\twasm.__wbindgen_export_1.value = retptr;\n\t\t\twasm.meta(retptr, id);\n\t\t\tconst r0 = getInt32Memory0()[retptr / 4];\n\t\t\tconst r1 = getInt32Memory0()[retptr / 4 + 1];\n\t\t\tconst v0 = getArrayU32FromWasm0(r0, r1).slice();\n\t\t\twasm.__wbindgen_free(r0, r1 * 4);\n\t\t\treturn v0;\n\t\t} finally {\n\t\t\twasm.__wbindgen_export_1.value += 16;\n\t\t}\n\t},\n\t/**\n\t * @param {number} id\n\t * @returns {Uint8Array}\n\t */\n\tbuffer(id) {\n\t\ttry {\n\t\t\tconst retptr = wasm.__wbindgen_export_1.value - 16;\n\t\t\twasm.__wbindgen_export_1.value = retptr;\n\t\t\twasm.buffer(retptr, id);\n\t\t\tconst r0 = getInt32Memory0()[retptr / 4];\n\t\t\tconst r1 = getInt32Memory0()[retptr / 4 + 1];\n\t\t\tconst v0 = getArrayU8FromWasm0(r0, r1).slice();\n\t\t\twasm.__wbindgen_free(r0, r1 * 1);\n\t\t\treturn v0;\n\t\t} finally {\n\t\t\twasm.__wbindgen_export_1.value += 16;\n\t\t}\n\t},\n\t/**\n\t * @param {number} id\n\t */\n\tfree(id) {\n\t\twasm.free(id);\n\t}\n}\n","const {version} = require('../../package.json');\nasync function load() {\n let wasm;\n\n {\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n }\n\n let u8array_ref = new Uint8Array(wasm.memory.buffer);\n let i32array_ref = new Int32Array(wasm.memory.buffer);\n\n function u8array() {\n return u8array_ref.buffer === wasm.memory.buffer ? u8array_ref : (u8array_ref = new Uint8Array(wasm.memory.buffer));\n }\n\n function i32array() {\n return i32array_ref.buffer === wasm.memory.buffer ? i32array_ref : (i32array_ref = new Int32Array(wasm.memory.buffer));\n }\n\n function ptr_to_u8array(ptr, len) {\n return u8array().subarray(ptr, ptr + len);\n }\n\n function u8array_to_ptr(buffer) {\n const ptr = wasm.__wbindgen_malloc(buffer.length);\n u8array().set(buffer, ptr);\n return ptr;\n }\n\n return {\n compress(buffer, level) {\n const ptr = u8array_to_ptr(buffer);\n wasm.compress(8, ptr, buffer.length, level);\n\n const i32 = i32array();\n const slice = ptr_to_u8array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], i32[3]);\n return slice;\n }, decompress(buffer, limit) {\n const ptr = u8array_to_ptr(buffer);\n\n try {\n wasm.decompress(8, ptr, buffer.length, limit);\n\n const i32 = i32array();\n const slice = ptr_to_u8array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], i32[3]);\n return slice;\n } catch {\n wasm.__wbindgen_free(ptr, buffer.length);\n throw new Error('zlib: panic');\n }\n }\n };\n}\n\nmodule.exports = {\n async compress(buffer, level) {\n const {compress} = module.exports = await load();\n\n return compress(buffer, level);\n },\n async decompress(buffer, limit) {\n const {decompress} = module.exports = await load();\n\n return decompress(buffer, limit);\n }\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file From b4570cf996269683060abfb6622e72865a9b6233 Mon Sep 17 00:00:00 2001 From: evanwashere Date: Fri, 15 Jan 2021 23:32:50 -0500 Subject: [PATCH 012/120] rewrite wasm modules --- ImageScript.js | 88 ++++++++++---------- utils/png.js | 8 +- utils/wasm/font.js | 191 ++++++++++++++++++++++++++----------------- utils/wasm/font.wasm | Bin 153548 -> 205663 bytes utils/wasm/gif.js | 181 ++++++++++++++++++++-------------------- utils/wasm/gif.wasm | Bin 60775 -> 49504 bytes utils/wasm/jpeg.js | 157 +++++++++-------------------------- utils/wasm/jpeg.wasm | Bin 142662 -> 92972 bytes utils/wasm/svg.js | 183 ++++++++--------------------------------- utils/wasm/svg.wasm | Bin 1131787 -> 1052040 bytes utils/wasm/tiff.js | 120 +++++++-------------------- utils/wasm/tiff.wasm | Bin 285927 -> 187853 bytes utils/wasm/zlib.js | 95 ++++++++------------- utils/wasm/zlib.wasm | Bin 50594 -> 44562 bytes 14 files changed, 398 insertions(+), 625 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index a45a9ba..5eed5c4 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1097,11 +1097,8 @@ class Image { * @return {Promise} */ async encodeJPEG(quality = 90) { - quality = Math.max(1, Math.min(100, quality)); - const jpegCanvas = new this.constructor(this.width, this.height); - jpegCanvas.fill(0xff); - jpegCanvas.composite(this); - return jpeglib.encode(this.width, this.height, quality, jpegCanvas.bitmap); + await jpeglib.init(); + return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality))); } /** @@ -1126,12 +1123,15 @@ class Image { image = new this(width, height); image.bitmap.set(pixels); } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG - const status = await jpeglib.decode(0, data, 0, 0); - if (status === 1) throw new Error('Failed decoding JPEG image'); - const [pixelType, width, height] = jpeglib.meta(0); + await jpeglib.init(); + const framebuffer = jpeglib.decode(data); + + const width = framebuffer.width; + const height = framebuffer.height; + const pixelType = framebuffer.format; + image = new this(width, height); - const buffer = jpeglib.buffer(0); - jpeglib.free(0); + const buffer = framebuffer.buffer; if (pixelType === 0) { const view = new DataView(image.bitmap.buffer); @@ -1153,14 +1153,11 @@ class Image { } } } else if (view.getUint32(0, false) === 0x49492a00) { - const status = await tifflib.decode(0, data); - if (status === 1) throw new Error('Failed decoding TIFF image'); - const meta = tifflib.meta(0); - const buffer = tifflib.buffer(0); - tifflib.free(0); - - image = new this(...meta); - image.bitmap.set(buffer); + await tifflib.init(); + const framebuffer = tifflib.decode(data); + image = new this(framebuffer.width, framebuffer.height); + + image.bitmap.set(framebuffer.buffer); } else throw new Error('Unsupported image type'); return image; @@ -1206,17 +1203,15 @@ class Image { if (mode !== this.SVG_MODE_SCALE && size < 1) throw new RangeError('SVG size must be >= 1') - if (typeof svg !== 'string') - svg = svg.toString(); + if (typeof svg === 'string') svg = new TextEncoder().encode(svg); - const status = await svglib.rgba(0, svg, mode, size, size, size); - if (status === 1) throw new Error('Failed parsing SVG'); - if (status === 2) throw new Error('Failed rendering SVG'); - const meta = svglib.meta(0); - const image = new this(...meta); - image.bitmap.set(svglib.buffer(0)); - svglib.free(0); - return image; + await svglib.init(); + const framebuffer = svglib.rasterize(svg, mode, size); + const image = new this(framebuffer.width, framebuffer.height); + + image.bitmap.set(framebuffer.buffer); + + return image; } /** @@ -1246,17 +1241,26 @@ class Image { * @return {Promise} The rendered text */ static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) { + await fontlib.init(); + font = new fontlib.Font(scale, font); const [r, g, b, a] = Image.colorToRGBA(color); - await fontlib.load(0, font, scale); - fontlib.render(0, 0, scale, r, g, b, text, wrapWidth === Infinity ? null : wrapWidth, wrapStyle); - const buffer = fontlib.buffer(0); - const [width, height] = fontlib.meta(0); - fontlib.free(0); - const image = new this(width, height); - image.bitmap.set(buffer); - image.opacity(a / 0xff); - return image; + const layout = new fontlib.Layout(); + + layout.reset({ + wrap_style: wrapStyle ? 'word' : 'letter', + max_width: Infinity === wrapWidth ? null : wrapWidth, + }); + + layout.append(font, text, scale); + const framebuffer = layout.rasterize(r, g, b); + const image = new this(framebuffer.width, framebuffer.height); + + image.bitmap.set(framebuffer.buffer); + + font.free(); + layout.free(); + return image.opacity(a / 0xff); } } @@ -1350,15 +1354,15 @@ class GIF extends Array { * @return {Promise} The encoded data */ async encode(quality = 10) { - const encoder = await giflib.GIFEncoder.initialize(this.width, this.height, this.loopCount); + await giflib.init(); + const encoder = new giflib.Encoder(this.width, this.height, this.loopCount); + for (const frame of this) { if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames'); - encoder.add(~~(frame.duration / 10), quality, frame.bitmap); + encoder.add(~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality); } - const encoded = encoder.buffer(); - encoder.free(); - return encoded; + return encoder.u8(); } } diff --git a/utils/png.js b/utils/png.js index 43406ec..60b7d9e 100644 --- a/utils/png.js +++ b/utils/png.js @@ -1,7 +1,7 @@ /* global SharedArrayBuffer */ const crc32 = require('./crc32.js'); const Buffer = require('./buffer'); -const {compress, decompress} = require('./wasm/zlib.js'); +const {init, compress, decompress} = require('./wasm/zlib.js'); const __IHDR__ = new Uint8Array([73, 72, 68, 82]); const __IDAT__ = new Uint8Array([73, 68, 65, 84]); @@ -39,7 +39,8 @@ module.exports = { tmp_offset += row_length; } - const compressed = await compress(tmp, level); + await init(); + const compressed = compress(tmp, level); const array = new Uint8Array(49 + HEAD.length + compressed.length); array[26] = 0; @@ -111,7 +112,8 @@ module.exports = { c_offset += 4 + 4 + 4 + view.getUint32(c_offset); } - array = await decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks)); + await init(); + array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks)); while (offset < array.byteLength) { const filter = array[offset++]; diff --git a/utils/wasm/font.js b/utils/wasm/font.js index 2a9ad80..46c550c 100644 --- a/utils/wasm/font.js +++ b/utils/wasm/font.js @@ -1,96 +1,139 @@ const {version} = require('../../package.json'); -let u8array_ref, i32array_ref, u32array_ref, wasm; -const utf8encoder = new TextEncoder(); +let wasm; +let registry = null; -function u8array() { - return u8array_ref.buffer === wasm.memory.buffer ? u8array_ref : (u8array_ref = new Uint8Array(wasm.memory.buffer)); -} +class mem { + static alloc(size) { return wasm.walloc(size); } + static free(ptr, size) { return wasm.wfree(ptr, size); } + static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } + static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } + static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; } -function i32array() { - return i32array_ref.buffer === wasm.memory.buffer ? i32array_ref : (i32array_ref = new Int32Array(wasm.memory.buffer)); + static copy_and_free(ptr, size) { + let slice = mem.u8(ptr, size).slice(); + return (wasm.wfree(ptr, size), slice); + } } -function u32array() { - return u32array_ref.buffer === wasm.memory.buffer ? u32array_ref : (u32array_ref = new Uint32Array(wasm.memory.buffer)); +const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => { + const encoder = new TextEncoder(); + return string => encoder.encode(string); +})(); + +const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => { + const decoder = new TextDecoder(); + return buffer => decoder.decode(buffer); +})(); + +if ('FinalizationRegistry' in globalThis) { + registry = new FinalizationRegistry(([t, ptr]) => { + if (t === 0) wasm.font_free(ptr); + if (t === 1) wasm.layout_free(ptr); + }); } -function ptr_to_u8array(ptr, len) { - return u8array().subarray(ptr, ptr + len); -} +class Font { + constructor(scale, buffer) { + this.scale = scale; + const ptr = mem.alloc(buffer.length); + mem.u8(ptr, buffer.length).set(buffer); + this.ptr = wasm.font_new(ptr, buffer.length, scale); -function ptr_to_u32array(ptr, len) { - return u32array().subarray(ptr / 4, ptr / 4 + len); -} + if (!this.ptr) throw new Error('invalid font'); + if (registry) registry.register(this, [0, this.ptr], this); + } -function u8array_to_ptr(buffer) { - const ptr = wasm.__wbindgen_malloc(buffer.length); - u8array().set(buffer, ptr); + free() { + this.ptr = wasm.font_free(this.ptr); + if (registry) registry.unregister(this); + } - return ptr; -} + has(char) { + return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0)); + } + + metrics(char, scale = this.scale) { + const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale); + const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length()))); -function string_to_ptr(string) { - let offset = 0; - let len = string.length; - let ptr = wasm.__wbindgen_malloc(string.length); + return (wasm.font_metrics_free(ptr), metrics); + } - const u8 = u8array(); - while (len > offset) { - const code = string.charCodeAt(offset); + rasterize(char, scale = this.scale) { + const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale); - if (code > 0x7F) break; - u8[ptr + offset++] = code; + const glyph = { + buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(), + metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))), } - if (offset !== len) { - if (offset !== 0) string = string.substring(offset); - ptr = wasm.__wbindgen_realloc(ptr, len, len = offset + string.length * 3); - const ret = utf8encoder.encodeInto(string, u8array().subarray(ptr + offset, ptr + len)); + return (wasm.font_rasterize_free(ptr), glyph); + } +} - offset += ret.written; +class Layout { + constructor() { + this.ptr = wasm.layout_new(); + if (registry) this.refs = []; + if (registry) registry.register(this, [1, this.ptr], this); + } + + clear() { + wasm.layout_clear(this.ptr); + if (registry) this.refs.length = 0; + } + + lines() { + return wasm.layout_lines(this.ptr); + } + + free() { + if (registry) this.refs.length = 0; + this.ptr = wasm.layout_free(this.ptr); + if (registry) registry.unregister(this); + } + + reset(options = {}) { + options = encode_utf8(JSON.stringify(options)); + + if (registry) this.refs.length = 0; + const ptr = mem.alloc(options.length); + mem.u8(ptr, options.length).set(options); + wasm.layout_reset(this.ptr, ptr, options.length); + } + + append(font, text, scale) { + text = encode_utf8(text); + if (registry) this.refs.push(font); + const ptr = mem.alloc(text.length); + mem.u8(ptr, text.length).set(text); + wasm.layout_append(this.ptr, font.ptr, ptr, text.length, null != scale ? scale : font.scale); + } + + rasterize(r, g, b) { + const ptr = wasm.layout_rasterize(this.ptr, r, g, b); + + const framebuffer = { + width: wasm.layout_rasterize_width(ptr), + height: wasm.layout_rasterize_height(ptr), + buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(), } - return [ptr, offset]; + return (wasm.layout_rasterize_free(ptr), framebuffer); + } } -const nullish = x => x == null; - module.exports = { - render(ptr, id, scale, r, g, b, text, max_width, wrap_style = false) { - const str = string_to_ptr(text); - wasm.render(ptr, id, scale, r, g, b, str[0], str[1], !nullish(max_width), max_width || 0, wrap_style); - }, - buffer(id) { - wasm.buffer(8, id); - const i32 = i32array(); - const slice = ptr_to_u8array(i32[2], i32[3]).slice(); - wasm.__wbindgen_free(i32[2], i32[3]); - - return slice; - }, - meta(id) { - wasm.meta(8, id); - const i32 = i32array(); - const slice = ptr_to_u32array(i32[2], i32[3]).slice(); - wasm.__wbindgen_free(i32[2], 4 * i32[3]); - - return slice; - }, - async load(id, buffer, scale = 128) { - if (!wasm) { - const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(r => r.arrayBuffer())); - const instance = new WebAssembly.Instance(module); - - wasm = instance.exports; - u8array_ref = new Uint8Array(wasm.memory.buffer); - i32array_ref = new Int32Array(wasm.memory.buffer); - u32array_ref = new Uint32Array(wasm.memory.buffer); - } - - wasm.load(id, u8array_to_ptr(buffer), buffer.length, scale); - }, - free(id) { - wasm.free(id); - } -} + Font, + Layout, + + async init() { + if (wasm) return; + const streaming = 'compileStreaming' in WebAssembly; + const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer())); + const instance = new WebAssembly.Instance(module); + + wasm = instance.exports; + }, +} \ No newline at end of file diff --git a/utils/wasm/font.wasm b/utils/wasm/font.wasm index a03a568d7fac057d1f75129ec94cda7fb5bc0b75..9899476ad6a824df87a02ab19ba1d4361fe6d88c 100644 GIT binary patch literal 205663 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�#sC7f5W=f-pK(a#FVld0P(N!FgkThy2 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 z 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 YP|}FH_>#y^3WaI?-CYTy_+Zli1M-lDsQ>@~ literal 153548 zcmeFa51bsub?@8VGqXFpGqXFZT}dmggsNKtt%RgqKuEH{MlFzpEHHLV5+}wO|G~i{ z{6|8_jtyvS3$C1yTv@Cg#UY7e<3Jp6Fm@cpQLw;VMSzm^S-}R-959b1%#dV?tS@0u+!Dm)m5iXopb8cIj5?Fcii;8FbIP1o8kQHqCI=U zJ=c}?WS3iS4Xz9K=#N~U1=n@&xz+v!*HtVPSmEHhKpFa%UwNTw8I~8_dTV&=bzMFq zD?;66GPuy5zqysyYuxy9x{LPQ=8Fk}?0r%cD*g$y+w>SHZ!7)uhns_Q>$P&NGN)cC z^_8l#D!t`$DF`b;xe|uuu3CAZT&@PCZhrZXOF8H*2mDql)yi-`sHl)ERVqPH9twJU zN>%;^K~E`|T`lpXQZD!OL{ZpiP$H=G^aP-9Ua3O$9}MTuuav@IpsNR9(us+qL9P47 zp04*@|Gp3G{OKs@+Iju^-+legAS~bbfp@%{`rmi`u6G2NcfIrG_q>PfE#>#@y#D&& zoPoE${X_43@B82VQ`f)$?eBZXjW>SaUBNqNb>!{5-e>+)e@CXh`u?6pVUUKkc^~?T zn{J$a<@q~yZ-3ug-gEuZv);J-<^`Aj*v|Av>(M8}-bX*z{o(umGAun5?wNI4&#jAt zq$|GBb)_fH+MZswBPlNl(sJAtZSeoOC@pVo1o>^W!G)tikW|v)U9OT=chS!mx_9hU zdUrbU{n8Fn!@GCxq{K7d`}XI%uPARIXJVqfnag+X`;&hzZ{FDm>s>W&|5^n$Hv*D> z^Q}MmeD{_{h34v88=)GhCS7WztD_OpStC4BBi(7Vi()rzF)GJ{*`uY za$TEtHX>D5KZEMJTxEOG?YdM&#dR0eRnm`c1GY+9ZY5o6q2egeI#Wbsz4zVSY5g@! z(BB$h-@1*Ts71YcMn_s>GhjGv?oJwMc~`PkC;^TZkZ#@Ty0iDn>GSp0#$atJaOLz= zJ9)C5Jkd@bZzrE@Cyy0LRdlo-?P0tt;1Wz`pvCW?`v1MJ6`#fRPin1rBiD)kR=k?) z@xE4C-Wgw-M)B*@O1zEhW$B3nj|TA-{&FQb@8oY2e{bOLU8N1K;Rd#pH>5!txOcb# z^{~=%TWPl0+B%X{MF_7Tr~hyKC$PjVfBX3D zpYQU#@CWzbexTx$kKXx<2TDHq%{zbb{Sg>GZk@)Xh`#$|p zxoG}CX>+4Y?l<>-`LktfGp|u?j#%>}@%yaZ`2F>9)$j+ZVRIuU`DefK?XUCN7@%Hn zW%&`P)lH3I*BAHJ$MnMg@!g;MS>eIx>hPcb^WS}>)z=@7^Uvu=|Aqq<{N~=~mk!Sa;SOK#&aB(2%)jS0=hSXoZ>z|+faI3F-j&M3OXvjSE-9M6?UM2pW3Ub|p+>^Sk zjryyHwwk{9t39u8^wL=qm%3D$Dr)t5HpE}}(h;EP?_bsVuWC^Jqrl$MSUK}h++>i& zyXq@zfc^TZV4sWF3f4p?Yp(1&P+b!}!%asIDr=$>H3uE5Y-D9&yDPb^tPFy!uaFo9ei1zZZ=x(%7k4dD73nWu~TOc?7apubYh%dM8am~O8OPWIJ9^}n*7 zWLl|N|L$XIT_HI7TFIQz2!v^t`EE_!I7_|h2NUZ9HD6v%3Xjy>MpwIt#x`o! z%wFkUA3Q0rPX#T0kJegg&;;Vq=z~eOjofIoE3Uz5=kQqbRFEDGU#O`YfOr^a)A2RY zSGj8HyHC*5@;$nCuZgTT_THN4L6tpe%^a$?nio^&eEwqo68;>205TTdkcOKz@?&8u z?k=4+y9g)DtBm80R$n>nj!KYnclyxoR$sN$rGMp0mjG6;)X=g`s2z0ZtMz0^wH~e~ z-CG+C-htxm$%A!pnhd3TZb}#Jj%#(ai{jPuvsVE=e^t%#sy*?qx^&O$8|C`>YBp)V zTRQ#S9^Q?%FkJ!Ag8-t2;rh$TAzh|dKK%gtNxk*JMt8^F_;9^TZ!t8=>+{>MGmwUwW$o7)IlXRA{OilI*XIi{C)z`(cit&N z9}BNz)EYsp=G-QSxIhBEJkz1A(txXb5hBVGAg_YyV7?idZiUMkt;f9@?s^_>8t>q) zzvuocthyvteI|*O%ax@wc5$PTyx84JzyD(Qj%2P| z+e#L@x#%)!DQ>#OAi1$r8pjYTs(3C9?P!uK}y1C9b z^C7nm%_0ZoL))h`zmoc_2c69?mS}3abJB1}0l&whVaIPCX#8nEHvfRp6pBu$J_v#=_=dQx@&q!vsrU*bLy=5F?63P(o7MEG z9%duGnN_|FBSWcU{zC@Y`~a41{;O_nbnzN(+Y>)O)HVM_B7I+YPP=f~7w(vg=46wJ z^K+4KpH0(2_Bz$%ZAJcdd*a)wWv}-L$o*51asW)|-Tfd(vyrQBl6Yb=S_~m#gs3t$ z5>sAF!~@ z^~IZYeY!8+qU-U#c!igFMv~G9N4-Wkei|q=fCjjjYQIjg5jR?tpsSjP4oh%BbQCF+ zuF3<+?}o0P32F$duKq8Z+W%2^dTYMp%hp8qwL4z7j!&PkGXYb5iIqf%JM z0n0kRChPdxtmEgnnc9c{v)*coy6W`aK3MZMk)=@Wa^{~Nh|#377+|h{CdIPpld->` zVoE<}vAV6X1QCX?MhV}_+qWXrmT(Vx42w%py?RbGhMglibiW(!T^mi-qYZ9O`cbJ1bAFn{qQ$6ia6`Ck~pP7{3nPwzELnWH^!rUX?sAU9x!uBXImC2^-94hk7>aGSNhR z2rN}+P0iweG$_YasfWFBU6(4IBonK@OonAmMkWq_%3p4PXW#2*pPn=k9bp6*3*71U z#QxndLV~GXg=E-@Z=h^td;DHj17K6+&-vln-7Z(iidtrmY&bV=2h;)Pijd54R;)KUj~>%fG219>sU zo|}!0S?hyn4~?o~95|SBE6iv#PUm5~v>LaNnVVdN(K!vXj7yFo?`4xJU`FDQ!P$h> z5m7US)p5GR1a#HnTU>X1tEUOx-BmAnrX(PGw_ z&JK5r8Y@PK-E?pyUcjAbNpyK-ec_qCz6Lt>um4EL>sQnl$RON--YR6Bfm4>>sB0^P zoY$0f1oYA03$yZPe(EdCO^_gJMrk}5-)Tc;(2uaC+hQrfeSh@P{A{1 zt%-$A0PJiGceGj02$y2@v7jr#8ZZpCLJv@~mw{sc56gB^jVlt8t@r|3!Q9NaXsPUK zQdF7`xUYp9C+y#bPwaIyZ;<_3C>Sef;YJ7-_&cp9u#mK~u%cqY2L0aNR{+4ABG-S~ zhdoMuRg5};^|3xYvvkFb@j_oJ0z&}Fu-2BYOC()i=&Qx=;?X{nP0#nWP)@w3VZw4w z^|h9jG7tCjJreFGJ91804jzi4%n5Q##v- zV}$35?s2be&kx<;D*mJttm^joXC#oh z|5;sG;NBU!x5jUCuZ^#D*TipkKND{v!Sa2jug>@H zo@?*c;xXoNp{nL5`qZ>VSKl7bmT8r;^{qsbsP;$_Y&f3n&W_J@uZhRpdH}e{`gvV_ zR*e!00;6panUvPF&3LmNH#4Z5$h@BqVF-08)ztVOLrJC}PN^>*uDNsLv)x$y8n-H5 z?-s=uF|;#*P;clRB%8vB`ZaT)(Yujcr%yizK;@LhU6J!B3%#rIJ6rc+TRh$;8^Boj zRnp!bFcv;Y`Y1NXcz@{T#-9q^{P;lVn(Y~(479L(i9Z{r{hsV(*a$|_TV*2{k-TJ5y0Q^z7%jj6ZMW^* zENs>lcqRYOC9+lo7~M9yefRSI?}qm#=fIp8m3B6m$uq0UD|++YIomV4O2wTsvt8x* zRJ+Ps)Uug`esa29C6K<-;fcq<)g|<7W@YV3HGyhzm*Ivtq94k0$`P8wdcrGevX$5BU|O@FKjXuH_}SxXDF|_k?k_0fp6gGw8_kfVgfMd!@~kb zF)f8@W`-p-B@T619&dj@LBJs^GnV7h*Oq6k0&Yh~**%-TJva*#BtG>?p>Z-;u#zI$%6{&)!WG1Xo>qsm9 z0yfK9{CdpP$wS?+;aq=w4CQb*@vaB>g=uM}H zB;dyK_h%tF>6ZX%cRp0<7r8S)^PF7F-f!>W0i*8wu&c$tE3+*0jHxJdhvi@fFUm|<4$(<@nS8x)FzbkXRFfGp6rZ#&%NM2Y&GL_e z)aQ}Q=|7nS2USJ=|6n$&EPFk3Lvv3>CpR$a5nd7x1aATlJ;F#+`YhO5r=6j?&7avHt;1pRC(6K ztl_1-bZMnWSghLjs){454x4CST&bmw2a5=e)|#>A!)D$2o7{qQiK+Qljs=O9sOavU zOH>v^*b#c%<$gtZKC6_h59qB~D>8(6-`8r33u0C{zr`X5v&5w+=Da&Xd@+h{E7lZ7 z56-t4!VPY6Z`$NAc`^;jg7+qa!AsOZb$==-c+htx4fi?^iWTtaw774Nygs^YYv0#d zON1v6wp^b;x!g5cygL%V4p7j|n5Filk-JbM!1YJc)kx|2?uxPC{G^X6B3_%oL%^^_ zX_)Sz+xQ%OgKBFt6Jj=7cf0p&8&P{R70L}nDg+$07@kf4m~{vwCo;>)DSe#0Ve%lf zBJW$|olPD}N0Ij^d9NW4wWG*;n7sAmp?KtZBG2b~FAAT)7p?Ru(#Nv&v!ox((kDqD z&C<`1K0-R(M}3$~Q?&Y=ozm}P@|52T+hg8FdWyUzd0147b^G6t$1IbwOfAa&C3#r- zWz@~{#GViKt}RVuZQoDZFLZlZb&&j%mL3Zy$$utG?^=k%oxmK z3ZyS!c~CA?@`$J}^6n#VIe8~L@(z)=RP}Y_9VG8Z$s^dlcy~W}KSmx=_eI`5@_wAW zW9>W>Jv{^>8r;iDM-ev@Qg)sPua|H|=;d&$>_NoNDdGL^c`i#fBCw4oaDZreR?koJ z{B2wjh@J26bQ7<>k}IEeESm zk@KkKU=_-9ROiW_wc*z_{!hY+Uk$x==@{wv`{YrQAN0wulKfh@Hc}t%C%x6O-EZ^K z6DWo5eYik%{lJ>&h^`mlT-5a)Xezp*Ro$a22=`Uy1{R`=9 zJF9z|>i(Omn;FeKbNH+BmMa-eT4L{XX(SFzmTQBO8Q=(cK2{Ss=EJ_%(L@W z(?8)3x%e0@i%6c~_U?QPN&j+I)6=AXB}*SC{i|8}Dbk0s^xu+xO;Pb*b4SHTvx=YR z_80QeBz-V@=@jW-%+k-2{%n>$$tZ1bzm(nm3s2S;RsT2csQO4&^<=5#_J=w>hGcWJU@7c zNPZ%F^KQ}$efDQaB4@y*`w2oM%%gp{iV3}(zQCh5`+A-yxyQfo9Lb5So>Qb(`s`;( zemu)QS<*atnSby!4|e+GQzU;rEAu4j|CptpAU)d`IYu(|$;U{Z>yt-Gj``#flB<03 zFv&$e`5?(9mUJHrA8=ROG8*YhcifIO(Q#d`BW6z5x2%co*LC4V;TO54d&@2NBfgqD zNiOioNs&Q83IbUk$ zxGRW1WY%|A5;>;p`D>#6xhiL1e|2s6Ia28{YIvuI=2?=PJOiF2$x_?6 zgXC>Kd4lAvKKV4sTYPeoZC}^;PV6W7TAzC-$vd;L*+=@VK6@|8pUtu-NdHWhevbMs zBv8mB-5P$1tcwZ>_5^pxuZc|V{+({eP#Zi8|DW8}3tqwba9n-HZt#MxeQTmqT*tzH z?zUYKchm4sdUy_!{G^A$eH4K&V@UT!;b*j5zn^DKO+p6FJ=_7n$!>ppgxh@?ZyzT8 zAF@i`4Tb3CZ;&^XL!`E!0o32uljA&jgGck9k^E_ox~E8f#3!F5`Cbp+6C`i&$zvox z?30g?{3%PiW8u2!sA~NS@(PPg`d_%C%@Y}Vp5wOSD?df@a$n7}Bwy!~CrLJZ@&w8A zeC2~|siAK7rZv&iT*t!ic4JLN2kC0Ly_xX2lXS0tb1%s|vhjR@T6Xzbu7?u4sO5GZ zO(=2Gn&^2|3q=2<>K^31a{6c8ZPNduz=w~*JZWgMs%6}ZCBhD3$^q(n|6nFo?-SXn@d)zH8?*5XyA1&_w zoVy<@?*21(Kc3$i@uI{$uGW5r*18~p2pcbur7SjJHLNiumW*M1fuwL(`uwLK4eaMa zBS0K)58Sfxf$#q>&pdVef4}c|aNEZClgaOdud|2XD&Ir;1mW9H{M@6N2ad}z>7u_A zZd84@usf&Y_V&d47mxndr^>g>*Vw$nE@yv|f`_|_wE(JvrDTa#re^3`0BG}ka!D3& zF&Z5z5h*~)drI*<(aC)!R-@eCU8=14LPt-5(>X}4dl^<32mN*gu?@z*f8xOv#& zaU*GiET--9hK=6mc{IYBV69BeNagKaU*{QS=yVt{pY`=ewG#X1tF^G!UF)i_ z5hm?pvCY7rzdraY8H+I6{-v(iqEF}w(>|>$v0=yi>fJ_ikR}l~GZwdEps z+U5A$Hj;iso@UJ_hr5|K9_t9)J6bP60FJGbaz%G(b;5$5tzOvwyP8<7WxPmwL2IwA zx(V9C#))zBWdUi!KVy^BbqAggbNzHp8PpT{Ev|Edun4MK|FD>=C8qkHi ztg-1sNoBd)GTSNN1+dAiE3r}w1iY=!E08{8lm9I3ua+hA(fk}TqW+pJct#y zp%KMJB&#k6wyh~_U40oD`O2aR1V=wGf@Pg-Bba)A00fu*=S479=5pHmLn9bbLU16X zX|Z^WrKQf`pb1fA;h7?-_}1yPX0luoQS({SD<+hYK~fMgMsZ0&Z-JKpET`ytKNP`K zk(Ox@rNaR$veuhWn?ZtD517N$4GUz@%#%Tz$?sk-R{C78`AH4(z5;T42uB$Gv(<`i zOFm0MNi`qXfO5CD42q>;k)9}z1+z|LQcW>SsFg$o&1yK-GsR@F*=BXeqZ zcB9LLc9QL}Cng<^_FdPN-jks~xoI#PM7Fv`@@1*AmVwVnFT`+hst+O>RplHMqYm+ESL!lU+s!af zv4-~fN6Z05Y@a>ox{mlw z@RCV=_{yb0@R7^7`C#T6`@dccwvPDBzLEGllHK#Nj=;H?t@tVK0d5|$vbYDfd2JL} zN9WPo;yL}CM`yEpkp4usf<`qWrAvRU?|Z*LdFhg^pG^|!0*2FGnf8F|JDtY zq*q`1>G(;gXjH4Od4z_y;^l6h)_QF6pZM6v_kMT>XNQ#2dvJ}Nt8OyFOS%3Ru5$6< zQXsmfoPHTJ$Q^?^6=;O1wKF(EchI@c-k>7ghX0d34KziNs ztB_Cg((531*9#2L2JvncrezNajB5$ovY4fBB6AOHv_lc3gjOP#=Sk|!Qtm9}&WgKW zo6d!bPpi{kt>95q;&26h?r30+#`4PG2&*z=1_BAqa#ip;ZM(sHX8U5~48%mMNuyDm_*;p8%;#s&O56P0i z04b)SoQb)^SY>w{u5>H<9reCYP8z;u*wo7#P+Lx)<<2CN-95)$U&cGeT;6kUo*`R+ ztqgvq8|dS!I9djw6NrW2==87t=Js!P;ZW^rVvik--e^rNkFEyi&{qJ*R3CZhKyoa+ zloPYw@b)yk31g6+eCImSJF}as-liM+e=NL@-dEw@30wyJlv&DvAR8Uwr*m)yrVb7w z$p)v|F*q~o)A2yZ;2g^bXY-7ML(%^~4UWX}v5vv{ROjGao(;|w?ZFv%^@B4ob#Oq? zjDrI|c5)6gkPS|+ObH~#Ij0}NCeG>BEZ3Vpo{!7rGmZ<(urnAJ%}!W*a|Y3Lj3RVK zOw;#LOk)#x!8E-E(_p@RX{HgUZrIL`c;?g}f4Os5He|zcS$kNzU;VI1q3ht8?x`YA zQJ&!IY2+NO5$4IH#{G#3>mn0oy)Pxmx~RybI+^8Bg3xCXa=L_K%0CU+68dK#p%%4~ z-A1n@R3k@kDhV|^zmqd$Mr2ncp=97$*CC+3Lin|-cmc&RM_^)kba5NmU9T3|=+o#X z9muwWbhMT<(E}>kOpynvP|mh7K-r2rWV$QFybv~B%nM=DDR$ABA@STc65D7K5(~5$ z5*HOn#N{+25*tDyTT#>THWEK&NNji{j%P?*-9}>N)grMW^Fk*Q2?1ic4HA1Lzd>S^ zIhh55xA_!EY)nI<*m*h<#ck7(C^hB`C~9dYI8?Q!Ul`Bb+8GqgJwHbPI1 zj&x(3UyH`BTQn(c;zhz+Y=Z?TP-#T)U74V}wGnZ3n60vqhHl_{XdSBs@&+DBx=9~b zx=Ig7KP62PZ_Ja*!x8#~t^{gog(RP@nQy-%&yq4q>!Q0+E#0@tm{j6%68n|-LlSo? zAurTECAv5dMb}<-xNy)WZCUUOPKbj&&3C1HKl5lnC$(B8^rc5ucdbc!;=`8M*CT^G zITJk`I;8~boZqv=ll54^8p~M4#lLTfqxJY5= z&GQ^!5PiS}OolpUMJbF(SxT3UU-;I(Upsd9z5i|7?Hj-H32glCwwFmHkAxfNVcTDr zz8LIC(dnx)hTZA=m<*)*vQ*VQLg;f3M~2x}m4>O-9B!As_}~BKL#-Y8azOTCEXUOy z@e((%iSW{LJWHCq!yn?XM?uZ#+%i@#LHouejma^8*=+0hee(D1#8V1mGaT@Zy1tp4 zHCqC9u3X!f4U>i14LE9KSFY~Z&e3c)$|}2`m0Fip4?$-3W-V0;;zyu+Ewe~|Q%P1# zBp)NWtW=Hv6C9Erf33Up0t42CSXA<;lItwVcy=+pEB9Nf z=`b}_+!3p(;(p(1sLZDkhFkNdOzuJW$AsS)m`PYbk4d;><@Fs zW0v2QauQu4BZX+cYhzaUFonHXfK*%VQOjn=Yq{UEBz`Ol_c0mqpU5%^DU3dkXm;Nu zaZ-s#NZ{r9dU$WjiKG&i$jRnroh(;LU3z@tsNXZ++i{bgBsbOKQZn^<-8^>(<=((j zqr#f4YUYM%bQiiMm}i+?x*Q%Vqunm35DCbHa}$&Go||ZK3ZWyN@lHuk>hZ1@%1fs5 zHXPEX*?e&-y-HKlfa`5jCCBKlFvnl;hVmXB4M3RL3o69pl|g_NpOAWLrG|8WCVMm{ zLWY5mb8B31Yg~oF)CF5D!L$`Etl|7%fJv=O7>(CFC)F z5J4l^k>H!-KD|X1kxT1x*HMvJ(KDcDKT!>|VsD#+*9ckxV9FAq8$Bznm81`Y>#~K5 zr)zPOXvvDB%0a!BL?MBwEy=VBty|I=30e}mgQ6{oAq9%FBr_Lm4C*JvBMKXLFUK(9A3yc%hGs=iHJR|(=vNMcgQ|0 z?^Ln9+cv~iWhTPffNNNmyBoz&NLTO~x#6^5Z^i71c9_37jKG+#0>@GdMr#>|R6sK# z0>4}4!KxdUPk&;fEMpecyWw337oEdN1Ka%8B2TO z+0&_R_H?RaL*i7bo83uu>|89Kvg{Fc{yWuWREKDsMs>p()h+m;sLtqm3e|BwLle&k zqL+gMT0T|Y2qFK=|NY{N-`KHnKY{H%6WL!nyA03Q~g z;`5WitBB9Y=DP)&&XA*nL|rJ;_V@JL9LIq`gj31SUPy5yt$iN?fjs4GpLme6{byEI zD;7Z$wxI!db!AtwfEbz_8fD^V+@&o?%n;JT7ubY5C^N-i;f~#z_V2d#tM+s{tURrO zoxv;VXZ#&b**=Sr|Ka9+=`8@Nd zB376}Ug$eRV|%wZwtMS=F|obRynAM|j(@*x2V->A{@z#jez$MmCQN&O->Z9HM^AZ2 zfwiwV<%2RsC^}YGqBkdX?YhWs_6Rwjsap3g7x-;h{D%6qOnjtOy)oDz$o$5QUR{_j-0~Tm?az!YIkcsS}V&0~V@! z2IA-fWvUG7jacXvLseKU=@5)FD(hJYc;XItOd2R!lHmOU9;(b)NbpD{^XJD;heu50 zA&_P_!_yklwsEBx114e!Ph+CtjEUrG_N;U^Ow@2^;|6n$?F9>!2rHxj>xD~jW33Pk zG^H+?cpZwh!5vQ%3^cBjQvAV4 zekZ)8woQo15eMoR&lDQIo(g^4EVVUpzD7u6yH$IeltLcAD??Y3bt||i_}?TWpfHme zP`J0Gtq){HGf|E>*L?eAZ+0(nF7bVgjBFZsj3hTE$&V^q%jzKY``yp=llQrRr}iau zIL7{N7;57$)B!e<*F3428NhE$4B|dGVT^o2dWW{^qSC4WQB{ z)H7C}t>Vl(Ng5qI^G^C3@12}3E~O+```L@6+b{Z??8QICshP<+$yvQhcx8c%1X%6b`2dI}8xtWX;=6`ohW8@YwA6wIG11`%f~>XT zMjT=THfg9pR?{*n(lQhy1T`{4dtP8*vN5Vl(JN*afk<^~v{C8D%CCY<5k&==f>lnqR=DC1Pn|hsUc+fG z3L`*T{yTx5PN3kvVu4!I$P?1-LVtfAb-DQ_*4SsK9j3u4c0z=q5i|;2mL!4Ar6;~n z*E@TB{Qusb_&nWD^u&Wm2~zud(8#z>_9PAM^cF(~_)7fskFx6%+4YzOVl64)w%;WQluvn2>?Xo&Z6Wy>K94wFOiIH|Rj*UO1ds!D-v?;!Q`zg|WlE2%2!o>}^9Gxh`o8qD66 zpLdE}fmy+6;+f+KOZ-Z~E~s$4l9ROrlLlN0<&GM@cYD!8zyV1X)FU==J-1q<9T73i1)Ma$YcFTPNb$QX#4Eh8&`Rn%WJ z%9sdIboefiw2qWzC_?2f5W0>zy31qwuH=uoU6- zHO#Ml7+^g>7nA8neND6=14u8fi&jqo&&qi4mZ%;BZ^(5szCq0_+I{GbTJ>5uXP;6G zsb-ygsa(-Yx6iQ;OJ)ELgRgR7a~8Wen7J7mgegvJEU#9j;iXg4T*iA zSg7htSF}Xde-z#&Z1-Ur5}|^Be~Tgik8B+JbhM;x3#+&bfx+MgKpW1K@4+mEjsEHL zw%880_f^VaRATE%x}5AMEE_UNU&q}yKc_-OPp5bL6i42TlK51C2RkJ(E$ zp=P^Na42%H>%NcSj5rt3BNghax_Rb~%rk+*sqM~ablg1p=2F79C5QP?B03jG>?{eI z@0x05&i#>M4B4m6Ntn9?IvjYjuwTe=7#5Dhuy7n=**Igz;l1fsIK7EOp8VnK4cDK} z+nqTM2XEr+U7RHxfj-46*pE)k3WJEdK6wQdF^MCN6N<|5Y?E^RFlRsC{eb&s$NeQ} zffw^ zeO5#MK}gW)xF?0tu5NkdmLXOOLv;;fV_|;M?PItxOdZEq(@s9sPOd{O7S(es{u~kqv7`~*4>(u8%n5H?D-`B(UE0RVAjxKzo;mLq#-w^y+ zE2~{id;Z5A2i@S5HV+3Q&Z30QsSXCc9XCTqN27HZW!4~}YU#zTB=kK}sXWyzQo}`m znMkjtrQS_a-M8?qkDcp-w-tR5v_n}}*rHgcYI0WaLXU|l4p^1Qv|P2zLkEQzd{cX8 zq8k`jtAC@>c-(+Qe3uDZq>sX^`V51Qb0QLBtbqi2f}!&A7ZyTcda`OVS#^ZB z=3-vL%h#KJI%I1H1$xu(2UpT<&Te^q!=(8{yoy;%QnAF-kKt74<*S@dr=x`sG$}lH zBMuWArnp;N@69_N<_(LqoVX-j<-$f_lS0h5Z)$GUy6AG6={e)Z?TF7;)wm7=wJ8bb zW6?PFR_I_|bcH@@NB?bH8T}!K4cEy?5;DPE%RHkAI~16Nbu5pr(2=54!>p@^yvg}@ zP!WzT!VEg`k9QH%fbdOFaV=d!G&-6ELd8}Zb}klVMf|J(k0aN+@MUZ zRXdBM%ukFOgb^r*1iEG1^?Gq|UM9W+c$JFy-% zFT`+-cMzDW>4y~dFqgA?T<@;*m$0N^z!qwu^qp~?0|;SWLV_e+fjr>Y>ndMS9N`NB zoYBl$na@Ldsu}Z_@r;IeFlb5nC&QUK#)U3qW5*21drFFTT=v#$0G%~x>$A9N&V8p^G!SLVsi$EK-!u0WP zkgx5cR?14(cc(w|OOH$`ZM(XxvM~MZFHe2;ZEBK)`SW|o*KmaC(Z9e`ej3@ zrB-*rG2F9x(=hRpe0A5aOinV$=pD|k~f#l%X8SkcoB z(yd8Jcjt%3RG+Dgz>(#?<-oe=EmoKKgSW1L)45#C&I2x&$0LA6VzsLaGE(Clm5gk# z$%8ZGWc{~e&HHGJziqV6A!__><7~>I+me-bnq(ivR^IDziB4=Bt2h8vh$yU&By&v$ zYN899mAs9i8&A)jOMzW6XP6R~3^(bp2$)0|ct7)_)Nd28YRhAQvrwRJ?Vql48Id+_ z&jOGBi`PU~`&6bKXfZZ+ryIY^QSZv&nvrDOPaFsr&0FN`4TGV9yJF>^d4c3C_IIN7v$#sDw@{_p^3 z>Xh7qv zHvF-HoVW&KAFuv#oTh>+`aCX;iJjumSHoAe}#Mq%9@oM z$n{L#6|aH?8YM!y0oG4hLA)B^xd*??qoK)UEaM>$V1EH%e*qwKeFuPJ0I1JPP3NHw z0C_>|v>?3J0Q73q@l_C*ee$!^{tT$Y#cU zj%LI@p|HW8HNH`y&#KLV80Mf}*75K|13#BUraxT=I@$LWX=!xT+r4rY{RZ<%s%;q| zQ>NB#CQme#@ENMQfM$KnX1JsQ6q=(CxeQXmx;Pd&zw{N#s{cy{N`c!_}&C(||j zv*|Ay{yE@v$V29T(_5tGgK73DR{8uWwLGA-oVj^g`is&tL`sWpY$f(U5i?Cz7HZv@ zg(;=DEfQD@PkVd#^tXp)h$&tw5`50{w72J;{`TA{Z=*{PzHI@RXJuBH5<#6q8n@mZ zi4Srhh_x)k2;Q|$!-%a}u*(eX$UnxKW6}-4gu@TV5f&OBzg;JTeY+a#R0TtpCQ(8Xa~Soh>N*S zLc|O-Ou9H;wwpvKr|-6fbaV~VRyn=F3e7buP8sD7kYUBTh5iccX&{HLIT}b+;rlcm z5e7C8a0bN8z1U{Xd?^ik{t#p#I);b(H6edpBgJDv+5g#AN$iWZ%gH21D6TG4WjsT}!2^(3j zAk7+1i#;ZlBVmk1WqHJYg4ZAhbS}!Q<~uZM^;%Nm4mUidXgh#p#R76s6ZvQ( z)64dR$x(V+16xNjUksQm@-v>F(TIkepZ02^-A#O`HbrwrYJ z5@--;1{%A+1sd)KK)N6Y2|a=i4os`1k=H^as)cT3AVK=7WBLW zNHEL72qwn{!2c>Yp7h*>1uq$Q15#<_YN#vwE>~~g_iJ*_TIi8_rTAZ}f4wOTO*!tG zt_04`a~If%uF6IfHSQ+2YU+rtI&DN*7s@gog^1FOY-d1zA+rQ3@NM7Y6K6L zaYib8O%i3bl|i0#N&rm$(8qKM(9DS=lK@D&jNRlXfZdP)mmGn5r7&+<)P{~t zZGF?2w?D6qWvoaIXRg&Ivz*n&;_$U@d=hY*L=e#jAiQX*K*)6bf_w{sK$9~Hgo{*X zG#Q`g#*cU?FV3O#BIcEA%%RLg%*8c#-Vu-BCGi>|*v0ETD+gUSd)=$-Ivno*_ZsKN2m1|F{vTuZ$if^>%B}ZHz zQf!EN`rRN>EC@~iJ2QR57rd%%ZVOMwBG_3 z^j7L}GYz%J=6rYIWSnxjU^3o_I9TP@97xV{V|Pt5Fylb7{y=h}Tg|PGvjs=kP9Bag zWw7!ztNvodHmO>zW>zC~#^Q1KvB5ZxOXz{A3*4HwNnu&-Ho7&iB#pUC575wgh_g*B z&)t0K31cn=97)Fu++_!7_`+nBTYCVm9;(5=<99(UJs2-EewVPujw9$1gR4!%a0ZOi z^o-+pRuDQHcm323r;53b5mZ&=#}v+VJS)&}I=_4F6mKFj=j6KLQyH#mih{sh_cJBA)y5MdM-C{FxzxGyyd-?VxR> zlV3O*q>IzTT$*nMnJ{Lig;dkW?#K)o8=?(-;)7iQTELeHamT7kpcG@O>jDhxB{$4| zC5!}Ch?TvYtKGE~7g9*qITWh6xfFsPD7_skW7U-~q%0$YCm@@AeUfvz+G)m4mulPx zWhgL}&>&xg<~VJLw(@tVIzBhOg_w_9+^|b-WC0J~O1r~pu`52y#cnR8hjBq@t=5VM zSx)P84SmL~RN6qZWm&t*af$EXao4*U<}EQs;+Wm>3W~{a)SxI9I28@~1___iYq%BK z5$hnP*)5h)+T*9~)aP!-2w8VDwTMe|GkYXPSWM}$9DFd0c%2omSVcsROrzJL3OgFm z&30$WZQ7?xADUs(if5tCB|USHZa@JsAJMF(F9aZ7Tu@8z!Gi0Pq5nh(aWi9T%E6G~#olp`}eF4*24)S4gQ@5h6e zfh7Y3tN$wi0uLJ?$b?q`$n!ZM@6N1acl+I~8XF~ju+Tj|6NUFsmST(hzwRjm$ooM| z@U~x|-lQyEhN z@~nNHKn22SSj3RMZ$h2IP>AsW3Ovouw7c8RvVmsvbHZSnG;p&_*z*~lCL)vl?69@B zHu+s$I{%ZrB#_9(qZWWeM6*S$1z4g)L(2OwLX4Fa9Wuw8vY6~GDq%%`M(l?;w@2pG*NFM88Ixq+qYdr_Sm26kLgrpR1 zcD3W+mZW4zn>)xAFIP#<9sjG5Etz&3F1SI${Diaz(JvJx zc0`@%n;S+!il7g+9KfoAQiHNZC(yALB=(%tFy2NgMOD1S@2k{)dS7U?D756I3#~2+ zjr&44$F+e%)%a-0say8DL0}ipAhe@l%eL+J7pCE9@rDqV_(uvQ)L^lT*^G&m=q7rN zxB~P}aV6Tr>5A_oJvW^choadWy08=z!`Y`8&Ibo9hLaw$fAC7j7k0xPeAY}Lvt3<{ z;WI@YEaPtAYC#9S<=@U!X!4(4I5oHSAAI?3t8Qjlqy&kcuxG}&d*v1Yu2 z!DZQ1G8%R(v~@_EliYwlqtJv6P3H~vH<{$?c=GH>e951B%C@ChUP-_NKj4{wKw8{u zr<$s#&$rXB!#~u_XiJ_Ry}6*3x3nZ{sjgUEAo3?{)`@%rR89?mPW&tDq!SEEkKh6E zTl~_ubfWu(UWAQg7*dH(j&_5%>{N4ki*(BQ&a`aK-}XNPtc|kYHPtEcmv$7jmQO z?Wm{f3@oGGLn2+Q47EmQ4uNFtlQlJ+UXgK6x>rfj8(c*JLS&TWRGhrPJ?#RAC}68A zyxQ#olSKhhI0wwK?ZOV2Wo&IDC$q7>GEaVVQFuR8tGLv=MZL$Vu#@KbXnIju`h+E6 z$y)kwku+B8V|SjafqCxiUmHG_rC;Fm*{8Gg-Q<5wlRUdxS=cC+4i0LvLPbYSPg=VO zjON@30kJZ8wjZacMO4+&uVJYsPB*=qE1^y4V_fHRy_4$**QdEI;Q9jcW+B(R39BvX zIah)*(--Wd8}bM2bn)~~u6zJIeF1r-@ZK+RC2lJ{!c~&(DXt(V{U_>`{MyUC783KeHLgM;4yN74&7oV!$m}7FpEw0Fo?O#PYC+H)y)~%lwCjbg}?0 zwE21#+Nam*zfFeu7M;?k-!n%C@V-Cqx zuyMWsEBZ}E_M((=-^-@3>|<5-h}8mQhaTOWLq+1xE(AMDe0lnv~9} zD7yoTSGXe%GS5jbF|q#i0a8~m|LBm!UWM>q&1L1f=#9i0GmKZTq!rhT*D1MycPMNH zFZTs6^947^U}*Ul`}}o2Utx5;D}%T2{;GIPMA5sPZEP!bsZY`iu0xXt4j_g|4f_Yx z>_JlxR`QBPfk`A1{SH04mCg6A<6?KCZcKNh{%!@&Zdk_-7JD|%GwwhaRRmN{E7&J- zjSfJed|YFuE@y!I8ZJ-dOdh-I(m*~G+@9+QMYg&x!`Xs>ES`Y0b?wfMnZOjZ?ao>k zt+Uqcc4zIu8FqHn%XD_t)XvgMyR)z|z+8=-=ki9-9SEILv#w}Ey$U&dUK{e{f^49Y z)%j2*=W9&HRmpI&CL69~Z9ZVhg*Ie3q{i@ADbpV8B^vsS7_uSOXu%U%&xZ!OE#iH~VU`o`ynOiR(ikrm10Any zV`UsZI}d4?5$_bN7$$~1R{W?=!HPX@&Wx4uGr$TM5oWYC)QD~-tbh?=reJ{?u`*8Q za(XbV*lhkkA!jz>Oio=A_K`Po6|&e=`id+iA~sCF5xM6HSUp=FUEXF!M$;tBWo~6L zz+;^Q%GggCP~*V5$h>nvjaNkG_P8oC?;OxE$b6;999itSLJVQN;MrgXGS`5fH)TMP zS6)hGGHX;MPMOXDMc#?jk$D-Ji^Qe4c?Q>j8oK1P0uvW|1g#ShX96EQZceQbh8WU{ z4P~;n186*QacH0}3CWzNi^NvonMAgvB*^tVf0;$-6l6oF!x>160*y8%hDIB(>3lIh zOxmn0TZ&Zea_Ct z)d&F1POC-OMz~Dd3kFIkH&fQi9V=x_89I-nUt`FMDLp>Pt}6MNFgm>fwZ)81D8FWE z;uvaa?XoIyW)}e~W{;r3C$qJJ8dqT!oVkuKQe`;TP_oYsTxLaSqzQ zF&RK8NYM%6mHv|LNhM8@{jry$pc|b~Yqszh>pa;UC$Wl?ggury_z`v-9xb3tdPI=~~mRjR%@g-uj1@Um-|S`pks zRLG?n!$_#yUeB&t3~e(rC9Y;7y}-+HRNYCnHF-em3IsCkpQjwcSr1U*n32FFz(^;` zZdPjr!er=grOKb@R_8Ya+nN=Rm;fF2ln`L-8B10hVvDq*PHYt{D>|omYrW3NhwB8% zg>1S$0Oad+^BTLkz^&EI8r=xSF<@LP7@2zoBLWPiH*T2Nz(TcN&t9WviT1-zTyjkY zD5p=Y)3Xch*@Xu0H8Ow-^odK}>OcAe6}RPxMSliFucu*#2};dp%`LMDYv=sSRAx<@ zQ+$V~NBy3wh|El+@Ik+0ti>IRi92;=*`+nRTfHvYtLufFW3TH4>!KG}(`#k@ysnri zpVO6XYJRQH`TLZUq68 zFbKy=rP=Al35U_iTB)EQA~toNBQ9AEqf@3LpD^buU_qO@sj!?7h>C3+F5g8Zg;iMT z>`+G@?PjZpJT+%nRxB)#@0qQLJYYCrEtaH%uCzNxSKhBnvsmV zvLAU%Xw%Kj>KSlzvb-siKt2J;r$^UiAru2WIDiYx_1C_$tTYD?RZSkM34h8+uHvxt~*ayj8Fff?p?Kx>v_vwxN%R3uBWZ#qlie8^H54YHKk8St`Y{ve&> zi9>~xmgREM2UBx@5CJ=kujUf`LBs{v2+rV*f%w^vVg4ZYYO;ukZo^jF_6PNQ2hgCu z%=VW#AiTQKj8{7D5I+bI*g*lnq-$pO zGIK1Rt=39j1^woniQ-Vy9m)5jz$W!92{k~GFG)SInN>7+RKQ@`i)_P^R|lrpg(t-y z#)8d|l#Dfej3Fy!z8@>4Xib|8<@>>%)XScnq!$_ks2=&Kbedhr6-i}~L(`UnVbvly zx58d|nV#+OT*RHZ1_Wt5$GS!^Qr82nU&tv5IT$J16tlb2FH|Go$`6gALH)OS^`+j( zopmoKwes=Xh3+i-Nc8|$zGodr8W;YU8Wq^ZX}dv8*n-!Gz@Ua1Y6q1qm8Gj7f}I=k z2G(`zy%Ixw1Dwoomv=0(Er*y75m<>%yu_HsC0Y^g?aP6)tRiO>VN}a1k{I$8abC?! zR)nUlf#q-8h>Ny+kR*!vJ;h;26oHoz zVnchW2VD?w?Q3;&U8#MiOh#)5d7mgTnF(hbHfEp(-mLSLKND~|A_ee?;oQpW^{uu& zM(?UoD+lH*TA8tMrR{FkNQ{Qxg=-U7n2KN$28eT_)GZGcJh5L#@Fb9MQ5an7QdKFr0f9wfD|optc$qI~23O0!*ypeF`7*e6dxNX+7|6maZwG;-|ZWUO<*S2MRpds!?UF?k$cDI6OW^lE;ah`dDD^&z; zk)xHi4U$otsmmGQzV^!#Fz4djY?H(?xLVzp;U-+5rGmi{n&f^Pw(xL{qj zF4|(&DQDO}z`AS?%;5UUopmqMS&pVM>vGmvT4{F{Zl=wv;+Xh#La064f8C*$c23JsgHRHkM zjf5(D0#?sta4ndT(X=tR%q=PgH0~Tw#(v6x8V5q?QwP*|MFVP&PaDvf0bL|Acb?2O zpo>K2&Xf7+%segQpz0sr8iTeVs?HEo8E zMkXkirn~YLb$daqfcEIuJ5)=cTA!_ONp}%0sB{lOp(}y_U5qtMk0te*pr8oFSr?PW zK0SumHntLlph@I|P1533`LG)_?3Zesz9kxw{W7zmX(PZ?8(NUr(DXsh4jY8B7&CnTgxEokT5g7Jncd}< z;PnAVUAblJSccRbiz}xa;2+#th%CStaof|EUML5#`pC%2WAZp%?|%<{|m;TL>!To z^ds9EtGMXHeHgPyBX5{IB@Owm1i@A4xT($^C(g$*$|5!I071uK<0Y8wF)=sYv@A1o z<|^P3t^%7?)=nz45Hm1MFy^pIeHm4=@zxC8|0_0A4mwYJ{4H~*c5TWkhGBIjkTNwG zq$@q7awsF3Iw55*w`G)*S^=pfb}OB{*?@%%Xn~IfZhzz<0YfxS8<nsJp-e^erD+GVtC>u1lhiNkw9SRO0>c6oD{lfN_NA5pKdfV8{_ufh7&%ox zN9vqFRrS^#LCj8ybJe?7-w?oaVr;uHJ0u`)>}+6K87zNcS=Ml#MW}O8iq#>dTt()xVXYN$vroDW1 z;%qknz3QWRi_(6eF=wBA&01`pZ-h=YAh}LB- zr%Wo|tO-dA^e(~?dO=w>`-3;fx>GR*v1Yin(DiygGfcXX;) zM%C$sO6kMcRXO-mo%yeC=HR0s%v;Ag@Oh=vR7rluJ#_=lOwu; zX2lob(*04Zd9kaGg?t!nO9L0lSU5kOWqYms!(~~!_e9VZPwxYbTN{JG2bUT|hsY7u zSkPTgjtCP>?72d0(Q^Hm#3}Y_A;$hcBhUnocK~fsD+cte)Nc?w4d~ts=x#5s>0}0U zC&&Ow?u{b&Z){Auz+_BG?Qi3EUHHf)0Rxo(8gtu`+{sPHyJsw&LtA`;y;c63&wSJ!1# ztXFq5=SwHMb?V#MI|5f;ew}KeAuDR{cwX`Inx-!*qv%KRe5oj|(5o7Ave_t`l^lJf zdxD&=AE4wKFKRETBpQf;A6Mh2FZ&OZc{HEHB!Gggxd0f3sA9BTMQ?M3#|_&|rc|@y zv}*iRnu~9teN$t00bemUYW7^{rx*>WEuONVHNHKELgJv)CH}od=>YQ{^4<_>OBPLC zQUnmcngBPQu0lwEkn>zApuofPC+SGsl#w!?_d+YPEp`5B&;2-6sU($DLH0S8Qb8)ImNW@LrFLOLiV)-UFpe{#odAJQRV1m86sRFpHW8yn z#8hF^Hlt`W!Z>6Z5xZG4SrQyp53?GTwPcob>vU(F{J~OYCeGjtE|JXd_q=yd%Z%`tfvyoTCbOqktX$qcC0}1lq+aZb zC2{2H+0z%T>}(YQG8pX!^vHP`;x+Q6le&c>fCSnq0y>tZQHn^7A|RpOs0grEIOOa( zp?{~3!dJ6n`Omos*R+q+OkcZ{DQ`J3a=rky>`KOjPuryH z@gVdyx+Xw{z6K*$a-C^gar7(O4{xEbZQlS#M%PY(N(S}07Q)mey7#W*mwahhv9LJ3 zF?{FC&1Z;%+3bdJplOA5!GF`*wT-slFrH2)q*exFC2a-O1U!(GOjQ#UnC8(`fk9iD zK6-X-#T`%roS-eB0Ey3~wRuIz5ZeuHyCO5)Xk%+cHE|s4_1SH15*%DveqS=vg+z%p zi;wMBWI!0ygx@wt|0K1B^QryZsNBv0u7faxnHzzx6UvhDEW%0Ad&bKc{6LpChHNCb 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

GJ}!vpQLBKu1pK9>jo;(8Zox|5g9&fB*db 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 T4kr-L^z^M+-BTOCxc`3vi{pys diff --git a/utils/wasm/gif.js b/utils/wasm/gif.js index 51f8455..e461f12 100644 --- a/utils/wasm/gif.js +++ b/utils/wasm/gif.js @@ -1,103 +1,106 @@ const {version} = require('../../package.json'); + let wasm; +const streams = new Map; + +class mem { + static alloc(size) { return wasm.walloc(size); } + static free(ptr, size) { return wasm.wfree(ptr, size); } + static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } + static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } + static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; } + + static copy_and_free(ptr, size) { + let slice = mem.u8(ptr, size).slice(); + return (wasm.wfree(ptr, size), slice); + } +} -let cachedTextDecoder = new TextDecoder('utf-8', {ignoreBOM: true, fatal: true}); +class Encoder { + constructor(width, height, loops = -1) { + this.slices = []; + streams.set(0, this); + this.ptr = wasm.encoder_new(0, width, height, loops); + } + + cb(buffer) { this.slices.push(buffer); } + free() { this.ptr = wasm.encoder_free(this.ptr); } + + u8() { + this.free(); + let offset = 0; + const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0)); + + for (const x of this.slices) { + u8.set(x, offset); + offset += x.length; + } + + return u8; + } + + add(delay, width, height, buffer, quality) { + const ptr = mem.alloc(buffer.length); + mem.u8(ptr, buffer.length).set(buffer); + wasm.encoder_add(this.ptr, ptr, buffer.length, width, height, delay, quality); + } +} -cachedTextDecoder.decode(); +class Decoder { + constructor(buffer, limit = 0) { + const bptr = mem.alloc(buffer.length); + mem.u8(bptr, buffer.length).set(buffer); + this.ptr = wasm.decoder_new(bptr, buffer.length, limit); + if (0 === this.ptr) throw new Error('gif: failed to parse gif header'); -let cachegetUint8Memory0 = null; + this.width = wasm.decoder_width(this.ptr); + this.height = wasm.decoder_height(this.ptr); + } -function getUint8Memory0() { - if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) { - cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); - } - return cachegetUint8Memory0; -} + free() { + this.ptr = wasm.decoder_free(this.ptr); + } -function getStringFromWasm0(ptr, len) { - return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); -} + *frames() { + let frame; + while (frame = this.frame()) yield frame; -let cachegetInt32Memory0 = null; + this.free(); + } -function getInt32Memory0() { - if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) { - cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); - } - return cachegetInt32Memory0; -} - -function getArrayU8FromWasm0(ptr, len) { - return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); -} + frame() { + const ptr = wasm.decoder_frame(this.ptr); -let WASM_VECTOR_LEN = 0; + if (1 === ptr) return null; + if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame')); -function passArray8ToWasm0(arg, malloc) { - const ptr = malloc(arg.length * 1); - getUint8Memory0().set(arg, ptr / 1); - WASM_VECTOR_LEN = arg.length; - return ptr; -} + const framebuffer = { + delay: wasm.decoder_frame_delay(ptr), + width: wasm.decoder_frame_width(ptr), + height: wasm.decoder_frame_height(ptr), + buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(), + }; -class GIFEncoder { - free() { - wasm.__wbg_gif_encoder_free(this.ptr); - } - - /** - * @param {number} width - * @param {number} height - * @param {number} repeat - */ - static async initialize(width, height, repeat) { - if (!wasm) { - const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(r => r.arrayBuffer())); - const instance = new WebAssembly.Instance(module, { - __wbindgen_placeholder__: { - __wbindgen_throw: function (arg0, arg1) { - throw new Error(getStringFromWasm0(arg0, arg1)); - } - } - }); - wasm = instance.exports; - } - - const ret = wasm.gif_encoder_new(width, height, repeat); - return new GIFEncoder(ret); - } - - constructor(ptr) { - this.ptr = ptr; - } - - /** - * @returns {Uint8Array} - */ - buffer() { - try { - const retptr = wasm.__wbindgen_export_0.value - 16; - wasm.__wbindgen_export_0.value = retptr; - wasm.gif_encoder_buffer(retptr, this.ptr); - const r0 = getInt32Memory0()[retptr / 4]; - const r1 = getInt32Memory0()[retptr / 4 + 1]; - const v0 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1); - return v0; - } finally { - wasm.__wbindgen_export_0.value += 16; - } - } - - /** - * @param {number} delay - * @param {number} quality - * @param {Uint8Array} buffer - */ - add(delay, quality, buffer) { - const ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc); - wasm.gif_encoder_add(this.ptr, delay, quality, ptr0, WASM_VECTOR_LEN); - } + return (wasm.decoder_frame_free(ptr), framebuffer); + } } -module.exports = {GIFEncoder}; +module.exports = { + Encoder, + Decoder, + + async init() { + if (wasm) return; + const streaming = 'compileStreaming' in WebAssembly; + const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer())); + const instance = new WebAssembly.Instance(module, { + env: { + push_to_stream(id, ptr) { + streams.get(id).cb(mem.u8(ptr, mem.length()).slice()); + }, + }, + }); + + wasm = instance.exports; + } +} \ No newline at end of file diff --git a/utils/wasm/gif.wasm b/utils/wasm/gif.wasm index 216a447dc831a4f0f56e0ddbc1a98913cfda96bc..18e19500ba234e39e3f51c8c979cc376ce125f9f 100644 GIT binary patch literal 49504 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 literal 60775 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 r.arrayBuffer())); - const instance = new WebAssembly.Instance(module); - wasm = instance.exports; + return (wasm.decode_free(ptr), framebuffer); } module.exports = { - /** - * @param {number} width - * @param {number} height - * @param {number} quality - * @param {Uint8Array|Uint8ClampedArray} buffer - * @returns {Uint8Array} - */ - async encode(width, height, quality, buffer) { - await initWASM(); + encode, + decode, - try { - const retptr = wasm.__wbindgen_export_0.value - 16; - wasm.__wbindgen_export_0.value = retptr; - const ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc); - wasm.encode(retptr, width, height, quality, ptr0, WASM_VECTOR_LEN); - const r0 = getInt32Memory0()[retptr / 4]; - const r1 = getInt32Memory0()[retptr / 4 + 1]; - const v1 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1); - return v1; - } finally { - wasm.__wbindgen_export_0.value += 16; - } - }, - /** - * @param {number} ptr - * @param {Uint8Array} buffer - * @param {number} width - * @param {number} height - * @returns {number} - */ - async decode(ptr, buffer, width, height) { - await initWASM(); + async init() { + if (wasm) return; + const streaming = 'compileStreaming' in WebAssembly; + const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer())); + const instance = new WebAssembly.Instance(module); - const ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc); - return wasm.decode(ptr, ptr0, WASM_VECTOR_LEN, width, height); - }, - /** - * @param {number} id - * @returns {Uint16Array} - */ - meta(id) { - try { - const retptr = wasm.__wbindgen_export_0.value - 16; - wasm.__wbindgen_export_0.value = retptr; - wasm.meta(retptr, id); - const r0 = getInt32Memory0()[retptr / 4]; - const r1 = getInt32Memory0()[retptr / 4 + 1]; - const v0 = getArrayU16FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 2); - return v0; - } finally { - wasm.__wbindgen_export_0.value += 16; - } - }, - /** - * @param {number} id - * @returns {Uint8Array} - */ - buffer(id) { - try { - const retptr = wasm.__wbindgen_export_0.value - 16; - wasm.__wbindgen_export_0.value = retptr; - wasm.buffer(retptr, id); - const r0 = getInt32Memory0()[retptr / 4]; - const r1 = getInt32Memory0()[retptr / 4 + 1]; - const v0 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1); - return v0; - } finally { - wasm.__wbindgen_export_0.value += 16; - } - }, - /** - * @param {number} id - */ - free(id) { - wasm.free(id); - } -} + wasm = instance.exports; + } +} \ No newline at end of file diff --git a/utils/wasm/jpeg.wasm b/utils/wasm/jpeg.wasm index ad9991923e9ca8e58b76ede750fec8f6838779dc..ca6b1c896a320c28190e585293affb78eff810fc 100644 GIT binary patch literal 92972 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

Ghl8IGR4axh9|ktk4AQXDFJG6A(|9iWr(XB%r^l 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 WP}kjG%wa!auD6is$=0QJ75^8v`xv$W literal 142662 zcmeFa3!Gimec!wHK96~w8I6Plf*EPn-WtIS=rLfBK(dYY42+NggCB`W;|Gq7A4g+s z$zwtqjK+W+IiZe{kOarX#W4*y5eaoj%cobd<%ZbYerVu+!fmM8&e)|4ghuiU8H4ek^PZgu-xD%Km4R`Kmt zas1i%vo|K6<+t*O>eF}PYJWXh*4Gm^s(pQNS68iGO{)D})qz^qV6_&*A-z8`Z%ow`;W(`l)d<8SLw+CDl6r>5l%Z@Ss}l>Lsa{ zdur9V8plZzNA-F)?ZiAi!`@G7T{T*xIWF9ZqFNV)RY^6mH!77RszsGbrAigm&(ATC z_*3x>H`MO5WVF2gMN909^SQahQD4^yWqazMxakw0-1}2WRKMxw4}J2(H$`#%!#7!? zyZVWnWNEPC+=1^0@Ck_s8yQ@sE#f{Db(GUyXk)Zhk9% zApWrp*L@*=IR5?kpTxfse`}U9jLVV?qrk9-aiJyz#dG)scCH`W(edp}2 z$LIdU{`gRQ!9`z?uAxc9&8{~4kBZ@!!)pWIiyeO;6v{*!2TmW)Qpj%0_6^EWrM z%ElTj$|IGnN!8U{bxRVt+Th2sJ(DlScTQH` z(O-2@o@|SBiS;nbyPIy$)+B1w`y5@0vN~N(yBx3Q`Oe%6+`HS&%f6}P* zshkFHQlsISY{*NFS{Rto@8ZUtWz5NJ1c^%4;3 z9tia^5RxT5|RSL(|)#fGF=Gm;csxqb7}SvpbFEdd|iPlUW~RR&R-sxcFAPCwek?x{E0}lK18j#Mz*1ub%QvD@?yLvPo{?k z*KzkdQ8Vq~`ZU*Gu8(u=<9eKHgR5&oG(|1dy=gz`qj3`oP6tRH{$DA!jKsHSEFC0q z=zAoVldyJIG}9F!y|S5}5z>{t=}Ic!)=XD%8Ed9za#0m$aeapCYOc?7J)7$ZuIJ<{ z(rR8y>(J7WsB8Ye%7Q!dOPqSX0MQCjgdd2D2Zu=Bds$O7vyz|jDB4=lW8E9ny}^LI z#I3Za_g*H-dT2Ula>Yvi)-)4_>o=y;YM*0LZ;O76OLbdx!>M;J+2Ol4Fc?RvJ106T zshmBsdi78=98qU}Na!{ekW409lY=6Jr|&%si5N{JTauGww3*~Dj4}5g<1y)HBhoK$ zU%2I0xEs8X#MduV_PMwT;fVYwJYG2(Z;ifk8KhVun5GR0?I*2G_e}jGm@dT|K z*SKNOA%6Ol-6Bi+d;W0@!K_Nx@@AF45&j(cw6V1hHpn!{>iOVx{mb+J{BJ6*eoG$j zxw3zGKn09#+129jIh&64TINJ@4Mt zPw_Y%CEcJ?^!_KCHjgWG-`Fk11<;lz23O8~99wZ4W#N?`~eVV>7?ffxuw|znY@cG9;U80Gu7)`5{iUd zl?iTv_zmq_$tbtbMV#jgaDd97P4mp4)YIoAaI)&dlPhmWRRO(Oy?-18XXqf;kXp4l zj?!~oyg9x!J*_(xpD0 z7_MviiYDA(MUXn0)#L}8z;t^o4gq4}9L=J9%H#v8!)mFSRgrCd$P44U<8yk`66=&7GKP7zq#_kP|;#aP_8EiC}^e%k0{Ks8viBt}=`O$9p}5j$H8I}7Tr z7@Jq06SsC-w0|q?ZC}BYuZ3F!Q^fEgNTDT%ANXQR4p+7$$6`$zN!*qk-oKUfQSM8t zD3BsKJeJ&hnN)|dN5#BVZ`y+bV_f=l1HIhU7=o7{=EAZAhTIRY?DoQiEIiw7STxd z!X|QP@^^Om>%pu1^|yBVE6mc%W|htOa}IHzB|9nwwIxel%Oog@G|7_+RWg&>s1orb zvm|q0XS0m%({x!hR)7;Q^V&xBmJA+x1fX(j*`5sU`84W9K5}(`g*%n2vE+t9SAABR z`L6y6tIu=uD4&Z@_C;m5xY|GxCny(p-ifv`mOpz}p=~5(ZNQASHfZ3f3qb=l)5EkT z9%~?ic9@2pGx;<%2ionOXSA8-P%_%y*9kjLkHkP*Ot_@@R2#jES*qm{>I>XSdgN$Bvs7&6AR=9C z=01t``yqlYa18&btnNR=J?yr5VBt9+#j-D z=bQ^!uXDa|SD~SJu6rV6;kwURI=>`MrTo`O)Ek+Q+Jc5AeQzX6g8x2^M=7sj6;Z-# z75N?U4B|YGCG$mG{@vm&cnNPEiQy-^^Kb8K%8nWZ5Te6se!py!_iD(&>$55(R)j?G z1GOQ1=s2wAg8b1h^YW*$Icrz~zbOM}uy7fnzJ}C9NUSO9b2u=z$H7g7)Xgt?iIxfz zYJb7hf=zY2btCk5o{X|lKQ^7M)tns3Wh9!=sxfIq&`vN0hU3wfv06iK=$jd@Ukk=- zV?&|(Cp%v1pBleD>oScfZ_M~9bXB${t%+4jRgw#ER?}XJNLuI8Xo{o2*!m+lt{g6J zmLezPBE}zQwa8^d38o^N@!y9Q(UZ5J5p%gX&AfgbtMO~_#n75>OJZcnw%X!P#XP5c z?5Pf~2vJmUneEM|s=is%B051BdIW8dq*^g^%oC3!hDY;^mrcVlvP^X4& zB7N|8QKqUuEQ9GwZFK{(NCyB?|3G7TU)~=kETw8TS-<#e#Te-HT|Rv}o&E<>`f+l! zI&CR+y73kadr$xO{8~Z(DQe$9HR-Qb`b(UtKM=g1s0<#hehn9frO_vDjTCcv>eg@{ z!t0`*Y$c=0#x>y~iC*dQsT0Dx(`uOnh5V}SQ#y57p_|L5fWk+Z;Fuea#Mub?A0+IY z7o?6Bq>M?A%V2H0(-;Pk?v{toERnUY3Rz;+KuW`|z6)gpkMXX4nI3Ch9sF6(P*8SZ z^FYbbIiuz?(hcN+gfqZrO#cp9v}4;o|SKJ$KK zal`rk|E={T_8FcCCpmLCucjO6*Kl6hGoWRbsM?pm#mKTh&fgL^TrJ(mWT(MPj7opu z>4Hk-)xiA_vR=a66|!E!oDB2OOPJ?F)=QY+hiKSrv4ahsGUV0g}662y85tnqO1A`-P$Wr znpe7t*~;T~O((z`hOV52>)fjJLbus0=xRDbU)HJ-C{V_d$N46AA^$dAJtV8#Rp^O2 zGj(upT-nS4-~bWAnGnEY<>Kevx@|wWZpM;9w+`ryYK|~r z$CAeK!N_H4?A9_nMs1#T%OkJ%@dHcwOkTQrwAx|SHu7+E;E|09s1rsiMT{pJ@ zEfm6Q!r_}tOo65M`E!~$=n}k5N7pfwRNWqBdMoWVF0V#FI^CUJcx8W=z19-mky|N^ zzK{#}wVH0Nc%(4^EM=t-9^It+UY*$JDkgrHoVKDH#HrDX19&O)G7P=of;Dj@YH*oZ z&~@h)z_oU|a80pvFxr8)3AZKS3Jple$)^k;Q!ud!91n{|5r76pxr5;2;^0!~ss_!K zLgkv`r`wUWpN3L{ARx20$rNPBEMgiw5zy8J9G(rC$ZhrrY4hP#Ei@>_6fx+8$yaBh zAj3_9+xX;$j`)9htg=31OkZSJNOZZOyhN9b>K3%SL5Z#_t;nm=5Gn<#F~8SPn;37B zKcEF1jigv8VL62KB+II{P;x&2C>Ba6C1Z+$X04dDbe}yw8ryBmhnC;Qd^q>};p97unkx(WKq(I&lfc6W-@g_363RMU84MRz4J=t z7Z;k3Xi7q4EIRPzLYebIWPk8}dLc3wvR;V15Y{KX5IGUDUWhywvIvo*r@wmns65H_ zMU^NlxQhb=E(VIDDA|#pR~nDjTgRh644Rzp@u86QJ$^J~eUA@@EH6Ib)6r@8dLN|6 zCl+6C9q-G}3q4LsPOtv*>Xk{3Lfi>sB=Mh_ZiW90A92fnCQplOg1OuG*iv&|OJNRa zT{SHH2gl`wfn`xr{x3#i^BT3FjKxrsk((UE8nP(dNI6tj@|2}|!^?tf1YU%^f$xos zaT%30m;W@BEeFf6i6Q(fHEvL&8`b1!Inj_@HTw1{{VnxH{4L(sqGbXGo>z8ycd8BW ztDid@<+Z_^(W@!|?WeJqnc?0+QkVCnma~lLf${aCEW+IidOJd6FAAWP11--3Ocxil zIv~|3K?-TeZeyuP=I0Ug8HLp|&Qgx#W zMo|p$ILkSC9e6S5jnVH-<5a6KrhEg2@CHpcuxMUn`X`<-7X8}ijD^&S<+NY?oN1}G z+|R(D4Ou?}?+95x1OIxiD9jA}OG`u6*s-{aLCq}7C6iIQ7t*RWAI?6V?lA*-&-Kvn zo=H0Df8RayAPx<1cU^yXfea`0DT7o{hxprtDBLX?h5jV*ss?p4wD-E|!`bX@G_uFd zeik%YO^jH2w_tJ4ufu>%b$5H+r{AshGgxb8PBo;nx&7;n9<3^91pph~ZA5(5hq8@E zjfxXt;%yW-Z-Dy7%m`4a{Ill%holIQ05cd}Lj#pa{#h5hjoYHXAKn?4!5?pnemdM3 zD{kD@7%JJ23w-n*O*$?jltwo1V=fg)(+Wxl4rVw0*4)MD0IbXQt9 ztI9G>{XdUoR0ATXWOiyU)ptwz1-mR^)}?O)Ryjvf)XBPRO_?mgnXg5Oj@fm(Yffl+ zE!ffmED_!(D-hr)RB9M#HSq2(6^A8?HC{E1&74Z<^(;xQTGj}m2Gs)yT9_DVVZy^- zn2>t}g3?gEOD%+B4gQ84Yz0MX#c`Pffc&VXf)Ix~@rJ=xUd9WchENNf`DN@7#8%>Z zBHSP!(#`NX&9i#pc9(qcZuhP>_}k8;R~+I-8ztrjJ^_Wux4f3}4xA1Jr&p8!%Xmyt z$Xt|g7X0k2f}d&LvSyqwGZo_7-WeO#03QokSkxny=3T#z25p|A%zg!vs_j4xgqEKb zX0CJr785YYN{b2G<69eNtD(=rBi5Z6OvvrWfH?T z##BhQ$A`xJ_27`d-Z$W{cgIChCu1GYk`=WpMeRyayWSm#j)066k~&)Tigxlt_*uHH zVjcCAhwaRQk92>T(wQx{ir34#rm3Ulo&{@oJ=FASru`xdR4uyeSnk0bE3e^giw+PO zLF0Y}@901n=VDi;j+4ipLGQxGUzbK{NOAVk1`=_wlvoFv98GC(RVDugz=w6_nwxX^qojd)e2HV zZ&Vwj5}K?@YGNp03?7v!)TDwkq00+n8gPkwr}>~*2O`>#NO^Q6D^84wQuJ8ff=?Mv ztKf7{qPwLiA;Qn1$ybTf)$jS)lB<*)taZ~Wz?zx==c z^0)r-qQA_I+Y6ubmplCBPJg+}Uq0_IU+|Zo8OPYwgh5CrTI;RlpKNCMTjfDDUoEtM zPMHboktsX7<#X|J5VKz^QpiEru)IYk2azv}6VW4gw1^0~bNrx@(6l3+9C}=#zJv(pWDv%;!Va zYnaDF)@zu@LKgOY#L_h6sg*W2(dMRkZJuk5{Kq?rMtqw`L)L4x&xWjT^XZWFZ9WmQ zw0YRlH00Y{TL?k4=rh4-2jQOX+A~YxK{N=vK?ebDVt{!1G*b|Dc&U7N2Y_8!0M>_h z{7vYn@ArQVS^E7KmTs&@xhTomP9vfCbAp~wC2a-vjC`)&Rt{kABI}NoPyd99jt;1 z+y-xSexM(p>&WI9VWe<8j8|mF8c7csv}BZ&+oz9NV*1sHjMoM^px7-HQZNe6!VqJwg;?8c&AezkcQA=spYl6-h=y$BR~c}iN@ zn(U}xXvWqCO4cpN4W6+;bqz`iCdiiL8h6$uiA-j0UI7Kflhv)s6+ne&&&G(7>edQT zFa#&${TK)E9^lYs42MM4#-eP9p^Dw{k&C z{DP}JeAm{>r^sb!EY0k~Ey;{BTau6I^00+t9*!t;BLZu!(G)$-j+>6cqO!-Ug6#6UY?a>CMUx_aBkp?sB}~CP8b;uCT4-ieFA_t1`?tf3 zEvkdt7H>f7qxp+3R`z73Gaz&GlNakXUT(i;vdjBBd_##ua?Ne>Jx|>x;x_2HENEt< zB#BKvV$EP!?Vc0GA{W?wA ziet7`+_-+sJ*z0Gd~VBv;rWSUuAc&qNq*uy6$2LSP9V9sB^9Mr>exBDMV0MR$TV(I zWxJHXU^TW&d3i^T?NWZ&)YvXn44W!j=mPEx&PIGnL-E|k54r=SZEg`z>LvJ8w!MLQA@Ei%ZvyONW+g`H8)R zy2@SCCrYi#8Ge?yyVY$=2-bkrVz1JvaoC4eHT(Q{VIw56O}r*3tZp%%8yMSa_y#xW z@AYCuIm+Sn4CgguMKGErS&=hVG~rp1^Q_1%#fn@9E1C$bXrjc5)_7L5&f^hg*`ClZ z%ZjL8lkW6bQ6}@{G+9x>L{pgP|1efGK93a{>@jr3iq;ty($6|5O8(^k8CVg6dwp2Z z_|mLs4XkM0>&}XVyG2>i^@@_w)V|@hWktO$RnP%ADp zrZf6r3?W#qoeKWHwqfA?U&Hc$)f)|2^Mw;>5&zP7c(kcVz<1|47W393Jc@Jvq%?ai z;wy8g$h3-}E_$OUR;YnIZ#8je*H*)wpc9KVyEcQ5#if0@`vyGeQ0_o~D0okQP}oZ) z4-U0T-hWOg`M^1glsq)nD*4EHq2#0Ib(D0DKG21%-PNqs)ofu`DHpm*xzN=tU)WVj zhOSaFbT!Ktc9oK$tCS2~&GPwO%}l6)Rf#V1*<-jUh0oq(yZP+B_a1x_WoxTs=DJS< zotd?T^@TcTi;g(3rJ1u07UdKMm+bHsq~s~MlvBZ5kpJ>7Gm{k>qUF~oLROZqrL{Rg zm2hS041Ui3ixv$fn+fulb_rCjl8(MP{;i#9rYk0&Q}5z`;%&kBo4$AP@A!RxF`FZ? z6;1hE!In=`nd$svJJX9ah(~v(Z?eJcOfS~;;Lh}tLg+1T7mxqhRp}OM<*Ib6uHU>W z#ZxyH|ISsZ;-RH154MXZhjyjgRNG^_((SrFx+{INu8-_W-$HR|mCHhL4?*mMw-UW` zxf@9#{WNDxxmPQt0Ed2;glg-S*EFS~wr+XVPnu?N3vMv$W3Y&oHbq|1N3oVV;r3ANbd4oaPv%kf>$W2}MaR#=7={OpmOY#5ciiUJdS8S`J zvD3ESjzMVLQBIU{UzG1a!7>Hg!lpbntNGW6d9di#coxe7b7+@TifaafFUWY10Pig%fEhd(lJX))=tmYy zq345h7)7xL_g=Nkb-%4-9Z8(#(}H@1Ot zV;d+kds?J&c?VFo6hPTp0OisGD3|>J0p-Il1C$T9f%4%tP?%U@O6_QYg#GPqTLF^o z1xVgpfaEQ243I$aFF$!c_A(&(SQ{iCYn;Ivm3TuH8PyhAUO-7`!A2y$n5N9Ns4?8f zOfEE?WJmai$(hV%Rn728H~@3l(o?1M6_Qojpn`R(KVmkobnEcorPJ`?WH!I8nJ4Vw zZrVQYnwvzPtW6z4YQjyWo7~!mv%UDBt{^6KZMw!cT)|V45>A)y3>_(7OA8y``jpO) zY4r_;h1d<}UStbbre41lQCzlcM4I&nf3Oh}l5}+~NCC4HVc~~ew;{L3n>AM01`~(0 zWzbay0W)O9T6xExzu=7h4Mwr?aZXzA3PXYOjB8VjxMh8eXN*VLuxBK!j`N z!w)lh0BsO^$_Nz?#dvU=_o=Y-P{|xc^112|C0VZGp6z6{B}hg7+90y4glMh6WUVF0 zs|rNFhD+bLLujMJC9i3s@!FDAfoLs#&&R`eqcqOH8@7szAYTB!+%a*f3JN503#E;H zpsXh^VkRswGAJJm1`!8TB2VlsS+*@YiumW2);-C@VYUG2%ke9_^{nn@SCJdJdJkD! zJgm5@NW|QzxC!S(GV0d^yKrpzb3Tzg`?D`YB&b1)EPX0g+=+e}_OAYZrDvsBXfaZu zvpHcLxlg^we|S})mz@;EkfER=%KKScs7{mhw1y%UIX9FIiz4j&8Q7Brwm>nCVhiqz z4hIiX249@q2}Dxd!cbX5IXaM1cRCCe+N(b5#^_lVT{cSq2{xTvD|^yU%Q0w*5wxnY zkefrg-;ae80yGxFO(^Kc!Yvz%*CRJEmg-Qpi3V7>2L&37yfKVL z5Lj@Zuw$pODCk8rT69xX#i$-mKkaJiransP?Ix21G7+cOV1a<2s&0)&1Rnw2=K5hD zn0B(S(Wpqzf`l4Sui01@jEW(*MwR(dajP_{3mMg#q0G^Uk6b8?YK-;F z<9M4lh%K;pAQ57rRd8jTLOU;70|*Dn9R0bMnVOg*i%d;fR7>^48snr01EjeZxML*i zc}r!7vqKAH&u1fStY=5Xh&FsEL}Z0lNte&C0SO!+j>PUQdfuq7miH+b0fOAW)q=BP zMKVC|#_fHynYg`=RoDo(zp_KDhkz48Dnp!^cwfgF@9D;wi7PA`=yaut^}XRdubSIi zNZq}Xy6i0bP6W6APT=+mAUFXwxKnWZF5p&GsZ^Vq*m99S^Yh-Dvk1%oPKm)^>6Hf$ z?)kqD(WjQRSLqy5yJ7>k-Zq%Kp=zFS;;c*+)Xw_voRJ^*y>jWPOkB4O!o# z10m~sv_E8NWzN$1+q~ zP6xN5R0{PjLYL3~gC*#4>9YmcXhB6~n#HHnqFJ15#hD1FNV8Q*#is(FWSk2i*@o%M zrvQL?p3X*$NhalyKQ2h24|Xt{`MY%LPd3fLL4!m`nBx{Z)lExCt;3Y|@z>fhtUZTj z`Va%7n3qI5g=g61Pe|EXDOhW-%TV*y&@2(yYf#zZ*>qCflrk5=jUI{7zfm(M<(8!= zyw9<&BAp#e-L~IJoT}fq_}jFvh#5@95vguX;vc4S zj4^Lix=NF`edb0pb0I+zEQ{TWJM}1bbdt%=^sbN}M3%I-1tr6^)UK~}X z*h5BmHFjho;yZwQT*Sw@MM*B#^n^d3>cCd@jJ{2%FJsC6t?9L*6XFkMQ|Iqw*SfV* z!RW=Xu!@Fe0a&$bwNqT67(q*`nU+>#mpk3Av6+25*4~dAYMVcg!F<8pJ`{notkx(d zuu3_%cPm7V#o_(C=9};l3DEIvK+6W@t>L%3Pd}Jm$IORf8Iroi!3$M)ZTav8A3dq~ zF}W$M-*iqoV@!9!O@1U2eyBGeNk{V$$pqM>7C6>YLK@$A^e4YyGC?t8%03ygp07V1 zvOGFuX{x$j=S;*Kqubc=+KnBRSM$feTr9ESpz<;P#d!kH=s|IwMtR&m20A9-f2Y-QLci;>W#=seq@0v_LGg|{qCv~|VtZ}&lzC!3nb_I+gXVu$+=A%5y zPyD;0skaNmRfP+IQOsBAZ?_4@MaU4n7sw!QF>G_V|LMP>6MvzfMqY&e`QsZ4PVD-L z1rf)mZ=qr6Q&WKkM5(PX5I=tj^AZOy-U`E-%HwNoR!-;l4K%YU8v>-w`-)e&!kuc@ zjR&`S|HPjz(R)o18DOQ}`!;3F(t8#Ji|)4<1bzQu+vWbdNx;b1oq=Aw+ScSDD>>l` z|JjA|pUEl3#RIzp;pf!H7xeQRG1xDnClxA*xSQWe-+(%43$fP6(n757B6GO2ivn&! z7X{kT#R_?WcDmfvDi-kku69E7;88kyNI$3B+W=BmT4P;|B(&TJAo96?@2NHy2_Fa< zJ-NTg0Cukhi>Vd_qIm#c)ihyNlqlW#Wg_fLaR^WKp4_LI|B5yh1_S>3@-eu?*gP)b zmBGIWe84M%e-*NxY5b><^-SZ>LKdd+e_5KEuh*^*FL}mroAuXq;(^B*lDQwTW(SAB zon61B?!7GkYt6w6ic$}WTpr_R@I5wFHK9)9&1YZnoA-hFSJviHF(LJK1j2hV@H>X@ zJsWK{c7r+hOS5Ohh|+|s$heqA;PYj$mK40*W9{p|Snzg_wXcM%$J#H2tjF5Vg)CUR z)6#}D9mDF@+IsqWFoBG{SI1{2TPxZuVnLhHAV=Tf3%QgtTG$WS4HZSH<4-5kYOa~% z1J*D?cpW^N3cWf|)AFe}=Cy7b7l(#>g=rq1?Yk>VQp^@m0K|Zu9-jhbYYv4{K>Aro>fpsSX4VLLHIg*g(|t#>?`b1 zdV?DQ0P;*pSva%l-sRPXRZaJ9pIX^;KjKp;73;lvL7O{$iU`oFe2S&1cls2QW6IZu z!h1#0u^qnAUg2PjgHT-ocN4EuZp!1pFDqZ+m3!gER>rDsl3FD2QS@q%G;EW>NrfK; zx2sKsMtX4q!nE9lC~2q$)%>8KsQ8;J$Q%k8=~M?7%n3=1WB-pYpFdB6Q@jrTC-QfK z7CaqPpqy$`=E-vANGn4-$3tdOnnfAE%3TX-Ae(@LNLd6-I6jN{rYcbT#z@H6C!(40 zAT^~;4m4CjoYI2A8W{^~Otw+a)^t6@pfFX<5{t==d=LS-xzX+M9H)}{Jx2aIw?*e2 z-J1R=&)J-L>>RiL;mJlgSGLC7;9OZcaSf^3mC|Lr4goCS!ZD(c` zeIBEG(ta%P1Quzw;?V)cqvLTINZ+GFQr=_7($KWu?!ZM0d}i07oT;4p^d1{MJrfDq zCR6n8nrFIeMS}&|L4k?g6~9^fpF5Yq0ihcZ%J>mxvv=)If6Sc=W!MsV`uE&f^!zrT~c&zH#FYxwv8Z{MgpjQxZ5y`7kIM~W#%v7eA>IGfd)*;U{|#&g8l#uRjvF?m1i zRiAfa&XIe!`yfwr?9WZ`(exvtSR&W)LVuK`V)Un)>5tGmC}nA2(dc@=({>UkwoK)U zBef!1;P7YzUN6{8E>@esEOl9W5hF-x|n9^Ant+Q6>B@fEtJ_+f!`nIxD^2Z=A;9?WQL( zc>TuduY9FYioDu$PspP7+-+$#PLFaxa=t8G!;8>nz6_-$-{)$x`Mysxro$0b2Vt8c zvoV?*2OPE1>6Je0s%wxBN2t?yuUWl;jj3qL=2K1_akbss$dM$<|An!PDM1{^7qpYq z+S~)+YP<8x_dL9Ra-ZA#g~@%Nzw<$N1y&*41B6&zcIHgHM#2L0s41; z?8D={^IlYlw}T~BgkYgVV7trNGX~`~*5c3+Vdf8frI=-Fm3uVg;D2ntV@rc=zk?ji zk4XPEM!!3qvh`_WM9Af|#b^rRbAMaequ9_jja7{26~DYvz<#^&9ul&!keeU28RKnt zo3N38b_4S;Obg9%d}zx$$bXG(Mv@22LrpfE_JcsUetNVfhxsxB9twIwf{l9AYa*Da zBp_9T)i_UeknEMTDQ(z;7k~lL5maX@*`s;i)%|DrW*}_X<*5?(S`jvkXdz*1^{*gq zwg=^6KxM(E4J@=a^eOecG;d=hO}J&QTI_8KH@0T5yX&F4N*)g*J3^$_8iEQ zU_n-(-un|_N9J+{tbVXi^C(_XZ3jy~HeZ}M!;^tH03z=a+kUCJ#=M3K{bZiJbpL}g zUG%kxga#4#ov*Svti{o^;`Pc2)SwP7;U(gJ0r-2|=);rC?)39}6fP;a0acJ)6LS_< zn?FzO4!SFkG*8zG+6G~2223>_F6XJH#d-_IZB1vRg8j4_vU%+rIyXS@R7lBS0*@?6 zX*7%`@W|1?BVWGvqO;NY43sWGQf|}}nO8#SdqHHyV3}JQEQ^`bV*KddZrU?`Em^E@ zji=_OUv6r!f64f-E#*>v{&=Qa<572~=XclhdkhL=j0f?Kdb>xA@lZ$Z$&TESc8)MY z8ZRaRPIY#$w~X8SR1D)b7`w-`uzfR@^I)! zsO)4oM;5Ilf3p3`M1Ck_P`mPj%5ZE^F6V${K7eqTLeIC1H}mLCyI9Rq5xReoP<1j-bR=5rKb9r3tIYV08&4E-yh283+4Im412Eq9n0q;v@HSh?pwhhydL zkoAt0yF%7$7$^POD9(`a=y|_3Dt8!1BDFk0D2~!)cJ`kwx?3QAuf%b7I5PR``zN~c zLcm<7rzROUMh{O*PHc?Wu+9`~HF{Ptv*GtO6v9qcRn{m_gXo<}V3WjbfFISa=rWZr zsb#Q?^CK__v~e+(ckMMbplW)9Lff>WGo`6F_$;{B-CI~VfimQrY-@;Vr$HbF z#ZE9e^eg2R+(m+&2rI|>B=W)B*dCUx6HL%o>|+K3g5UjT10q%eIJ6Fj+}|;v zmk5=xffb<=Y$zy}owb)F3{r-z_4fPdiTVr}A46LFM9L$~&GtDk)+pUtBtGNi8>LCi zeyv|}JuVfN>j~@%1MRXt_aPD0hun=^vK!rbfv99a15*?0W@}G6+25&i@3S>&Ua#>d zuLuzw)BXKIfLXzIw4lAst@pU9DS{+N^13-bMBg)+T&9V4&a9Q!V^m%bJTw@2lO~M) z3L>%@QEN-w!po>UHe4{kW!cHl;Fw**n4Ua}f~y5Yg&oTWVr%SL(=q>Jfd@!;Gbg}n zR(|EOobMB47wEwF4ekOF`}w+m?`4`0vi>|h8t`?(_4(-27cd0qvkFH( z38k0-8ZEpg!BQ_)&x;duog8AW2u?18)WGTd(kf1->Hfw7kYZy3&bqgM@hM8tK411P zpAIqDYMTv9p@P>a{sbu%&FliVb{9so8O7(DQGC9PVg|g6V}eOXjCu`7NG~we7jIoa z%>`QR04p$`HSYYvLb*U|djNQ}0616s1`-H(Z2-U1`@Wz{u^wBpE!LL<@aWGC?!0Dt z1D+!2_F8wY(QPr+xR_yF=FK~0HXC=V^4N1XxU0m9R@HEgV<{_!ZYhj|X~Q^}=bS(= zK9L^@7(XA1JRUM@AtcL424CPd_>2w|zaS9CQtT{&oim{d31eR$Y=1xSAu(Tw6WhM% z_)dSMa+#GMoaXGo3a5l>9Gv%#AJmBWQFJq=1mO}oPfp9y)bt23wRVcAM3z4)x{7lM zg763U`iys_a?{6WgetT=Wlh-RDBkBi1y?ZP-^ zA0TtqEM^(l1;=?0P6Y7-b8DtCVJqfa16%W>N$fie(pX=7(MOYX`QE~-@aW4LG*L;# z#|Hc|E(;_ULNcj>nrUOnJ(v1NBoAC#M6r~rtXY*jwCD(qK4OQZf1<0E z98R4l0y>hKl-7WZ8>iw6(hev)mJuK-my{NY*&o9#r@$fck(AT?{qoF+qAf;sYZ|h) z6`K)!)xMM#GHey*<8IRX677!?Pd;=(Mt!mX#j^1a!louDhmsCKFs6V$8g zPJ`u$o7@)3^+6n`EUPQFMd%l9R0}y1Zd!bO#34!{*HmIE4T~ykC4-1`QCDG4=E%-P zV|NGFHNh$Q@nZ!?o^T(}?+Z^DHHV}%1C;?e2c1RE6=XK*T$)yPa2rrc=TJ~c|8q@8JTG>a+}QT5gmcdeC4GoZQjs2kMG{<562_PibPS; zpOqa-tykYZP9y1*Cjs|yZmcK54ziib<*Cf&rK1Ylo2$?eB1C{BWi(3t^MjkPVfrz{ z>>xE8J#2>(KpC8Ptg$vBXRJm|JK@+Uu#ZP4qO1a&d{7dUq4nA6hjlW~nuit2gkU9z zj8ba_P>XWY`Q@s9+NxjcI4FYvfBzw4oXye-tZAZ9Dlz~@LG-Z@Q8S7@{Cvm&B3|$v zg8(#oNCs~`bnZ#UZ1qudTCc}pkC;peo$%;xV*>Or$W?D_(+b=|Zx zTG(O5e-#UA8!nz+r>C3rb6x4_rs65P6*wkeKWwOIy?dd7gD}u$I;1mm2nW>9IBJ+> zcr2Ew<7gF4=~IEtK|02TuT@cfW>D8_t;WcGY+KajfcLhj&V>-H8W%oiS9Ot}-L?b$ zdZEE~pd;axV#QPk%p^OsG3J#G)-lwIhFU2Nl^b+SK^{q3g<88bQC1N1L;fkuVaYD%4~>fYlwDmm|!L^Sr=QgwaLCu2v{ZrEGrN|Mx923)=r^h!LEsu zpD*k1$3PW@SjcF_R-2JKjIywTJ-x)czZQz{a#hW}l|*!hb$+pU|z= zXViQY+-BDGvF4Z={xfP?DM{!``wT|>^-{JvwmF>UQFbsjS}29?r`jMI(dlv5`PtaM zj(#fqxD}1BRqKvUoc>-5_DYsIL4`tX>EnFwfSvdQHHy#9qRw^X6|`r(Kw#tWtc73$ z=j;zTN7^w{UNo!k)GCZ*bM)-~;ybn8+wt^%^M!=Z6+aQOcsmYTIzOlM>DhB&sM=?k z7cqa~Xuw78oKuupNCk`EDZ?BMKWx}|owh%80z4dyTmT%OhzBsb36e$t4jVKSJs^Co zLG#N;3jkLN0L!~H79HAeN0obc^9joUQ4jBfA?v+M4}>i6zR$yZv;^-_;Eny3p-NQQ ztH@`0NmYocZti5JuYqs+?aAU;`O)v_d(nu`ah=;c-f?a(la&tX7zY@JCa*qgnKHQ* zY7jH|IUh=sUA$PK1~HFOje-RBC|h*j&9H!!(XsZ{<6#dZM0^X4T9bX1^M-HNESNX+ zl6`vRZy=gBibz6zbZiYhc`?YtFF=@J2qDF{q5au9UW5hfmIaj9nsklgdVLn*>XG1eyZDaY{}HBSdPxez2tJGAw0o z0wq9_ZPHd-d_n}g=oXuT_zuJVt%$l!>_I4`*_i`{K=zB33 zg4KnU9eTOSh<{k5GOFqnTgqdnXhukJ6s>#ga8gp$tAIK)DVy@x*~H3%$BsfV7GOu; zfPOWUj>^#QHkBxy&8%Kb5e8kx4&Utr6@F`03rkXQ9Z{rL?nMP+9H|C(%r7@uJX7o= z>W{|kG360^q0&C$NbJ+jn4(~Hh34|MXgL=qkiG=Y*>v5sz}IJpFVcswP$>M%&;|Yt zloNQ!glQye6mwx`^esUCJ$xat?KXVLlYepXf^gd&Q=I&3+h&$>%(gU;fJ)n%uPr|d zB^4UB4<*7Lv&1507QEFtgV6+Exaw+e~5GMSSHjFY?&GXy0427xe}&W>_h_D7PS=^lHB(4qwDt z9{4lAB%?9dIIMN=rO-F1=}l!eo4A?2jAKMd8|IV-<1O$%MI6AiciTAB;)Q5{MSvEi zcyrUuDlo$wRaYTY7Lt8LXqLIP?6xh8VaJyWrM|N?(4-|Ap3s|Gb9Q{>jr;a-^30bL z_b2#r#yJZSln>PHc3F{O*N4?$ZL5Y04UXBcNeJ(g!@T3WIS!RR{e;lPCc|MmS$Cu9 z&2C+~*^Q*1bZgU3X-(>WV3e=O9~G$XRGjMR-$;rxvLrKTMu_!iWIf}*AQ1Gpr$QFJ z;(M0nY%Fm&DT5mZkHJr7mow3plAZ231nFgSW3ZGQ0R9D&8cEXVDo`iN00oU5`qORON?( zPi$r}ZF@|hq_>H5T-Dxm)YVM_=`1RWkGplH7bv_vCTi3{D4R`Q5w}!zH(QeE7{!G$ zck*tzWijNsm~ZS->ds@A&gSPpyMzY&ASVoT!Y1rfgtoF~^P815`f6@O$DAeQgP$Tz zV9jqwU$s}M?wpU@M80r~a5w1z{O>)SK4Wjl?P=z*7yyjgJ~}Ex)Qs+R#z?5wim-L7 zJlF%5Zs(*kidMKw3FX7jap;J)Yo#Q9kO3j@Bt_+oQ-;+$V&uReq** zJF{rd^ry%5fFff)hS8UCL<*c&r77bfalIc!3h=a>ukO;|gVhMJ8a-IaDCvhr(GCbw z%{9K7;B?io(b71ch-{NW*ylhkh3p%z+lUw zN$TSqOmHRZ{yQCfCsljdq>XY@A8k|TNwU{Xz2FxR&KJg|KW^0k1!ow*47^({K#;qaeC&C#guzt2|A+*i51`q_0+KG(B5tB*#A zP;fHHVKwpAN;kRvFrU&6ut7f0l<(*0-SVC#f3woeZL`%we{>iZi@(R0ddu5|2J1nb zm9O6JD?Y9KxjXLa-h#5!l_ye`y40P9F56?i6JysymR9(%A&V~r-J(~|`uyD?uT#!=eox3h z=kxc4{0X0bAmm^0`Gc0P(4wm}Gh__hsaG(a$uDYVy}milt<3olKOHD~KQ(Bs9;$vZeI&}l2FK0h&eC%Fl2maXTHb2g%< z;;=uMED+I6$hdTq?V-8}8MklhbEFd-F2onL5P;&=PM0kSX8^hScx8Y0*5u7ak_p41 zNOqS`O}<-6YTAM!OjfYpcGMgX{g9)ScY+LL!n?WpK$vox-mQ+FKo0EY4x|8YfP zgC_V?DDt5-%WtJ9Bbtl3(oYZo?bY+Yh-~u^JYaJ?leTNtfk)JQo3Hs+>o@Uu6LkPt<_QLKS!u#M$NEFjlQ{ILP}1+8-&x*g4@$54 zXe}7@1*%?svcLe9R>VsHfw!7yvgsO&flWNCG*bIqS20qn04=Pck;Y-9E(ehdtEi%kNfq;8u{qK=03=)~m=jKj!?U6&QMQh-no*E&vM+Cv{_S+(CM8;mB zWY~ruQIE$RIoG@BhB0nq`ItVeZ*Y0#sI zR&}aE6HTPo<0l%3vWJjfPv_L>)|`px1`$EvN-67*m&FiBm_I#u$i8E|O(n8!YlbfJ z&JXywpkWcv;*;w%2P-NBhHWH56K^OaI@p&*8kGh{ABB0uWtUlN{6 zply@wi240C9qaiM)+@DawY2M?i`3EC5$u8|${mpuN)~h^RNAh~_lGvD(sH++D0iz; zbjwe>K=>P^A84moOT=TIN&wP0ocA_yQRBekS6+F5r*PJ25b@$EXudLDDXFsXbF?q+ z&k2;O1mJg!n6=uYduc06)Mmi`6ltkv1Ieej>lsLSxEmQi6*;tRsG`!zoHmn0}boyYn_CO^fc%0aTaABpS7*A34{xC?>Irq(s1I3QTeX z8{cEHA_dDH224sB?!Y7}Y*4R=7~nm$TGtRJVOPRruVE5vV;&|=_x1A(du%LOTFZhC zynwdOgy|q21L^2Xk!I7Jnz{ubsA~yz3;U)}w`8Y?{FYL-n7>XM*5?-2uugqEEsgCB zr#}8r%_`I^A@fq1YEQJdsbGVr28F=9J}NPhH3qjRF&AURbG=p5REebtyQO&|&JF)? z-V!~Nvq{@wK6ne-tb z;}32u_(c50*Ng+dq44@c&k?dZs4XnB zcdl3dkcy)p1i$VNS#j`xdR82FEU^EOh<`}LKTuA5Q-<@nGa}@NRQy9K{=uPQ@8{5} zN`=#IY&~L5F#y``y>N*|2KW4b(w~=Dc2NLE;Wg%B%PvcL!MnYqw8uM2tHA@a$Xbjo zpx{9?Hz~fnmvEDo)?ye=;p|S@&Tg$tnE%uki-NoURQ=w;-OU1p>)ShTHJSm>;f&oF zt@Hz1Rw(!)LkEfO|`!;;-L_An*gZTh$O|-Sd z#sn!sA6WJm$(>s00}G@gyTwBv6qKX2B)sodV9~$_L5ijcq}UwY_k?ZDlP#n#(0uiY z9j}RJz7@OkhVx|SFaG`y&Dkh$jK#gDKj4871lkd-oA4cG`JwT7mvXqhOF4oQE^X>? zWh+T;q9aF`Wa*jf$gS?k4R++ZLr$+Nw8Fw5+AS$4qTP~m?Us~lx1?OVCFR;JDc8}G zVka!lqTQ0BF4`?A*KSF^m$oce@NAb{ zXGdTw#!$Xf`Q^7N+g%h$r+(wgGcUjA7k@F!rXv1x{__5z zld&cDO}$@Xz>3UN3nMCY`901}ee>HJzIBgFr_Q_o8{gt}-Jg27N^oGR5?54`PW>Mr z_*cA4tzVt{%|Ey&RAP;Ayn}VfdZJ|LNyS21Sj}P(MAO=F5kL>0H0bPhXDLb+fsW{rUZBNTru(}Mh9Wxt3`m6Ulwb)oiMbH5#fnR_I1|?!2$O|w=LvI2gjsPz z1!3}ONDK4TCO?BVK-ZT%hB#s%Kz-={ry#Fe81-$4fV;nrNuuMZSl9%?ecls#grr{; zb!Tr$o>x3u@0R2QS3X~nJgH^S$9R#|UnP0zn2PYmNnP2*@`A4Q{HT^epY`b%lzz^q zPbhtqv<1~Yp+2xYns;PGf2#Gi&dN2Z9lfBOe?Mu9@_y9nExo4eIDhEUTX>+pPtI~J<$ zMjj$iodGrgy=Tp8twKy-xiu{d66gmTc>UU}b+-AMw`B94S#Oc|?8#8HfI<6XJ~-e; zo&o#!V*7A;x0h{(q}2r$9lMRjw2Ol8_UPv-{aimtjNCX>$tGK}PrzMt9-7e>zy4j| zxty?3#T8as<#pCj@rIc7nsiv9J)JKClobnJ)VJDNO|ebu!F15Ac`#k>);^f7V4s}? zCWbFtknIc44@&&y6&;CNBc`8y0ulcXDJp;iSaEa3`IAM)CGLzM^v{6Doni8snm9Tr z%74n$HzFe|yYrDfv+BX{-VC~7+yJ!;anGg`x@Mb`a*V=AvdH&!HNnA1Y<&zBs||K) zAwTqqEcbl4wh1?4<~YfpN-)JlnEVkW1*;ajMlmrnTdhcwVJM2mR2AAwq9CchR=Bo3 zMB?>zhHJyY#b%hgx>y*K8M8nl1Zsn>2Iq%qK$NgDOl+GWHagHXZ(w#B_$dqwVW5GD z6!_~Hn5|HTf$;&es}%HC8d#$>FnfrN*;sU7-0vJ1tf4(H?F{N16Ua4OVnqjR3e7rM zO$aT}sdKdZS}u;&n63T@GBgX&scr`MfP#sOZD_AF=2TTEx^|K9MR|5Q!!)tiHC}Z{ zp^QrT@cV_KwE2s_XI7_5NU^0Ey6Eu=Io~Q8iUbVvdsVdU5rmK*Ydsm2$*(s2>1o~V zG8ebXOoTFU;1M=E0q;;uj8uaQ4ZXQkv^bfoUG~Y&vRA!S*=IY;zWb%h9_uW7M2^0p~@z~w|9d4r5`V;jl#W-_q0+GYZHiW1g86ajGT|I{CY~o~FCr4B<8;myX zV=sA?ezWx<7kw5k9lPu zk;-htw|z^)?!peaRm)d%UIK85!a4LYrk_yGVW=KZY`h+$T*5i?;y$7eqPtZF?_0vj zBS@f7Q5W`K*2m$g91bImBeO4$%EHuXwkz27j0wedV>Qrk#Loz;GuePnT16wO(%*h3 zQAc7xO>v~?OtuWNM`$d=_l4M426IDjkekWQ(36!&0dB40LV+_?U^Y8TPgXk)4Bwlc z&4nlDI33@>K++*F>6&y3DX7n@a)L##ZTYvata`;_;jh!kGP7VgQtVTVv7f!p^t?;+ zB&+Wtz#nL>&Nw+s$3t?GguYS1Ed(B?Qs}f;&Qo;B&2AarsDWz>4%Hbq#MR!He%?jz zn<-(;f^g>Sj7e-pze789_1)<@pi<{(%ytjiRlct|&|R%WNfbq#*ueNMCPK`xu2e=*opko9kbQg?P1+0){!)QnzZ710+>F*{vC%w5U6?3$dc`mp= zBg5MEt0(zkJ=Q3b{Qh>5U6bK1wT2|khNKHAyP@fCElsWZZ&O!3WKCt-?@D9NeTVZ( zW~QF`rCy%cE>qpD=2T3#X0r8s+iWH~x0#*CQ}*Her?h2H$GB-9i?cy+0VhUQcJ5Q~&(;zxOyz&hRWtcjvvIG3dF}UC;~}L3Qf= z`;ODK^)rs4rEc7f?G8O(-^|XPda645-G`X>8=5nY7RIKo`NkE~54jDr@U6kW;mwUR z8C@H1wU7hzaVl#yB7CiP>27Ktn|jB`D!g5tfg?go?UxK^jHLAzV0W9RF8QzbUI8>H zP8(HszB`Xi_U%H#KYXRAM#yERC(JDT|FEd({$(=hJWkW9$9l>#Q|kP%wFkhhGs<12 zvy4YwwmE*QOE$$@AO>YPJ9blircgtt!Dlnu00`@R>9Y4T42Tk&RN`FG2N`@_n_^(j z@S)xFfS2xW)7^_83T4hwX2lG25o)}EaTPV5uM!-oy(!LSKsT9QWfEamHEwQZ6M8SZ zkn>)7heLHJ^JbN~cqY3@8IB&>6m#~@n_Bf>?A{dWf0IgVP>Io*>=I=f%244JtAA@V zyHt1i*xaUgVkWyxnbpb+&ScwKHEsv$+dK@msl=E{aDdI5mEj~3BTUu|=yBG}-s0!N z++E0tw>IwaO(;ZHHY@61?=FDmizny0O>Uz-8Dm};w)9lk8h01F zi$b}LZi~Cb$}z7d+;*7#Wxj3>!g6o6C(!XlCFsHG8P+BAnLqk`iTbP`gC2ce?)$tv zyL>K@Z2#8T=?cDY&$!MO3p3o)!GsRBdq8g(?Mu|P+Sj!@9pr1K)P?DtIA=Xb=mCH9 zAW;wW6MAq)8%AdY7@g5{=ZTRfZnHZdP#KK)s+_^7?zXx&34WQ|2Cpr_XoL0eCGc^k zZ|lqeBfb|3+^vT&ON5Skh^a02LA!^m{9CI6jQF-Fs;7}p0*_>bEi6^72QN|AN?+H? z03$n6EO|*7H3kZk8zirj25HPYaM!9hQQ)13nyxZuGR_{j8u$}q0$`P;(FjvA_lXWy z>SEFMGl&;-Rs&3z0HYtFE*9Ik4*hV{!7n765L=MUZfk_Lcy%c_XeP?Xz$Jg|xxx(+ zp^NPg8Tmx+Ei!5-e<);Z_Hz23^=&D#vg7*U%?1mk8UD=fParP=AIF1<5*MXLSV?~1 z8ElWs@@Lhaeba{{rJoCp*IANz@;~rIPD$+$IiifdqQmh=KJz|PRaerWsj5<1&6Qfw z1`{c*_dgw!R!VrKwTjZZnn(B9qv1|PHXr8cpxs+dO8ztS*2gG1_)~a~1hywa|6ot~ z3x8g8Nzi>RWF&2#4Vh)mqIWPAr>Y$}W=vQ+4aE9?~@7IG1F1xR8pK-5PrssQAG_8A0 zF}=X+iRs2dA=>0su5`24?$XRFfa!$S+|moZ{+C|lHfU{!e-8zSZP2#k)UBrjt(h;@ zxF}g=98M(e%dA3yb>zf=aj|i>t#XNS`gEh^D&+VgC8wV08OmtRmt?zru12m)ALg)U zb>*fJXO`=d#*ezDP7Q+tE>%8MI)lPxnTC|(H|h3DI0WFm7(E(={SpMBbkvOwt%}g!f_!AprG4SbUuqjAZ?_3q*lZ$(Q-nL&BL25|I!9MO%;L=3#ibpP|M;w414;CsIF zLUburh$6^gL^4CaQ0!fRg3*B5C77UaD2qWwINlE2L7FAh z3MxFuUxGgxozV7@G=)mo#}vk5MLEk^@i^B$&x6$U{NN#`Q_HpdSjZ%Kl0OkLmAsNa z8!{Y!mp>OWwY-+U5Hj@~kIbJJwRPoP`Ms?SIDM?ha5NeQ3ZGrj8O_;<)8~l$d!ne<85E z3WxG7$!q;yJ~;>iuQf)iJPn(lU?F?usTeYBSd8|NIJ{P;ii3O(D(^q`)|KB^u>bJz z?)JlKe)5=y+c(coy7$GmCp*GF7v=v&YniaSnDoDV@uww6qr9(~Mft6J(j?~`!pFY9 zLr%&#AF=N|qcO3Xgbx_*Sf_0FEg#JytpnV`aZcpp+1>eDn`spS5WkImTTmhK0+0XI zVefF1tBXc!5`OvFJdAHq6(mNchi1)Q?5faB>NDpuogoasA_TbXCe6wQ&Qx_9R@@zi zkaqbK?^c={tQ*PL?W9euxh1diRo_9o9qk;_109K4r@MI0@SPZuNT;c#c0gVipLwE( zT{#k7iyQzXa?$R+j?doG`wBf%e$U6|kE_yG>F73NypHC4r+4j1>l&5VSB=IZXa+*m z7yjgrs}E@~4yA7>g;Y~|L(g=)UPAwbjK`nfkpWj(NerD@L6{v?zgo!AKgpy!d4mwupZffMTLeAE9II+xQ%j*D3-KaB~daCde{F|yr z(vAvvg%ZGydIwWFDHyV_CV#A8sRJuRcZORq$`}H@(qa!@t$d}v#6$n4`2?Armxz}+ zkpQs{+2|$kj0W@D)z{&l+{4!izQ03-?AZL(e#C=93NL5`gZ}l^z{P{Nct%E#fw~$i zKB5}ug92t3lvvSM6qJH1;@XWZORA}bWCp{%IYFL@;B#Rj#7qRvuvmN|0F^|iCl4b3 zXnh!*hndj+?y*O%W*QVp2@zbkaUPGh)-2F>f*=p0Q3#MD8|WqPiNZ8A4mM|Kngmi6 z&ZeqjW>KeRR!!&xb*%~Em)`)MjzniN06|TNjs{_&BH8XNRwE7I$Ax()WTVq-Sokyq zrEWX>By^=NDD%KxvWo>=#(CwIjGx*3(D&g70;V7Tql}+UI9$v+84g6zXc~iShFWt% z2u0|iQHb@S=uu}Mc--Z9A}$t?iWAuCgVhMHqK)q6GAOm&c%8{2?gzWkm1R$;g1+9O ziuA2QhHP_CE@+!Xo;@zj5Red>ajHWFZJ8Cc)jX&(bT|`&ezqIJ47hb>SE8u} zd^P*5t}r9Wb^_0JdB9PS!zMv|i#x&_L6z8|AsB6?vpcrdE9PRD&x{d}Rd-kv@ythL zO?TqX?$~6so&XVz6#QbA7qgU(VB*^>ZE;B>Afd0`CN(C-Sn}laJJP6(_O4uJw&q;j z$c|NoZoXJ!kbx-|WXE~L%qkIkH<&P*r&&KApmff5HoijbBtf~TI4&Pd8ÛY4ZWlf5JCb#UM>-j!e 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 V!`Z@86A_X-HZ9gqHHHy?^8Z#E`RD)u diff --git a/utils/wasm/svg.js b/utils/wasm/svg.js index c683f1e..481e25e 100644 --- a/utils/wasm/svg.js +++ b/utils/wasm/svg.js @@ -1,157 +1,46 @@ const {version} = require('../../package.json'); -let wasm; - -let WASM_VECTOR_LEN = 0; - -let cachegetUint8Memory0 = null; - -function getUint8Memory0() { - if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) { - cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); - } - return cachegetUint8Memory0; -} - -let cachedTextEncoder = new TextEncoder(); - -const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' - ? function (arg, view) { - return cachedTextEncoder.encodeInto(arg, view); - } - : function (arg, view) { - const buf = cachedTextEncoder.encode(arg); - view.set(buf); - return { - read: arg.length, - written: buf.length - }; - }); - -function passStringToWasm0(arg, malloc, realloc) { - - if (realloc === undefined) { - const textEncoder = new TextEncoder(); - const buf = textEncoder.encode(arg); - const ptr = malloc(buf.length); - getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); - WASM_VECTOR_LEN = buf.length; - return ptr; - } - let len = arg.length; - let ptr = malloc(len); - - const mem = getUint8Memory0(); - - let offset = 0; - - for (; offset < len; offset++) { - const code = arg.charCodeAt(offset); - if (code > 0x7F) break; - mem[ptr + offset] = code; - } - - if (offset !== len) { - if (offset !== 0) { - arg = arg.slice(offset); - } - ptr = realloc(ptr, len, len = offset + arg.length * 3); - const view = getUint8Memory0().subarray(ptr + offset, ptr + len); - const ret = encodeString(arg, view); - - offset += ret.written; - } - - WASM_VECTOR_LEN = offset; - return ptr; -} - -let cachegetInt32Memory0 = null; - -function getInt32Memory0() { - if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) { - cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); - } - return cachegetInt32Memory0; -} - -let cachegetUint32Memory0 = null; - -function getUint32Memory0() { - if (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) { - cachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer); - } - return cachegetUint32Memory0; -} +let wasm; -function getArrayU32FromWasm0(ptr, len) { - return getUint32Memory0().subarray(ptr / 4, ptr / 4 + len); +class mem { + static alloc(size) { return wasm.walloc(size); } + static free(ptr, size) { return wasm.wfree(ptr, size); } + static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } + static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } + static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; } + + static copy_and_free(ptr, size) { + let slice = mem.u8(ptr, size).slice(); + return (wasm.wfree(ptr, size), slice); + } } -function getArrayU8FromWasm0(ptr, len) { - return getUint8Memory0().subarray(ptr, ptr + len); +function rasterize(buffer, fit, scale) { + const bptr = mem.alloc(buffer.length); + mem.u8(bptr, buffer.length).set(buffer); + const ptr = wasm.rasterize(bptr, buffer.length, fit, scale); + + if (0 === ptr) throw new Error('svg: failed to parse'); + if (1 === ptr) throw new Error('svg: failed to rasterize'); + + const framebuffer = { + width: wasm.rasterize_width(ptr), + height: wasm.rasterize_height(ptr), + buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(), + } + + return (wasm.rasterize_free(ptr), framebuffer); } module.exports = { - /** - * @param {number} ptr - * @param {string} svg - * @param {number} fit_kind - * @param {number} zoom - * @param {number} width - * @param {number} height - * @returns {number} - */ - async rgba(ptr, svg, fit_kind, zoom, width, height) { - if (!wasm) { - const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(r => r.arrayBuffer())); - const instance = new WebAssembly.Instance(module); - wasm = instance.exports; - } + rasterize, + + async init() { + if (wasm) return; + const streaming = 'compileStreaming' in WebAssembly; + const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer())); + const instance = new WebAssembly.Instance(module); - const ptr0 = passStringToWasm0(svg, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - return wasm.rgba(ptr, ptr0, WASM_VECTOR_LEN, fit_kind, zoom, width, height); - }, - /** - * @param {number} id - * @returns {Uint32Array} - */ - meta(id) { - try { - const retptr = wasm.__wbindgen_export_2.value - 16; - wasm.__wbindgen_export_2.value = retptr; - wasm.meta(retptr, id); - const r0 = getInt32Memory0()[retptr / 4]; - const r1 = getInt32Memory0()[retptr / 4 + 1]; - const v0 = getArrayU32FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 4); - return v0; - } finally { - wasm.__wbindgen_export_2.value += 16; - } - }, - /** - * @param {number} id - * @returns {Uint8Array} - */ - buffer(id) { - try { - const retptr = wasm.__wbindgen_export_2.value - 16; - wasm.__wbindgen_export_2.value = retptr; - wasm.buffer(retptr, id); - const r0 = getInt32Memory0()[retptr / 4]; - const r1 = getInt32Memory0()[retptr / 4 + 1]; - const v0 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1); - return v0; - } finally { - wasm.__wbindgen_export_2.value += 16; - } - }, - /** - * @param {number} id - */ - free(id) { - wasm.free(id); + wasm = instance.exports; } -}; +} \ No newline at end of file diff --git a/utils/wasm/svg.wasm b/utils/wasm/svg.wasm index 988be8cc0815cdf049c29c3962b2037228509fab..232079667dc75ad4a86750a9db535fc5405698d9 100644 GIT binary patch delta 364257 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 -{X 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 F{~utLfhzz2 delta 445014 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%0DrUQE?zL4wA$lB8R?m=9^xBVRn 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 diff --git a/utils/wasm/tiff.js b/utils/wasm/tiff.js index 2f0d867..838badb 100644 --- a/utils/wasm/tiff.js +++ b/utils/wasm/tiff.js @@ -1,106 +1,44 @@ const {version} = require('../../package.json'); -let wasm; - -let cachegetUint8Memory0 = null; -function getUint8Memory0() { - if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) { - cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); - } - return cachegetUint8Memory0; -} - -let WASM_VECTOR_LEN = 0; - -function passArray8ToWasm0(arg, malloc) { - const ptr = malloc(arg.length * 1); - getUint8Memory0().set(arg, ptr / 1); - WASM_VECTOR_LEN = arg.length; - return ptr; -} +let wasm; -let cachegetInt32Memory0 = null; +class mem { + static alloc(size) { return wasm.walloc(size); } + static free(ptr, size) { return wasm.wfree(ptr, size); } + static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } + static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } + static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; } -function getInt32Memory0() { - if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) { - cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); + static copy_and_free(ptr, size) { + let slice = mem.u8(ptr, size).slice(); + return (wasm.wfree(ptr, size), slice); } - return cachegetInt32Memory0; } -let cachegetUint32Memory0 = null; +function decode(buffer) { + const bptr = mem.alloc(buffer.length); + mem.u8(bptr, buffer.length).set(buffer); + const ptr = wasm.decode(bptr, buffer.length); + if (0 === ptr) throw new Error('tiff: failed to decode'); -function getUint32Memory0() { - if (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) { - cachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer); + const framebuffer = { + width: wasm.decode_width(ptr), + height: wasm.decode_height(ptr), + buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(), } - return cachegetUint32Memory0; -} - -function getArrayU32FromWasm0(ptr, len) { - return getUint32Memory0().subarray(ptr / 4, ptr / 4 + len); -} -function getArrayU8FromWasm0(ptr, len) { - return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); + return (wasm.decode_free(ptr), framebuffer); } module.exports = { - /** - * @param {number} ptr - * @param {Uint8Array} buffer - * @returns {number} - */ - async decode(ptr, buffer) { - if (!wasm) { - const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(r => r.arrayBuffer())); - const instance = new WebAssembly.Instance(module); - wasm = instance.exports; - } + decode, + + async init() { + if (wasm) return; + const streaming = 'compileStreaming' in WebAssembly; + const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer())); + const instance = new WebAssembly.Instance(module); - const ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc); - return wasm.decode(ptr, ptr0, WASM_VECTOR_LEN); - }, - /** - * @param {number} id - * @returns {Uint32Array} - */ - meta(id) { - try { - const retptr = wasm.__wbindgen_export_1.value - 16; - wasm.__wbindgen_export_1.value = retptr; - wasm.meta(retptr, id); - const r0 = getInt32Memory0()[retptr / 4]; - const r1 = getInt32Memory0()[retptr / 4 + 1]; - const v0 = getArrayU32FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 4); - return v0; - } finally { - wasm.__wbindgen_export_1.value += 16; - } - }, - /** - * @param {number} id - * @returns {Uint8Array} - */ - buffer(id) { - try { - const retptr = wasm.__wbindgen_export_1.value - 16; - wasm.__wbindgen_export_1.value = retptr; - wasm.buffer(retptr, id); - const r0 = getInt32Memory0()[retptr / 4]; - const r1 = getInt32Memory0()[retptr / 4 + 1]; - const v0 = getArrayU8FromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1); - return v0; - } finally { - wasm.__wbindgen_export_1.value += 16; - } - }, - /** - * @param {number} id - */ - free(id) { - wasm.free(id); + wasm = instance.exports; } -} +} \ No newline at end of file diff --git a/utils/wasm/tiff.wasm b/utils/wasm/tiff.wasm index d38d8695b50085b02d92e4bf96d6db18618f8ae6..197e389411cc61e1f978867efac576a305a10922 100644 GIT binary patch literal 187853 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

KP0MRPl_jh0JD5)m=lCP$Otr#(OF>jX%_g;H!H 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 F{{gV$LmB`8 literal 285927 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

+*Z2kq2KGOmic}?X?(BxgB5-;tKqFYg# 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 r.arrayBuffer())); - const instance = new WebAssembly.Instance(module); +let wasm; - wasm = instance.exports; - } +class mem { + static alloc(size) { return wasm.walloc(size); } + static free(ptr, size) { return wasm.wfree(ptr, size); } + static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } + static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } + static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; } - let u8array_ref = new Uint8Array(wasm.memory.buffer); - let i32array_ref = new Int32Array(wasm.memory.buffer); - - function u8array() { - return u8array_ref.buffer === wasm.memory.buffer ? u8array_ref : (u8array_ref = new Uint8Array(wasm.memory.buffer)); - } - - function i32array() { - return i32array_ref.buffer === wasm.memory.buffer ? i32array_ref : (i32array_ref = new Int32Array(wasm.memory.buffer)); - } - - function ptr_to_u8array(ptr, len) { - return u8array().subarray(ptr, ptr + len); - } - - function u8array_to_ptr(buffer) { - const ptr = wasm.__wbindgen_malloc(buffer.length); - u8array().set(buffer, ptr); - return ptr; - } + static copy_and_free(ptr, size) { + let slice = mem.u8(ptr, size).slice(); + return (wasm.wfree(ptr, size), slice); + } +} - return { - compress(buffer, level) { - const ptr = u8array_to_ptr(buffer); - wasm.compress(8, ptr, buffer.length, level); - const i32 = i32array(); - const slice = ptr_to_u8array(i32[2], i32[3]).slice(); - wasm.__wbindgen_free(i32[2], i32[3]); - return slice; - }, decompress(buffer, limit) { - const ptr = u8array_to_ptr(buffer); +function compress(buffer, level = 3) { + const ptr = mem.alloc(buffer.length); + mem.u8(ptr, buffer.length).set(buffer); + return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length()); +} - try { - wasm.decompress(8, ptr, buffer.length, limit); +function decompress(buffer, limit = 0) { + const ptr = mem.alloc(buffer.length); + mem.u8(ptr, buffer.length).set(buffer); + const x = wasm.decompress(ptr, buffer.length, limit); + if (0 === x) throw new Error('zlib: failed to decompress'); - const i32 = i32array(); - const slice = ptr_to_u8array(i32[2], i32[3]).slice(); - wasm.__wbindgen_free(i32[2], i32[3]); - return slice; - } catch { - wasm.__wbindgen_free(ptr, buffer.length); - throw new Error('zlib: panic'); - } - } - }; + return mem.copy_and_free(x, mem.length()); } module.exports = { - async compress(buffer, level) { - const {compress} = module.exports = await load(); - - return compress(buffer, level); - }, - async decompress(buffer, limit) { - const {decompress} = module.exports = await load(); - - return decompress(buffer, limit); - } -}; + compress, + decompress, + + async init() { + if (wasm) return; + const streaming = 'compileStreaming' in WebAssembly; + const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer())); + const instance = new WebAssembly.Instance(module); + + wasm = instance.exports; + } +} \ No newline at end of file diff --git a/utils/wasm/zlib.wasm b/utils/wasm/zlib.wasm index 8332f687acdf38b577019da38a5494cd0f9e184f..2f4e23242318008c8d40ad04907f117e4371081a 100644 GIT binary patch literal 44562 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 z zX6=P|n%oRz2r|MB>%TPh04fGt$Mks>?>+! zg<#X;cpHznDvYVi++U+-Iv7IR4z%Y$=SX78$xcKyD?T3!q~QMet3)g?$D|u1OHW*) zOn;Vhy9#aRR#lX{(0*@MQ|V}Mz(g$#yzE_MJbHMCLu`X;V`JN>((YNFVHn@ zz}0ets-+C#Y$!$HL(j;zQAm(%8v_&)~|3JD}TY!PdCC2`5Y1q`wRJ`=@Ru@tPRE0u~&jyQgYb4WUrp;L03c`XrP z0uH#dwxMROtj#k(tP%&#L#pUf?l99Ax}H-d)N3b{YR|t8w=CGce^o^(K&lHl{K1eg z`J|-H9E$X_eW6&043C<|44lun*a{WRYq$&F@K{lF9RDt+Ag=;lPN5DWuDjDm0CkMG z6blXER4_VFr#osj8z6~%Am~JmqXE`Z>x^YJyj_nXu*rLT{HLWocfIJ#X=zJNgeN=} zlLF_W4q&*ipnDv4x@(l^JS&{AORgM3pkwYp5O48iRtvK<7cv-CSalg=iKhwMgp_Z! zwZEj{pv|D$x?$00J~_c32=PI6L^?98@^%ZeNC2h|C80La;4s5b&xmNmzL{m3tmx6K z>#JLK07R2RbWC;|4s1~!Cxt(8n-A$Qoaju3jse%8vK?20YMaE{g2pON>fX?*(E`Pr zR_LtGQP%i3nfUQ4XVTcxK8xEdLc)LH6meeAAivt*!hbn!0J0!fNR)cz__qC4xRjy7 zsKHK?Mh(2_b32WaNP!T`qDCHu-d9^nS@LnKz1-U2*`n2|zPsYHEJhBHa}g1cY2Iel zdKb_{BUxt4AXEm0yP^JRK*j}VZ;C<*g!L6d@#tWv=8E`ERNtn z#io_9nUP_{Fjv%itg!?BFsmncnS^dSt?C;!J%BaT28LBwtx+Eh*C8k7KOsmMS58e; z^K}Xhj6z3)kMN&PCu`)>SVxKZi|4(3VSEevY>5m-Rbyh)6FZxyy1J5{fyq$?BLBii zAX`750E^T$%UOjSA`#ej0(RVZq)EeQUUoUHjXo4b+~Ch$O`}p>#P5|XMAhWmtAeC- z&?{fPh-#K;u6z90_selW8(fGzW4`UN@>O zyN1-fl@tpHO{oQ3ajWcmGvr4`N}6*hk%r1+$j;#H6*BSxN_U`O(sE3}kVz(@Q5D9B zrs@T778@eXe_*eeV9{xKA{(1bVyqxl)LL7BVmirdIgKuYHmO?I@V48Of*~Q!Tb=U) znzq(#kx!02^P9DIno&N{ed;=t#Gor$)y~ZCr*6<*yo!-y9F&FcE> z6sSx^h(|d{_SB`LdlZm`4MLmzxA{Ctfe88Gsn1=>dXSe^zM4T)=*|hqY$^lHroyCy zHnCH8o3+Y;hAM854$;FaLXh5pB;BhS0HwQEv!W4z?m`=n0OvA5vg}M70OMk@ucu5d zj=$0kT+RUL3=%K)!51=EZ=UN0&SXIP=Bp`eggYQ}{47>N7lBFiKv}Su?3y#*Oq-Mw z?Lc|Lh*@_wAT7^7Ci0B@Ic9iP4pk|3@`AP!W5#U9qb_OFPONc4?sZcQc0{abe2an% zlbWPtO*Ub`4X%A{jq!Cuy)eF?E1+Xdh^R;W6^u=oKf;Q$)35}|CuoByaiX0S*DNJ2 zm4L7^$)|I7z1B*I*<%F~9cO0cUEU(jfr)b&CIWy9De!*}grjBzhb&uQ1hc%c2==#K zOo2WSznB8KEa9?-b6vS`JS!owSp5yo>X2W3ISrQJphx5Zi|p%)I7^+AZET{ zMrTzqOeqGrmidD^OoG~cl6$GNA^z(84fD5vzlHoQa<=@(7Xdh+1WD&z?i#n8g=%Re zln_bOn%cs8mYDM6W)jZ=`}z1Q>2>$=KTe6RDn5N)khqa)*iWmNHPLo7C6{doST39K zg>xCh{N!?1!*Z@+NP$*EVq6l;SuXmnCYKS6NG^-m7Q>~^2Mf7W8;f-Lkc>Xg{uLeL z8v3MyH#mYW1%KAS1sV9a3>?nD`we6n*}r?xK;lL`_^^Sn5``yKI37QaXkFx5Os3WjlyknbF3JkHegl^ zcNkTCQA0)4*>|xZS;+asJwMoAl7Y)bIb1oaPh1QU=+MeI+lNSM1)cqM;{!P{8{XpN z)F{3jx=fCzCcgLp5i=}1-3ZnjPAO?ip1{;BAb7S0JOLT_$(XSw=@kgJ_w1;_BnSp zE6JoFjE=&9(C9d`q`@c-Xs)yoJvUlbQ!D7lBil^11h=42JwjlZb%E4#a1ASB0qFa5Ne8h}G-Fm}#6lUJj zoa}v~zEA)v!2&GovE5ZHa88&b4ge$EN*1UHj%a&3J{-apNyszINv@?JxM6;`H-yGP^LT+rQ6jJ~Tx$)<%B2$(#l$eAM zHKX=UsR+*SJEau703EbL)Y>68pehSegCEEu36vL+SUik^jcKTY#sa^GBw_~bgVdNm zSdbe2Q%V<8Ge~S6p;jNAMq!FhlY5JW)UN0>zr(ILoHulj)+1V_^WnY`|h8v{~JlIQMJLUJxg`}A&?g!lF-+tw{nY* ztM$}J{Ot`(me>j0z{j!@wE0{mAfbBND1V08!<`IcEkXt=?)|LPHyEu(BgBK2faS=0!878bZC|J&N-F@P?i3 z9r_4YbJi0FRFFh@TW?x7iL5cpmV>7iT!d*GZPzcP7Oo2t9RGM0ca2I##bFRa-=N_H zc<0j6o%}$K*OH(?B0R^SF!X++Al9Nkgz_NZ^xp~$%HcraT$=TYhb;*!AarB$wyRQ1 zRAR604U$ejsG;4$TyG26pmp;W>hM|K2kV^{n!6xtBVBzvZN$u=5th}4!g^!t5^_1v z@4$MfbsQPd5;vZ|84w22g50d{e&;K0CEvvXMOxA}(GzcSID)Sz9epb`9sN#~IAE@? zGHh3w4yxf-6Z8(+Wde?2O(ap}w+ms7T_dvb8Bf&=j-am0522(Ihj80z1B@(MSJIU` zM6kF-N97B%YB^F^^Tc#ZnA$dgIf~_LZ32|2$0)fgPza?y+ziAKNpuJ@Txx0xC{s(EWRTJ9@cF%*wzGr-o2QpfajPqAEj9?UG)m zToqHL7``*64-}{XTq!be;zqzsjRK5@sn?ey6LA4w^qG4j&^}&DnWp_>YHSL*POL$y zgaR}xMxqZ;9Inzsf-@Z`3C zSl;Bk$|WTUOmvXS4Q@vUhEixTucFsPWwe6aU>q|}&A&v<6Q6_9K3DOpVbdn?QfoLM zrZmKatl?~;zmCLiC)I+Am%4C+4FWZpr?Nd2hGr5Fdk|OSu*e!A^ z-zjK&GyUr_q#4L`?_-m;beq)TCa^%}kasYt+2P_9|NJJk3>fIqY;C_^fSOXP))czz zX$tDt(^i4Ere(N*aBom|-cwu6Bmvj7v~8i{KFS)C^c&Q?BfXtf-7bQD_8Zh{GIoW< z#mkcEHK=j-TA#X_(_ccLL7f??R#uOZI!{?y*EC*cq(bL7d5BvJG9#7McMgn9jZ`e; zY@2iV4vo~eYo1CrCb6lue)CjavY_X8Xr9VwozFZq7d-+M)_p&M6is$rBl{je|c83mLk{+NiI${)LmDuBAkdW^twPZGc{6E z3tb|((Erjm?Haoxy^)6EH?5zbbKKJ(O z!s?RttBT;Dgn{{AwbB&~!K;QsjS{<(0@j~X1V+-sRz;0`(#a}sFe@)g^Lff5Eb2E> zcL~M0ix~jI+~o|Alm~t_gOzwC13c#4)eKhRnSYd(X$W`cGMMJO3mHJW+{Fw~%H<4D zQ(nygy5g>6fZn;90ea`mx6`VWaxMe(&V>xHdNM#Mmoq>quVz3xRBim6&B&fi-@Eo1 z=E-c>57Q0%T>11C?821BJ4jfzI_3`@O-Tj!j&1R_XeM!jj?U3%)iZ|!Mof+K;?oH| z05s<(&GNV(gXUExTtghBy=mdWk))kI=7XL{$ELE?j`|>)53}h&g=ex$x0u-JhAv zr^eI?&H;^B3*f?P2HZ~;9JQ)>f$k5pBoMQ55Gq^))E1D`q8`if4?cp#h!I%Cmt^zL4A>3HPghq5I|CuKd z2U=UHySFs!sDTtn6;bYp6=9dC^*HYBEGBPXXC*g#I~(_PR_-nIgYPp9V2skja`m|SRI!$dym{p*?g4LktAv8yNA5^}S!*a-U9jwZ> zOi>lK7&v4Gg##R!EB3@xU^T;^q1d#O@};ApXzi@wJ-*lzN#9v!%^h^cma3Z5S9Ll$ zEefG?bofnkVik4{u2N2wC{d9$00H0|fD+Du0p=^#hOR6~{N617V?Dl|7F%N5^X!Xq zSrn-1VCm0%9rVEJ6%L6b)Mt4>tbNEw7|QJ)wR&0HxCArMdpMCdSkf?bBD%q6B)3%i z1ia9~^+F0nnz0CsRo8wA+b%-hyQ{yJYB>cexHHdq$X)#ArNC`+Kjflg(%f5u8}7Vv zcRpe8`WMre4f~y)CC`)1ZE;t6b7x;TxDv4<5pCC5T!}Ove|(iAVE(xm`E{KxY%=oI zR$IKG^co>uws{+3)*ss0NN4K`(i2XJCq4!d$5_5P&Ptk61c?F1P)_*@xxp`OtmgG8 ztRT-vTd(DK!}JR-lT0wPsG3IOw1qh}bkf5lLfauTG_(!jo~2P0M1sf)gO8^Boo=X0 z3n^!(JZl#aK)vNLz}!t1NJqcQ2xH92gA{LX6EthgRFcO&^h5SpE?MX~jUFe59NrAlE#AHvkYXo^Oy?Zp5)PDT<)i`=#i zjJD}C7g+)ciq1}RvBm(>MlBd*(=twTp{@RKE$BSm_AdeeGwPc^8X)V5W=Uv5ZS~Cd zds2dCKJDYVK)hn#DOE?B(IcsQJ0y?Cs-bIZsyc7;D!N5$M=F)yi^77I;Iwg1)q^4l zKOAIqMrSvX<|zWJ1vcP6cE6E>`U3C9vH3a~V2)|+?Yt)+cbOct$`98+Sr6J>{K-g8c zisr3qxyz>zq07Vw>O$xFtLbz1;@qXct#;oQEXkXq{O#ce<$Ckp_TVP`?+iCrZh)Js zx4_N+8HS-;xv_*h;!<)1`V*fZA(@`GNl61MJ5~%WXRGK~11A$r3La!b!AjF+X70th z5P;_Q{MVitcV@$wPVHH8o-94(A&jWcUHNvZHmTKJ%>bKoK9{CYk2{wEdgnq0=$(rx z@Js3_8w={TlUq7Nz2?|=t|{%>Od#{c3g8Q2x**9#(CR+@j&?%IB4{tKji7A}g4!Tx zqyaL4RIkcR28+$~v8C$>6ul*xaD%pm|2?$rJ0aGn#~Yz&9cu7*<}PotKZ9ui2E2AH zBA5uvD26zuAqku`QJh0;X)J!}dHAzdZzv#G@UwzPfbq%;{)*rdu$Bjazaw}E7!57> z`+^I=lDfb@CpZV3mj8<2!Fq$#x}xEP^~x`*18Qff0nutuZM?M{q6awXLaEv15tQwB z@RL_Zh?`1j+Hyt?=QP>S$|LUgzCb11ce}S)5Mj)vuP|js+&}SIdKMikO;+Y~o~vZ>_>~2T2mBVZJ)*n?$ z?J`-=$C$-}W7tq@>`vQnx7nSxIF6CV5_`yDgq6ddDOi+_X#*54s)c8z!D4#o>x)&h zO&wy@S0(A<=T#pOn0mgNS7L;=8lbzJ)y&;^lmMbmbn@Z5uk342-MBLKF{|@OQrR2t zqGz9#uQzN2?xGAM{U>X}<|yJ5H}|{g6D=MH*l}u(o$N$nLb~oW59~kxQX1G`fld{7 z#=nX;iO-e>2AVCDQ2w4;5O5~sM<8P8%GTB>KNKah^h1tx(OXM2Mxrupyc7 z9xeS;D))JM;J6E;2aE#m4v%fgT~rurJDz9+Qdz;ps7?bg!k~+UY^XmFz)ra3Xkikl zQXPz_+CIA*yS2X7pG<;C3@V#=tQi39QK?y*)gBl|Y2KUy!bPp--K?oBRg!!kd3 zWf_9JUmub%qcxREE!gqgxBmApUpx2f-@F=B;(*W){wja4Ar4GPRKBs~z{KIhlLwRg zKR!8g{P66(_Z~m;*!0AsYu4VM96gdu97*oqIX!)Ua$@4}@yQ?`1VNbo6}WzK`Vg zr)Q||{-7T0<~qP%nZGozCB8_So-gI^C;7|ZCEPO@ZFm*;Kivi2#{EYAM#6gVVXgx? zF+>o&mv+w_K6HTATeCAfBu7t7PCt0~=wp<9n!41^rHs6An)ZW{IC^0H^u%NPPfQ+A zr(PsqLi!K5F5p_^Pd^%i5`Tw|9GrYSIeL6HIr?Doz|rGJ4$j=0%sxDs9G*Oq9GXdz z2S^g^GxB6?Y;42W#<5Lfo5!|{jgM^|+ctL3hOrGBHf-FmX~X6XTQ-bu*t%ichI=-S zZQQVN?ZQZXIqtl6vh42GT9-4hP2{6$`6HB-v z`vRZt5i~P9F+DqzOw4-BO@dDW!P${IIfGy`?=WP+y~$l`1#2AChJ-)m&~=VKOHjs` zv15P_mg~WOz(EFZglh)B#mn9B7bsBlkfjSA?SlUV+7!KJ>4RkcKo`7?@*7?73#5xr zvi$!Xco2AEW@d7F_7DvI;KU)g|K8;A(W6rn4^K`U+&^>Z)04?x`w5|I|LoEIk3hEV z_n)Br?(#&Ci@VBS&<9@x7LK#}1@GvBUj#FK(RB!Q9yT#Aod;A%Ck3aPv^Uv^)`6mb#EL^l`@!}=?Eahh;{aKd&Ebsdn?fY4A zi=UOZ_`%!{@#Tg2un-o*Qds79fZqzgReo#f?_lVEheH2bXS$`|;lAGmVejw4u=jUS z*!#OUy!r2v@aDfu!<+w(gg5_P7QVON<>7n#9Sz^x?~3rf{H_c$c{PNRm2S!41;7&g z-SDz5_(P;iuV?B18?fZv`r|Xx>(T8Khu0s#Iy$<3dh($|Gqcm5GHd6dL$ePbf8g!| zM;}?YVe-I%@s0P~bMS$CCJ$`exM}?(hmIWj^!}rdA38X>ZtU*OcW*UR^VcRxBYJ@LrQ-47lB&bXDEY`k$xr-5GS+_oljx&v z`Tljv>z3bZffsi5?*qWMcfmuz8|JP5fkWuk5B)^4X3d7HpN`jGU?+GJfKaBbH9 zU*>()Umso&l#1oTK)%AKC2P@OICOoN4jer=nS3bO>wb3shyVJnUHd=rKkVJH@1vjC zk1>~(_Z0fFyZxttyY=mtfMpM6`Ts6(w?1>=<9(d{`-_)?%I^;|*|wjk?$AIDcft{Qvof`ASK~TV}ZR8ElnX7;M#B7;Lvp&N%!PBuuvj{X;C`mC$CE z{w8p@#eEg{?yhv1``r?L0C-bZ`Y>?!`>(+hlE_*4e;c?v{Q=-^3-~zjny&mOfYcRiW^)!E)QD*SxxtFJ6$MJ_6$zMM*`S_!g2WBS^ z9{yB1)0B${L+8=y$(b3=RI~TarSJV!SxT7;>GG0#@Gx~H{K?X|yvWbYUu0Z0lg`q0 zuXI#aKvFy3YXIWU>^<>X(gpuH>FQUOeie9q7yPH8mp56u2toXi!G%7!2rT}}(w75E zer50iV2wuxF9H_-W$-7cZ&~2pcoqxhUzRfsEbS|eE3Haq+!Q$)Qb43jYr!7|{~?G%+#&kqN4j05YSyk9yJS75(VFB| zHeW}P@@tg53@mNH6FU){3cky`r?M$mf$3J2Dbz@qgk$0M@cv*fn9F)ofm$&v+P(W5 zz#jtsQB%#KBfa)@R{x);+M^rprlS8sdb6v2g1gh->`NEio&Fbn>4Lk{BcxHYt9-$d zPFZ_m;P>^x-RZf$biv)}f7w^R;O_Kmz}@8w?oNLT`1Y>)1xq?)?OR5D-P9|%yMN1p zn_c+@cc+i`r3+U2U)A{IS$*{Q?EVLiKltF}G!w0?AD^LL(gGPg3%tAwege1~FMl6c zRz{ZpY2c&_ejZp_FiZcZ>HE(w^-}gR(uDWFs(yOu_|r#^OzxOC_%oU)et2SLFO$oC zhJan>B>bs~BS((T?wy#L{F&*a4@rQ#gNG-lH*MT|XvUPE&-Ss&$%FRp?jztXTV2@q zsN9YHs|(5fAEVA}bs-4O<7bt1^#W2$bdvhTXJ!wse{|x=p#xLQST*1MO!?92qX&;4 zn4F%8N{4av9-nw)m73$0lYTS@!@A;fE%VEEv0c Date: Sat, 16 Jan 2021 04:33:23 +0000 Subject: [PATCH 013/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index 57142bd..4ec4b5b 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const n=r(347),i=r(723),s=r(876),o=r(327),a=r(76),h=r(667);class _{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,n){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&n)>>>0}static rgbToColor(t,e,r){return _.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,n){let i,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),n=Math.min(1,Math.max(0,n)),0===e)i=s=o=r;else{const n=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;i=n(h,a,t+1/3),s=n(h,a,t),o=n(h,a,t-1/3)}return _.rgbaToColor(255*i,255*s,255*o,255*n)}static hslToColor(t,e,r){return _.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,n){t/=255,e/=255,r/=255;const i=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(i+s)/2;if(i===s)o=a=0;else{const n=i-s;switch(a=h>.5?n/(2-i-s):n/(i+s),i){case t:o=(e-r)/n+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return _.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${_.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${_.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${_.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${_.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let n=1;n<=this.width;n++)this.__view__.setUint32(e,t(n,r),!1),e+=4}return this}clone(){const t=_.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=_.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=_.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=_.RESIZE_NEAREST_NEIGHBOR){const n=this.__resize__(t,e,r);return this.__apply__(n)}__resize__(t,e,r=_.RESIZE_NEAREST_NEIGHBOR){if(t===_.RESIZE_AUTO&&e===_.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===_.RESIZE_AUTO?t=this.width/this.height*e:e===_.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let n;if(r!==_.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return n=this.__resize_nearest_neighbor__(t,e),n}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let n=0;nthis.width&&(r=this.width),n>this.height&&(n=this.height),this.__apply__(this.__crop__(t,e,r,n))}__crop__(t,e,r,n){t=~~t,e=~~e;const i=new this.constructor(r,n);for(let s=0;sthis.width||o>this.height)continue;const a=i(n,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,n,i){t<0&&(r+=t,t=1),e<0&&(n+=e,e=1);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),i);const a=4*(s+e*this.width),h=4*(t+e*this.width);let _=Math.max(Math.min(e+n,this.height),1);for(;e<--_;)this.bitmap.copyWithin(4*(t+_*this.width),h,a);return this}drawCircle(t,e,r,n){const i=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let n=r;n{const[i,s,o,a]=_.rgbaToHSLA(...this.getRGBAAt(r,n));return _.hslaToColor(i,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,n)=>{const[i,s,o,a]=_.rgbaToHSLA(...this.getRGBAAt(r,n));return _.hslaToColor(i,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let n=0;n=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+i*this.width),a=t.__view__.getUint32(4*(r+n*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,_.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,n=r+1,i=256-r;return(255&n*(t>>>24)+i*(e>>>24)>>8)<<24|(255&n*(t>>16&255)+i*(e>>16&255)>>8)<<16|(255&n*(t>>8&255)+i*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[n,i,s,o]=_.rgbaToHSLA(..._.colorToRGBA(r));this.__set_pixel__(t,e,_.hslaToColor(n,i,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[n,i,s,o]=_.rgbaToHSLA(..._.colorToRGBA(r));this.__set_pixel__(t,e,_.hslaToColor(n,1-i,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[n,i,s,o]=_.rgbaToHSLA(..._.colorToRGBA(r));this.__set_pixel__(t,e,_.hslaToColor(1-n,i,s,o))}return this}hueShift(t){for(const[e,r,n]of this.iterateWithColors()){const[i,s,o,a]=_.rgbaToHSLA(..._.colorToRGBA(n));this.__set_pixel__(e,r,_.hslaToColor(i+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const n=new Array(262143);for(let i=0;i~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;n[l]=(n[l]||0)+1}let i=-1,s=0;if(n.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return _.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),n=Math.sin(r),i=Math.cos(r),s=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.width,o=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.height,a=_.new(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,c=this.height/2-.5;let u=0;do{let t=0;const e=f-n*(u-l),r=c+i*(u-l);do{const s=e+i*(t-h),o=r+n*(t-h);_.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),n=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>n[0];if(2===r.length){const t=this.__gradient__(n[0],n[1]);return e=>e<=r[0]?n[0]:e>=r[1]?n[1]:t((e-r[0])/(r[1]-r[0]))}const i=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=i)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const n=(r-t)**2;for(let i=1;i<=t;i++)n+(i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const n=(r-t)**2;for(let i=this.height-t;i<=this.height;i++)n+(this.height-i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const n=(this.width-r-t)**2;for(let i=1;i<=t;i++)n+(i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const n=(this.width-r-t)**2;for(let i=this.height-t;i<=this.height;i++)n+(this.height-i-t)**2>e&&(this.bitmap[4*((i-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,n=t>>16&255,i=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-n,h=(e>>8&255)-i,_=(255&e)-s;return t=>(255&r+t*o)<<24|(255&n+t*a)<<16|(255&i+t*h)<<8|255&s+t*_}async encode(t=1){return await n.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){t=Math.max(1,Math.min(100,t));const e=new this.constructor(this.width,this.height);return e.fill(255),e.composite(this),o.encode(this.width,this.height,t,e.bitmap)}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),2303741511===r.getUint32(0,!1)){const{width:r,height:i,pixels:s}=await n.decode(t);e=new this(r,i),e.bitmap.set(s)}else if(r.getUint32(0,!1)>>>8==16767231){if(1===await o.decode(0,t,0,0))throw new Error("Failed decoding JPEG image");const[r,n,i]=o.meta(0);e=new this(n,i);const s=o.buffer(0);if(o.free(0),0===r){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"!=typeof t&&(t=t.toString());const n=await s.rgba(0,t,r,e,e,e);if(1===n)throw new Error("Failed parsing SVG");if(2===n)throw new Error("Failed rendering SVG");const i=new this(...s.meta(0));return i.bitmap.set(s.buffer(0)),s.free(0),i}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,r,n=4294967295,s=1/0,o=this.WRAP_STYLE_WORD){const[a,h,l,f]=_.colorToRGBA(n);await i.load(0,t,e),i.render(0,0,e,a,h,l,r,s===1/0?null:s,o);const c=i.buffer(0),[u,w]=i.meta(0);i.free(0);const g=new this(u,w);return g.bitmap.set(c),g.opacity(f/255),g}}class l extends _{constructor(t,e,r=100){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof _))throw new TypeError("Invalid image passed");const r=new l(t.width,t.height,e);return r.bitmap.set(t.bitmap),r}}t.exports={Image:_,GIF:class extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof l))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){const e=await h.GIFEncoder.initialize(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof l))throw new Error("GIF contains invalid frames");e.add(~~(r.duration/10),t,r.bitmap)}const r=e.buffer();return e.free(),r}},Frame:l}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.14","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let r=0;for(const n of t)e.set(n,r),r+=n.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,n=4294967295;for(;r>>8,n=e[255&(n^t[r++])]^n>>>8,n=e[255&(n^t[r++])]^n>>>8,n=e[255&(n^t[r++])]^n>>>8;for(;r>>8;return(4294967295^n)>>>0}},347:(t,e,r)=>{const n=r(883),i=r(354),{compress:s,decompress:o}=r(423),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),l=n(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),c={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:r,channels:i,depth:o=8,level:u=0}){let w=0,g=0;const b=e*i,d=new Uint8Array(r+t.length);for(;w>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,n,i){let s=0;if(0===r){for(;s{const{version:n}=r(306);let i,s,o,a;const h=new TextEncoder;function _(){return i.buffer===a.memory.buffer?i:i=new Uint8Array(a.memory.buffer)}function l(){return s.buffer===a.memory.buffer?s:s=new Int32Array(a.memory.buffer)}t.exports={render(t,e,r,n,i,s,o,l,f=!1){const c=function(t){let e=0,r=t.length,n=a.__wbindgen_malloc(t.length);const i=_();for(;r>e;){const r=t.charCodeAt(e);if(r>127)break;i[n+e++]=r}return e!==r&&(0!==e&&(t=t.substring(e)),n=a.__wbindgen_realloc(n,r,r=e+3*t.length),e+=h.encodeInto(t,_().subarray(n+e,n+r)).written),[n,e]}(o);a.render(t,e,r,n,i,s,c[0],c[1],!(null==l),l||0,f)},buffer(t){a.buffer(8,t);const e=l(),r=(n=e[2],i=e[3],_().subarray(n,n+i)).slice();var n,i;return a.__wbindgen_free(e[2],e[3]),r},meta(t){a.meta(8,t);const e=l(),r=(n=e[2],i=e[3],(o.buffer===a.memory.buffer?o:o=new Uint32Array(a.memory.buffer)).subarray(n/4,n/4+i)).slice();var n,i;return a.__wbindgen_free(e[2],4*e[3]),r},async load(t,e,r=128){if(!a){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/font.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);a=e.exports,i=new Uint8Array(a.memory.buffer),s=new Int32Array(a.memory.buffer),o=new Uint32Array(a.memory.buffer)}a.load(t,function(t){const e=a.__wbindgen_malloc(t.length);return _().set(t,e),e}(e),e.length,r)},free(t){a.free(t)}}},667:(t,e,r)=>{const{version:n}=r(306);let i,s=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});s.decode();let o=null;function a(){return null!==o&&o.buffer===i.memory.buffer||(o=new Uint8Array(i.memory.buffer)),o}let h=null;function _(){return null!==h&&h.buffer===i.memory.buffer||(h=new Int32Array(i.memory.buffer)),h}let l=0;class f{free(){i.__wbg_gif_encoder_free(this.ptr)}static async initialize(t,e,r){if(!i){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/gif.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t,{__wbindgen_placeholder__:{__wbindgen_throw:function(t,e){throw new Error((r=t,n=e,s.decode(a().subarray(r,r+n))));var r,n}}});i=e.exports}const o=i.gif_encoder_new(t,e,r);return new f(o)}constructor(t){this.ptr=t}buffer(){try{const r=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=r,i.gif_encoder_buffer(r,this.ptr);const n=_()[r/4],s=_()[r/4+1],o=(t=n,e=s,a().subarray(t/1,t/1+e)).slice();return i.__wbindgen_free(n,1*s),o}finally{i.__wbindgen_export_0.value+=16}var t,e}add(t,e,r){const n=function(t,e){const r=e(1*t.length);return a().set(t,r/1),l=t.length,r}(r,i.__wbindgen_malloc);i.gif_encoder_add(this.ptr,t,e,n,l)}}t.exports={GIFEncoder:f}},327:(t,e,r)=>{const{version:n}=r(306);let i,s=null;function o(){return null!==s&&s.buffer===i.memory.buffer||(s=new Uint8Array(i.memory.buffer)),s}let a=0;function h(t,e){const r=e(1*t.length);return o().set(t,r/1),a=t.length,r}let _=null;function l(){return null!==_&&_.buffer===i.memory.buffer||(_=new Int32Array(i.memory.buffer)),_}function f(t,e){return o().subarray(t/1,t/1+e)}let c=null;async function u(){if(i)return;const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/jpeg.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);i=e.exports}t.exports={async encode(t,e,r,n){await u();try{const s=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=s;const o=h(n,i.__wbindgen_malloc);i.encode(s,t,e,r,o,a);const _=l()[s/4],c=l()[s/4+1],u=f(_,c).slice();return i.__wbindgen_free(_,1*c),u}finally{i.__wbindgen_export_0.value+=16}},async decode(t,e,r,n){await u();const s=h(e,i.__wbindgen_malloc);return i.decode(t,s,a,r,n)},meta(t){try{const n=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=n,i.meta(n,t);const s=l()[n/4],o=l()[n/4+1],a=(e=s,r=o,(null!==c&&c.buffer===i.memory.buffer||(c=new Uint16Array(i.memory.buffer)),c).subarray(e/2,e/2+r)).slice();return i.__wbindgen_free(s,2*o),a}finally{i.__wbindgen_export_0.value+=16}var e,r},buffer(t){try{const e=i.__wbindgen_export_0.value-16;i.__wbindgen_export_0.value=e,i.buffer(e,t);const r=l()[e/4],n=l()[e/4+1],s=f(r,n).slice();return i.__wbindgen_free(r,1*n),s}finally{i.__wbindgen_export_0.value+=16}},free(t){i.free(t)}}},876:(t,e,r)=>{const{version:n}=r(306);let i,s=0,o=null;function a(){return null!==o&&o.buffer===i.memory.buffer||(o=new Uint8Array(i.memory.buffer)),o}let h=new TextEncoder;const _="function"==typeof h.encodeInto?function(t,e){return h.encodeInto(t,e)}:function(t,e){const r=h.encode(t);return e.set(r),{read:t.length,written:r.length}};let l=null;function f(){return null!==l&&l.buffer===i.memory.buffer||(l=new Int32Array(i.memory.buffer)),l}let c=null;t.exports={async rgba(t,e,r,o,h,l){if(!i){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/svg.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);i=e.exports}const f=function(t,e,r){if(void 0===r){const r=(new TextEncoder).encode(t),n=e(r.length);return a().subarray(n,n+r.length).set(r),s=r.length,n}let n=t.length,i=e(n);const o=a();let h=0;for(;h127)break;o[i+h]=e}if(h!==n){0!==h&&(t=t.slice(h)),i=r(i,n,n=h+3*t.length);const e=a().subarray(i+h,i+n);h+=_(t,e).written}return s=h,i}(e,i.__wbindgen_malloc,i.__wbindgen_realloc);return i.rgba(t,f,s,r,o,h,l)},meta(t){try{const n=i.__wbindgen_export_2.value-16;i.__wbindgen_export_2.value=n,i.meta(n,t);const s=f()[n/4],o=f()[n/4+1],a=(e=s,r=o,(null!==c&&c.buffer===i.memory.buffer||(c=new Uint32Array(i.memory.buffer)),c).subarray(e/4,e/4+r)).slice();return i.__wbindgen_free(s,4*o),a}finally{i.__wbindgen_export_2.value+=16}var e,r},buffer(t){try{const n=i.__wbindgen_export_2.value-16;i.__wbindgen_export_2.value=n,i.buffer(n,t);const s=f()[n/4],o=f()[n/4+1],h=(e=s,r=o,a().subarray(e,e+r)).slice();return i.__wbindgen_free(s,o),h}finally{i.__wbindgen_export_2.value+=16}var e,r},free(t){i.free(t)}}},76:(t,e,r)=>{const{version:n}=r(306);let i,s=null;function o(){return null!==s&&s.buffer===i.memory.buffer||(s=new Uint8Array(i.memory.buffer)),s}let a=0,h=null;function _(){return null!==h&&h.buffer===i.memory.buffer||(h=new Int32Array(i.memory.buffer)),h}let l=null;t.exports={async decode(t,e){if(!i){const t=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/tiff.wasm`).then((t=>t.arrayBuffer()))),e=new WebAssembly.Instance(t);i=e.exports}const r=function(t,e){const r=e(1*t.length);return o().set(t,r/1),a=t.length,r}(e,i.__wbindgen_malloc);return i.decode(t,r,a)},meta(t){try{const n=i.__wbindgen_export_1.value-16;i.__wbindgen_export_1.value=n,i.meta(n,t);const s=_()[n/4],o=_()[n/4+1],a=(e=s,r=o,(null!==l&&l.buffer===i.memory.buffer||(l=new Uint32Array(i.memory.buffer)),l).subarray(e/4,e/4+r)).slice();return i.__wbindgen_free(s,4*o),a}finally{i.__wbindgen_export_1.value+=16}var e,r},buffer(t){try{const n=i.__wbindgen_export_1.value-16;i.__wbindgen_export_1.value=n,i.buffer(n,t);const s=_()[n/4],a=_()[n/4+1],h=(e=s,r=a,o().subarray(e/1,e/1+r)).slice();return i.__wbindgen_free(s,1*a),h}finally{i.__wbindgen_export_1.value+=16}var e,r},free(t){i.free(t)}}},423:(t,e,r)=>{const{version:n}=r(306);async function i(){let t;{const e=new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${n}/utils/wasm/zlib.wasm`).then((t=>t.arrayBuffer()))),r=new WebAssembly.Instance(e);t=r.exports}let e=new Uint8Array(t.memory.buffer),r=new Int32Array(t.memory.buffer);function i(){return e.buffer===t.memory.buffer?e:e=new Uint8Array(t.memory.buffer)}function s(){return r.buffer===t.memory.buffer?r:r=new Int32Array(t.memory.buffer)}function o(t,e){return i().subarray(t,t+e)}function a(e){const r=t.__wbindgen_malloc(e.length);return i().set(e,r),r}return{compress(e,r){const n=a(e);t.compress(8,n,e.length,r);const i=s(),h=o(i[2],i[3]).slice();return t.__wbindgen_free(i[2],i[3]),h},decompress(e,r){const n=a(e);try{t.decompress(8,n,e.length,r);const i=s(),a=o(i[2],i[3]).slice();return t.__wbindgen_free(i[2],i[3]),a}catch{throw t.__wbindgen_free(n,e.length),new Error("zlib: panic")}}}}t.exports={async compress(e,r){const{compress:n}=t.exports=await i();return n(e,r)},async decompress(e,r){const{decompress:n}=t.exports=await i();return n(e,r)}}}},e={},function r(n){if(e[n])return e[n].exports;var i=e[n]={exports:{}};return t[n](i,i.exports,r),i.exports}(655);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),s=r(723),n=r(876),o=r(327),h=r(76),a=r(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return l.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)s=n=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),h=r<.5?r*(1+e):r+e-r*e,a=2*r-h;s=i(a,h,t+1/3),n=i(a,h,t),o=i(a,h,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*i)}static hslToColor(t,e,r){return l.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const s=Math.max(t,e,r),n=Math.min(t,e,r);let o,h,a=(s+n)/2;if(s===n)o=h=0;else{const i=s-n;switch(h=a>.5?i/(2-s-n):i/(s+n),s){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=l.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}__resize__(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(t,e,r,i))}__crop__(t,e,r,i){t=~~t,e=~~e;const s=new this.constructor(r,i);for(let n=0;nthis.width||o>this.height)continue;const h=s(i,n);this.__set_pixel__(r,o,h)}return this}__fast_box__(t,e,r,i,s){t<0&&(r+=t,t=1),e<0&&(i+=e,e=1);const n=Math.max(Math.min(t+r,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const h=4*(n+e*this.width),a=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),a,h);return this}drawCircle(t,e,r,i){const s=r**2;for(let n=Math.max(1,e-r);n<=Math.min(e+r,this.height);n++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(n-e)**2r?this.bitmap[h]=0:e&&(this.bitmap[h]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[s,n,o,h]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,n,t*(e?1:o),h)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[s,n,o,h]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,t*(e?1:n),o,h)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(n+s*this.width),h=t.__view__.getUint32(4*(r+i*t.width),!1),a=this.__view__.getUint32(o,!1);255==(255&h)?this.__view__.setUint32(o,h,!1):0==(255&h)?this.__view__.setUint32(o,a,!1):this.__view__.setUint32(o,l.__alpha_blend__(h,a),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,s=256-r;return(255&i*(t>>>24)+s*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,s,1-n,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,1-s,n,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(1-i,s,n,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[s,n,o,h]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(e,r,l.hslaToColor(s+t/360,n,o,h))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let s=0;s~~(63*t)));if(t&&a63-r)continue;const _=o<<12|h<<6|a;i[_]=(i[_]||0)+1}let s=-1,n=0;if(i.forEach(((t,e)=>{t>>12&63,h=n>>>6&63,a=63&n;return l.hslaToColor(o/63,h/63,a/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),s=Math.cos(r),n=e?Math.abs(this.width*i)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*i):this.height,h=l.new(n,o),a=n/2-.5,_=o/2-.5,c=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=c-i*(u-_),r=f+s*(u-_);do{const n=e+s*(t-a),o=r+i*(t-a);l.__interpolate__(this,h,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const s=Math.min(...r),n=Math.max(...r);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-r,h=(e>>16&255)-i,a=(e>>8&255)-s,l=(255&e)-n;return t=>(255&r+t*o)<<24|(255&i+t*h)<<16|(255&s+t*a)<<8|255&n+t*l}async encode(t=1){return await i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),2303741511===r.getUint32(0,!1)){const{width:r,height:s,pixels:n}=await i.decode(t);e=new this(r,s),e.bitmap.set(n)}else if(r.getUint32(0,!1)>>>8==16767231){await o.init();const r=o.decode(t),i=r.width,s=r.height,n=r.format;e=new this(i,s);const h=r.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const i=n.rasterize(t,r,e),s=new this(i.width,i.height);return s.bitmap.set(i.buffer),s}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,r,i=4294967295,n=1/0,o=this.WRAP_STYLE_WORD){await s.init(),t=new s.Font(e,t);const[h,a,_,c]=l.colorToRGBA(i),f=new s.Layout;f.reset({wrap_style:o?"word":"letter",max_width:1/0===n?null:n}),f.append(t,r,e);const u=f.rasterize(h,a,_),w=new this(u.width,u.height);return w.bitmap.set(u.buffer),t.free(),f.free(),w.opacity(c/255)}}class _ extends l{constructor(t,e,r=100){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof l))throw new TypeError("Invalid image passed");const r=new _(t.width,t.height,e);return r.bitmap.set(t.bitmap),r}}t.exports={Image:l,GIF:class extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){await a.init();const e=new a.Encoder(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(~~(r.duration/10),r.width,r.height,r.bitmap,t)}return e.u8()}},Frame:_}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.14","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let r=0;for(const i of t)e.set(i,r),r+=i.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=4294967295;for(;r>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(883),s=r(354),{init:n,compress:o,decompress:h}=r(423),a=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),c=i(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:r,channels:s,depth:h=8,level:w=0}){let g=0,d=0;const m=e*s,p=new Uint8Array(r+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,r,i,s){let n=0;if(0===r){for(;n{const{version:i}=r(306);let s,n=null;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}const h="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),a="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const r=o.alloc(e.length);if(o.u8(r,e.length).set(e),this.ptr=s.font_new(r,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const r=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),i=JSON.parse(a(o.u8(s.font_metrics_buffer(r),o.length())));return s.font_metrics_free(r),i}rasterize(t,e=this.scale){const r=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),i={buffer:o.u8(s.font_rasterize_buffer(r),o.length()).slice(),metrics:JSON.parse(a(o.u8(s.font_rasterize_metrics(r),o.length())))};return s.font_rasterize_free(r),i}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=h(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,r){e=h(e),n&&this.refs.push(t);const i=o.alloc(e.length);o.u8(i,e.length).set(e),s.layout_append(this.ptr,t.ptr,i,e.length,null!=r?r:t.scale)}rasterize(t,e,r){const i=s.layout_rasterize(this.ptr,t,e,r),n={width:s.layout_rasterize_width(i),height:s.layout_rasterize_height(i),buffer:o.u8(s.layout_rasterize_buffer(i),o.length()).slice()};return s.layout_rasterize_free(i),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},667:(t,e,r)=>{const{version:i}=r(306);let s;const n=new Map;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={Encoder:class{constructor(t,e,r=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,r)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,r,i,n){const h=o.alloc(i.length);o.u8(h,i.length).set(i),s.encoder_add(this.ptr,h,i.length,e,r,t,n)}},Decoder:class{constructor(t,e=0){const r=o.alloc(t.length);if(o.u8(r,t.length).set(t),this.ptr=s.decoder_new(r,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t;this.free()}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:o.u8(s.decoder_frame_buffer(t),o.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e,{env:{push_to_stream(t,e){n.get(t).cb(o.u8(e,o.length()).slice())}}});s=r.exports}}},327:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={encode:function(t,e,r,i){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,r,i),n.length())},decode:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.decode(i,t.length,e,r);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const h={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),h},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},876:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={rasterize:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.rasterize(i,t.length,e,r);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const h={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),h},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},76:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const r=s.decode(e,t.length);if(0===r)throw new Error("tiff: failed to decode");const i={width:s.decode_width(r),height:s.decode_height(r),buffer:n.u8(s.decode_buffer(r),n.length()).slice()};return s.decode_free(r),i},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},423:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={compress:function(t,e=3){const r=n.alloc(t.length);return n.u8(r,t.length).set(t),n.copy_and_free(s.compress(r,t.length,e),n.length())},decompress:function(t,e=0){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const i=s.decompress(r,t.length,e);if(0===i)throw new Error("zlib: failed to decompress");return n.copy_and_free(i,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}}},e={},function r(i){if(e[i])return e[i].exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index 86e0db9..b2dcb59 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","jpegCanvas","composite","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","pixelType","meta","free","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","toString","status","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","load","render","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","GIFEncoder","initialize","add","encoded","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","u8array_ref","i32array_ref","u32array_ref","wasm","utf8encoder","TextEncoder","u8array","memory","i32array","Int32Array","ptr","id","max_width","wrap_style","str","string","len","__wbindgen_malloc","u8","code","charCodeAt","substring","__wbindgen_realloc","encodeInto","written","string_to_ptr","i32","__wbindgen_free","WebAssembly","Module","fetch","then","arrayBuffer","instance","Instance","u8array_to_ptr","cachedTextDecoder","TextDecoder","ignoreBOM","fatal","cachegetUint8Memory0","getUint8Memory0","cachegetInt32Memory0","getInt32Memory0","WASM_VECTOR_LEN","__wbg_gif_encoder_free","repeat","__wbindgen_placeholder__","__wbindgen_throw","arg0","arg1","ret","gif_encoder_new","retptr","__wbindgen_export_0","gif_encoder_buffer","r0","r1","v0","delay","ptr0","arg","malloc","passArray8ToWasm0","gif_encoder_add","getArrayU8FromWasm0","cachegetUint16Memory0","async","initWASM","v1","Uint16Array","cachedTextEncoder","encodeString","buf","read","cachegetUint32Memory0","fit_kind","zoom","realloc","mem","passStringToWasm0","__wbindgen_export_2","__wbindgen_export_1","ptr_to_u8array","limit","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32((~~y - 1) * this.width + (~~x - 1), false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n quality = Math.max(1, Math.min(100, quality));\n const jpegCanvas = new this.constructor(this.width, this.height);\n jpegCanvas.fill(0xff);\n jpegCanvas.composite(this);\n return jpeglib.encode(this.width, this.height, quality, jpegCanvas.bitmap);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n const status = await jpeglib.decode(0, data, 0, 0);\n if (status === 1) throw new Error('Failed decoding JPEG image');\n const [pixelType, width, height] = jpeglib.meta(0);\n image = new this(width, height);\n const buffer = jpeglib.buffer(0);\n jpeglib.free(0);\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n const status = await tifflib.decode(0, data);\n if (status === 1) throw new Error('Failed decoding TIFF image');\n const meta = tifflib.meta(0);\n const buffer = tifflib.buffer(0);\n tifflib.free(0);\n\n image = new this(...meta);\n image.bitmap.set(buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg !== 'string')\n svg = svg.toString();\n\n const status = await svglib.rgba(0, svg, mode, size, size, size);\n if (status === 1) throw new Error('Failed parsing SVG');\n if (status === 2) throw new Error('Failed rendering SVG');\n const meta = svglib.meta(0);\n const image = new this(...meta);\n image.bitmap.set(svglib.buffer(0));\n svglib.free(0);\n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n const [r, g, b, a] = Image.colorToRGBA(color);\n await fontlib.load(0, font, scale);\n fontlib.render(0, 0, scale, r, g, b, text, wrapWidth === Infinity ? null : wrapWidth, wrapStyle);\n const buffer = fontlib.buffer(0);\n const [width, height] = fontlib.meta(0);\n fontlib.free(0);\n const image = new this(width, height);\n image.bitmap.set(buffer);\n image.opacity(a / 0xff);\n\n return image;\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n const encoder = await giflib.GIFEncoder.initialize(this.width, this.height, this.loopCount);\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), quality, frame.bitmap);\n }\n\n const encoded = encoder.buffer();\n encoder.free();\n return encoded;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n const compressed = await compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n array = await decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\nlet u8array_ref, i32array_ref, u32array_ref, wasm;\n\nconst utf8encoder = new TextEncoder();\n\nfunction u8array() {\n return u8array_ref.buffer === wasm.memory.buffer ? u8array_ref : (u8array_ref = new Uint8Array(wasm.memory.buffer));\n}\n\nfunction i32array() {\n return i32array_ref.buffer === wasm.memory.buffer ? i32array_ref : (i32array_ref = new Int32Array(wasm.memory.buffer));\n}\n\nfunction u32array() {\n return u32array_ref.buffer === wasm.memory.buffer ? u32array_ref : (u32array_ref = new Uint32Array(wasm.memory.buffer));\n}\n\nfunction ptr_to_u8array(ptr, len) {\n return u8array().subarray(ptr, ptr + len);\n}\n\nfunction ptr_to_u32array(ptr, len) {\n return u32array().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction u8array_to_ptr(buffer) {\n const ptr = wasm.__wbindgen_malloc(buffer.length);\n u8array().set(buffer, ptr);\n\n return ptr;\n}\n\nfunction string_to_ptr(string) {\n let offset = 0;\n let len = string.length;\n let ptr = wasm.__wbindgen_malloc(string.length);\n\n const u8 = u8array();\n while (len > offset) {\n const code = string.charCodeAt(offset);\n\n if (code > 0x7F) break;\n u8[ptr + offset++] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) string = string.substring(offset);\n ptr = wasm.__wbindgen_realloc(ptr, len, len = offset + string.length * 3);\n const ret = utf8encoder.encodeInto(string, u8array().subarray(ptr + offset, ptr + len));\n\n offset += ret.written;\n }\n\n return [ptr, offset];\n}\n\nconst nullish = x => x == null;\n\nmodule.exports = {\n render(ptr, id, scale, r, g, b, text, max_width, wrap_style = false) {\n const str = string_to_ptr(text);\n wasm.render(ptr, id, scale, r, g, b, str[0], str[1], !nullish(max_width), max_width || 0, wrap_style);\n },\n buffer(id) {\n wasm.buffer(8, id);\n const i32 = i32array();\n const slice = ptr_to_u8array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], i32[3]);\n\n return slice;\n },\n meta(id) {\n wasm.meta(8, id);\n const i32 = i32array();\n const slice = ptr_to_u32array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], 4 * i32[3]);\n\n return slice;\n },\n async load(id, buffer, scale = 128) {\n if (!wasm) {\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n u8array_ref = new Uint8Array(wasm.memory.buffer);\n i32array_ref = new Int32Array(wasm.memory.buffer);\n u32array_ref = new Uint32Array(wasm.memory.buffer);\n }\n\n wasm.load(id, u8array_to_ptr(buffer), buffer.length, scale);\n },\n free(id) {\n wasm.free(id);\n }\n}\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet cachedTextDecoder = new TextDecoder('utf-8', {ignoreBOM: true, fatal: true});\n\ncachedTextDecoder.decode();\n\nlet cachegetUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n\tif (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n\t}\n\treturn cachegetUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n\treturn cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n\tif (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n\t}\n\treturn cachegetInt32Memory0;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n\treturn getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray8ToWasm0(arg, malloc) {\n\tconst ptr = malloc(arg.length * 1);\n\tgetUint8Memory0().set(arg, ptr / 1);\n\tWASM_VECTOR_LEN = arg.length;\n\treturn ptr;\n}\n\nclass GIFEncoder {\n\tfree() {\n\t\twasm.__wbg_gif_encoder_free(this.ptr);\n\t}\n\n\t/**\n\t * @param {number} width\n\t * @param {number} height\n\t * @param {number} repeat\n\t */\n\tstatic async initialize(width, height, repeat) {\n\t\tif (!wasm) {\n\t\t\tconst module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(r => r.arrayBuffer()));\n\t\t\tconst instance = new WebAssembly.Instance(module, {\n\t\t\t\t__wbindgen_placeholder__: {\n\t\t\t\t\t__wbindgen_throw: function (arg0, arg1) {\n\t\t\t\t\t\tthrow new Error(getStringFromWasm0(arg0, arg1));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\twasm = instance.exports;\n\t\t}\n\n\t\tconst ret = wasm.gif_encoder_new(width, height, repeat);\n\t\treturn new GIFEncoder(ret);\n\t}\n\n\tconstructor(ptr) {\n\t\tthis.ptr = ptr;\n\t}\n\n\t/**\n\t * @returns {Uint8Array}\n\t */\n\tbuffer() {\n\t\ttry {\n\t\t\tconst retptr = wasm.__wbindgen_export_0.value - 16;\n\t\t\twasm.__wbindgen_export_0.value = retptr;\n\t\t\twasm.gif_encoder_buffer(retptr, this.ptr);\n\t\t\tconst r0 = getInt32Memory0()[retptr / 4];\n\t\t\tconst r1 = getInt32Memory0()[retptr / 4 + 1];\n\t\t\tconst v0 = getArrayU8FromWasm0(r0, r1).slice();\n\t\t\twasm.__wbindgen_free(r0, r1 * 1);\n\t\t\treturn v0;\n\t\t} finally {\n\t\t\twasm.__wbindgen_export_0.value += 16;\n\t\t}\n\t}\n\n\t/**\n\t * @param {number} delay\n\t * @param {number} quality\n\t * @param {Uint8Array} buffer\n\t */\n\tadd(delay, quality, buffer) {\n\t\tconst ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n\t\twasm.gif_encoder_add(this.ptr, delay, quality, ptr0, WASM_VECTOR_LEN);\n\t}\n}\n\nmodule.exports = {GIFEncoder};\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet cachegetUint8Memory0 = null;\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1);\n getUint8Memory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachegetUint16Memory0 = null;\n\nfunction getUint16Memory0() {\n if (cachegetUint16Memory0 === null || cachegetUint16Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint16Memory0 = new Uint16Array(wasm.memory.buffer);\n }\n return cachegetUint16Memory0;\n}\n\nfunction getArrayU16FromWasm0(ptr, len) {\n return getUint16Memory0().subarray(ptr / 2, ptr / 2 + len);\n}\n\nasync function initWASM() {\n if (wasm) return;\n\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n wasm = instance.exports;\n}\n\nmodule.exports = {\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} quality\n * @param {Uint8Array|Uint8ClampedArray} buffer\n * @returns {Uint8Array}\n */\n async encode(width, height, quality, buffer) {\n await initWASM();\n\n try {\n const retptr = wasm.__wbindgen_export_0.value - 16;\n wasm.__wbindgen_export_0.value = retptr;\n const ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n wasm.encode(retptr, width, height, quality, ptr0, WASM_VECTOR_LEN);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v1 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 1);\n return v1;\n } finally {\n wasm.__wbindgen_export_0.value += 16;\n }\n },\n /**\n * @param {number} ptr\n * @param {Uint8Array} buffer\n * @param {number} width\n * @param {number} height\n * @returns {number}\n */\n async decode(ptr, buffer, width, height) {\n await initWASM();\n\n const ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n return wasm.decode(ptr, ptr0, WASM_VECTOR_LEN, width, height);\n },\n /**\n * @param {number} id\n * @returns {Uint16Array}\n */\n meta(id) {\n try {\n const retptr = wasm.__wbindgen_export_0.value - 16;\n wasm.__wbindgen_export_0.value = retptr;\n wasm.meta(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU16FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 2);\n return v0;\n } finally {\n wasm.__wbindgen_export_0.value += 16;\n }\n },\n /**\n * @param {number} id\n * @returns {Uint8Array}\n */\n buffer(id) {\n try {\n const retptr = wasm.__wbindgen_export_0.value - 16;\n wasm.__wbindgen_export_0.value = retptr;\n wasm.buffer(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 1);\n return v0;\n } finally {\n wasm.__wbindgen_export_0.value += 16;\n }\n },\n /**\n * @param {number} id\n */\n free(id) {\n wasm.free(id);\n }\n}\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet WASM_VECTOR_LEN = 0;\n\nlet cachegetUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nlet cachedTextEncoder = new TextEncoder();\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n }\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n });\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const textEncoder = new TextEncoder();\n const buf = textEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nlet cachegetUint32Memory0 = null;\n\nfunction getUint32Memory0() {\n if (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer);\n }\n return cachegetUint32Memory0;\n}\n\nfunction getArrayU32FromWasm0(ptr, len) {\n return getUint32Memory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n return getUint8Memory0().subarray(ptr, ptr + len);\n}\n\nmodule.exports = {\n /**\n * @param {number} ptr\n * @param {string} svg\n * @param {number} fit_kind\n * @param {number} zoom\n * @param {number} width\n * @param {number} height\n * @returns {number}\n */\n async rgba(ptr, svg, fit_kind, zoom, width, height) {\n if (!wasm) {\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n wasm = instance.exports;\n }\n\n const ptr0 = passStringToWasm0(svg, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n return wasm.rgba(ptr, ptr0, WASM_VECTOR_LEN, fit_kind, zoom, width, height);\n },\n /**\n * @param {number} id\n * @returns {Uint32Array}\n */\n meta(id) {\n try {\n const retptr = wasm.__wbindgen_export_2.value - 16;\n wasm.__wbindgen_export_2.value = retptr;\n wasm.meta(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU32FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1 * 4);\n return v0;\n } finally {\n wasm.__wbindgen_export_2.value += 16;\n }\n },\n /**\n * @param {number} id\n * @returns {Uint8Array}\n */\n buffer(id) {\n try {\n const retptr = wasm.__wbindgen_export_2.value - 16;\n wasm.__wbindgen_export_2.value = retptr;\n wasm.buffer(retptr, id);\n const r0 = getInt32Memory0()[retptr / 4];\n const r1 = getInt32Memory0()[retptr / 4 + 1];\n const v0 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_free(r0, r1);\n return v0;\n } finally {\n wasm.__wbindgen_export_2.value += 16;\n }\n },\n /**\n * @param {number} id\n */\n free(id) {\n wasm.free(id);\n }\n};\n","const {version} = require('../../package.json');\nlet wasm;\n\nlet cachegetUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n\tif (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n\t}\n\treturn cachegetUint8Memory0;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray8ToWasm0(arg, malloc) {\n\tconst ptr = malloc(arg.length * 1);\n\tgetUint8Memory0().set(arg, ptr / 1);\n\tWASM_VECTOR_LEN = arg.length;\n\treturn ptr;\n}\n\nlet cachegetInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n\tif (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n\t}\n\treturn cachegetInt32Memory0;\n}\n\nlet cachegetUint32Memory0 = null;\n\nfunction getUint32Memory0() {\n\tif (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) {\n\t\tcachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer);\n\t}\n\treturn cachegetUint32Memory0;\n}\n\nfunction getArrayU32FromWasm0(ptr, len) {\n\treturn getUint32Memory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n\treturn getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nmodule.exports = {\n\t/**\n\t * @param {number} ptr\n\t * @param {Uint8Array} buffer\n\t * @returns {number}\n\t */\n\tasync decode(ptr, buffer) {\n\t\tif (!wasm) {\n\t\t\tconst module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(r => r.arrayBuffer()));\n\t\t\tconst instance = new WebAssembly.Instance(module);\n\t\t\twasm = instance.exports;\n\t\t}\n\n\t\tconst ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc);\n\t\treturn wasm.decode(ptr, ptr0, WASM_VECTOR_LEN);\n\t},\n\t/**\n\t * @param {number} id\n\t * @returns {Uint32Array}\n\t */\n\tmeta(id) {\n\t\ttry {\n\t\t\tconst retptr = wasm.__wbindgen_export_1.value - 16;\n\t\t\twasm.__wbindgen_export_1.value = retptr;\n\t\t\twasm.meta(retptr, id);\n\t\t\tconst r0 = getInt32Memory0()[retptr / 4];\n\t\t\tconst r1 = getInt32Memory0()[retptr / 4 + 1];\n\t\t\tconst v0 = getArrayU32FromWasm0(r0, r1).slice();\n\t\t\twasm.__wbindgen_free(r0, r1 * 4);\n\t\t\treturn v0;\n\t\t} finally {\n\t\t\twasm.__wbindgen_export_1.value += 16;\n\t\t}\n\t},\n\t/**\n\t * @param {number} id\n\t * @returns {Uint8Array}\n\t */\n\tbuffer(id) {\n\t\ttry {\n\t\t\tconst retptr = wasm.__wbindgen_export_1.value - 16;\n\t\t\twasm.__wbindgen_export_1.value = retptr;\n\t\t\twasm.buffer(retptr, id);\n\t\t\tconst r0 = getInt32Memory0()[retptr / 4];\n\t\t\tconst r1 = getInt32Memory0()[retptr / 4 + 1];\n\t\t\tconst v0 = getArrayU8FromWasm0(r0, r1).slice();\n\t\t\twasm.__wbindgen_free(r0, r1 * 1);\n\t\t\treturn v0;\n\t\t} finally {\n\t\t\twasm.__wbindgen_export_1.value += 16;\n\t\t}\n\t},\n\t/**\n\t * @param {number} id\n\t */\n\tfree(id) {\n\t\twasm.free(id);\n\t}\n}\n","const {version} = require('../../package.json');\nasync function load() {\n let wasm;\n\n {\n const module = new WebAssembly.Module(await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(r => r.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n }\n\n let u8array_ref = new Uint8Array(wasm.memory.buffer);\n let i32array_ref = new Int32Array(wasm.memory.buffer);\n\n function u8array() {\n return u8array_ref.buffer === wasm.memory.buffer ? u8array_ref : (u8array_ref = new Uint8Array(wasm.memory.buffer));\n }\n\n function i32array() {\n return i32array_ref.buffer === wasm.memory.buffer ? i32array_ref : (i32array_ref = new Int32Array(wasm.memory.buffer));\n }\n\n function ptr_to_u8array(ptr, len) {\n return u8array().subarray(ptr, ptr + len);\n }\n\n function u8array_to_ptr(buffer) {\n const ptr = wasm.__wbindgen_malloc(buffer.length);\n u8array().set(buffer, ptr);\n return ptr;\n }\n\n return {\n compress(buffer, level) {\n const ptr = u8array_to_ptr(buffer);\n wasm.compress(8, ptr, buffer.length, level);\n\n const i32 = i32array();\n const slice = ptr_to_u8array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], i32[3]);\n return slice;\n }, decompress(buffer, limit) {\n const ptr = u8array_to_ptr(buffer);\n\n try {\n wasm.decompress(8, ptr, buffer.length, limit);\n\n const i32 = i32array();\n const slice = ptr_to_u8array(i32[2], i32[3]).slice();\n wasm.__wbindgen_free(i32[2], i32[3]);\n return slice;\n } catch {\n wasm.__wbindgen_free(ptr, buffer.length);\n throw new Error('zlib: panic');\n }\n }\n };\n}\n\nmodule.exports = {\n async compress(buffer, level) {\n const {compress} = module.exports = await load();\n\n return compress(buffer, level);\n },\n async decompress(buffer, limit) {\n const {decompress} = module.exports = await load();\n\n return decompress(buffer, limit);\n }\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","framebuffer","pixelType","format","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","Font","layout","Layout","reset","wrap_style","max_width","append","free","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","wasm","registry","mem","walloc","ptr","wfree","memory","cur_len","encode_utf8","globalThis","Deno","core","string","decode_utf8","decoder","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","options","stringify","layout_reset","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","Instance","streams","Map","loops","slices","encoder_new","encoder_free","sum","delay","encoder_add","Decoder","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32((~~y - 1) * this.width + (~~x - 1), false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new this(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new this(framebuffer.width, framebuffer.height);\n \n image.bitmap.set(framebuffer.buffer);\n \n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layout = new fontlib.Layout();\n\n layout.reset({\n wrap_style: wrapStyle ? 'word' : 'letter',\n max_width: Infinity === wrapWidth ? null : wrapWidth,\n });\n\n layout.append(font, text, scale);\n const framebuffer = layout.rasterize(r, g, b);\n const image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n font.free();\n layout.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality);\n }\n\n return encoder.u8();\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, scale) {\n text = encode_utf8(text);\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, null != scale ? scale : font.scale);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n \n wasm = instance.exports;\n },\n}","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) { this.slices.push(buffer); }\n free() { this.ptr = wasm.encoder_free(this.ptr); }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(delay, width, height, buffer, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, width, height, delay, quality);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n\n this.free();\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n });\n \n wasm = instance.exports;\n }\n}","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n }\n}","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n }\n}","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n\tstatic alloc(size) { return wasm.walloc(size); }\n\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\tstatic length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n\tstatic copy_and_free(ptr, size) {\n\t\tlet slice = mem.u8(ptr, size).slice();\n\t\treturn (wasm.wfree(ptr, size), slice);\n\t}\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = new WebAssembly.Instance(module);\n\n\t\twasm = instance.exports;\n\t}\n}","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n }\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file From c6b17b9aa0c07d3ed3592f2632aeba47d8597760 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sat, 23 Jan 2021 19:26:02 +0100 Subject: [PATCH 014/120] GIF decoding (cherry picked from commit db1a0b79aaba38d492134f18e7724c9d943b1c05) --- ImageScript.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/ImageScript.js b/ImageScript.js index 5eed5c4..d7717cd 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1364,6 +1364,38 @@ class GIF extends Array { return encoder.u8(); } + + /** + * Decodes a GIF image + * @param {Buffer|Uint8Array} data The binary data to decode + * @return {Promise} The decoded GIF + */ + static async decode(data) { + let image; + + let view; + if (!ArrayBuffer.isView(data)) { + data = new Uint8Array(data); + view = new DataView(data.buffer); + } else { + data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + view = new DataView(data.buffer, data.byteOffset, data.byteLength); + } + + if ((view.getUint32(0, false) >>> 8) === 0x474946) { // GIF + const decoder = new giflib.Decoder(data); + const frames = []; + for (const frameData of decoder.frames()) { + const frame = new Frame(frameData.width, frameData.height, frameData.delay); + frame.bitmap.set(frameData.buffer); + frames.push(frame); + } + + image = new GIF(frames); + } else throw new Error('Unsupported image type'); + + return image; + } } module.exports = {Image, GIF, Frame}; From c5f4bb9c3b3c471bc1c56f175c91ac0a451be918 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sat, 23 Jan 2021 19:27:53 +0100 Subject: [PATCH 015/120] GIF encoder: free stream (cherry picked from commit 4949e44c8ce0c5f1116d0754c18220982a0ac19d) --- utils/wasm/gif.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/utils/wasm/gif.js b/utils/wasm/gif.js index e461f12..0d0fdfe 100644 --- a/utils/wasm/gif.js +++ b/utils/wasm/gif.js @@ -23,8 +23,14 @@ class Encoder { this.ptr = wasm.encoder_new(0, width, height, loops); } - cb(buffer) { this.slices.push(buffer); } - free() { this.ptr = wasm.encoder_free(this.ptr); } + cb(buffer) { + this.slices.push(buffer); + } + + free() { + this.ptr = wasm.encoder_free(this.ptr); + streams.delete(0); + } u8() { this.free(); @@ -103,4 +109,4 @@ module.exports = { wasm = instance.exports; } -} \ No newline at end of file +} From bc9a766828246673ea6d1b888b5530af58dcce76 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 23 Jan 2021 18:44:33 +0000 Subject: [PATCH 016/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index 4ec4b5b..34155b8 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),s=r(723),n=r(876),o=r(327),h=r(76),a=r(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return l.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)s=n=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),h=r<.5?r*(1+e):r+e-r*e,a=2*r-h;s=i(a,h,t+1/3),n=i(a,h,t),o=i(a,h,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*i)}static hslToColor(t,e,r){return l.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const s=Math.max(t,e,r),n=Math.min(t,e,r);let o,h,a=(s+n)/2;if(s===n)o=h=0;else{const i=s-n;switch(h=a>.5?i/(2-s-n):i/(s+n),s){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=l.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}__resize__(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(t,e,r,i))}__crop__(t,e,r,i){t=~~t,e=~~e;const s=new this.constructor(r,i);for(let n=0;nthis.width||o>this.height)continue;const h=s(i,n);this.__set_pixel__(r,o,h)}return this}__fast_box__(t,e,r,i,s){t<0&&(r+=t,t=1),e<0&&(i+=e,e=1);const n=Math.max(Math.min(t+r,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const h=4*(n+e*this.width),a=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),a,h);return this}drawCircle(t,e,r,i){const s=r**2;for(let n=Math.max(1,e-r);n<=Math.min(e+r,this.height);n++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(n-e)**2r?this.bitmap[h]=0:e&&(this.bitmap[h]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[s,n,o,h]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,n,t*(e?1:o),h)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[s,n,o,h]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,t*(e?1:n),o,h)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(n+s*this.width),h=t.__view__.getUint32(4*(r+i*t.width),!1),a=this.__view__.getUint32(o,!1);255==(255&h)?this.__view__.setUint32(o,h,!1):0==(255&h)?this.__view__.setUint32(o,a,!1):this.__view__.setUint32(o,l.__alpha_blend__(h,a),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,s=256-r;return(255&i*(t>>>24)+s*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,s,1-n,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,1-s,n,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(1-i,s,n,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[s,n,o,h]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(e,r,l.hslaToColor(s+t/360,n,o,h))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let s=0;s~~(63*t)));if(t&&a63-r)continue;const _=o<<12|h<<6|a;i[_]=(i[_]||0)+1}let s=-1,n=0;if(i.forEach(((t,e)=>{t>>12&63,h=n>>>6&63,a=63&n;return l.hslaToColor(o/63,h/63,a/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),s=Math.cos(r),n=e?Math.abs(this.width*i)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*i):this.height,h=l.new(n,o),a=n/2-.5,_=o/2-.5,c=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=c-i*(u-_),r=f+s*(u-_);do{const n=e+s*(t-a),o=r+i*(t-a);l.__interpolate__(this,h,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const s=Math.min(...r),n=Math.max(...r);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-r,h=(e>>16&255)-i,a=(e>>8&255)-s,l=(255&e)-n;return t=>(255&r+t*o)<<24|(255&i+t*h)<<16|(255&s+t*a)<<8|255&n+t*l}async encode(t=1){return await i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),2303741511===r.getUint32(0,!1)){const{width:r,height:s,pixels:n}=await i.decode(t);e=new this(r,s),e.bitmap.set(n)}else if(r.getUint32(0,!1)>>>8==16767231){await o.init();const r=o.decode(t),i=r.width,s=r.height,n=r.format;e=new this(i,s);const h=r.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const i=n.rasterize(t,r,e),s=new this(i.width,i.height);return s.bitmap.set(i.buffer),s}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,r,i=4294967295,n=1/0,o=this.WRAP_STYLE_WORD){await s.init(),t=new s.Font(e,t);const[h,a,_,c]=l.colorToRGBA(i),f=new s.Layout;f.reset({wrap_style:o?"word":"letter",max_width:1/0===n?null:n}),f.append(t,r,e);const u=f.rasterize(h,a,_),w=new this(u.width,u.height);return w.bitmap.set(u.buffer),t.free(),f.free(),w.opacity(c/255)}}class _ extends l{constructor(t,e,r=100){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof l))throw new TypeError("Invalid image passed");const r=new _(t.width,t.height,e);return r.bitmap.set(t.bitmap),r}}t.exports={Image:l,GIF:class extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){await a.init();const e=new a.Encoder(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(~~(r.duration/10),r.width,r.height,r.bitmap,t)}return e.u8()}},Frame:_}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.14","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let r=0;for(const i of t)e.set(i,r),r+=i.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=4294967295;for(;r>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(883),s=r(354),{init:n,compress:o,decompress:h}=r(423),a=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),c=i(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:r,channels:s,depth:h=8,level:w=0}){let g=0,d=0;const m=e*s,p=new Uint8Array(r+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,r,i,s){let n=0;if(0===r){for(;n{const{version:i}=r(306);let s,n=null;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}const h="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),a="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const r=o.alloc(e.length);if(o.u8(r,e.length).set(e),this.ptr=s.font_new(r,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const r=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),i=JSON.parse(a(o.u8(s.font_metrics_buffer(r),o.length())));return s.font_metrics_free(r),i}rasterize(t,e=this.scale){const r=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),i={buffer:o.u8(s.font_rasterize_buffer(r),o.length()).slice(),metrics:JSON.parse(a(o.u8(s.font_rasterize_metrics(r),o.length())))};return s.font_rasterize_free(r),i}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=h(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,r){e=h(e),n&&this.refs.push(t);const i=o.alloc(e.length);o.u8(i,e.length).set(e),s.layout_append(this.ptr,t.ptr,i,e.length,null!=r?r:t.scale)}rasterize(t,e,r){const i=s.layout_rasterize(this.ptr,t,e,r),n={width:s.layout_rasterize_width(i),height:s.layout_rasterize_height(i),buffer:o.u8(s.layout_rasterize_buffer(i),o.length()).slice()};return s.layout_rasterize_free(i),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},667:(t,e,r)=>{const{version:i}=r(306);let s;const n=new Map;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={Encoder:class{constructor(t,e,r=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,r)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,r,i,n){const h=o.alloc(i.length);o.u8(h,i.length).set(i),s.encoder_add(this.ptr,h,i.length,e,r,t,n)}},Decoder:class{constructor(t,e=0){const r=o.alloc(t.length);if(o.u8(r,t.length).set(t),this.ptr=s.decoder_new(r,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t;this.free()}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:o.u8(s.decoder_frame_buffer(t),o.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e,{env:{push_to_stream(t,e){n.get(t).cb(o.u8(e,o.length()).slice())}}});s=r.exports}}},327:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={encode:function(t,e,r,i){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,r,i),n.length())},decode:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.decode(i,t.length,e,r);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const h={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),h},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},876:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={rasterize:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.rasterize(i,t.length,e,r);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const h={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),h},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},76:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const r=s.decode(e,t.length);if(0===r)throw new Error("tiff: failed to decode");const i={width:s.decode_width(r),height:s.decode_height(r),buffer:n.u8(s.decode_buffer(r),n.length()).slice()};return s.decode_free(r),i},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},423:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={compress:function(t,e=3){const r=n.alloc(t.length);return n.u8(r,t.length).set(t),n.copy_and_free(s.compress(r,t.length,e),n.length())},decompress:function(t,e=0){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const i=s.decompress(r,t.length,e);if(0===i)throw new Error("zlib: failed to decompress");return n.copy_and_free(i,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}}},e={},function r(i){if(e[i])return e[i].exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),s=r(723),n=r(876),o=r(327),h=r(76),a=r(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return l.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)s=n=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),h=r<.5?r*(1+e):r+e-r*e,a=2*r-h;s=i(a,h,t+1/3),n=i(a,h,t),o=i(a,h,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*i)}static hslToColor(t,e,r){return l.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const s=Math.max(t,e,r),n=Math.min(t,e,r);let o,h,a=(s+n)/2;if(s===n)o=h=0;else{const i=s-n;switch(h=a>.5?i/(2-s-n):i/(s+n),s){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=l.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}__resize__(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(t,e,r,i))}__crop__(t,e,r,i){t=~~t,e=~~e;const s=new this.constructor(r,i);for(let n=0;nthis.width||o>this.height)continue;const h=s(i,n);this.__set_pixel__(r,o,h)}return this}__fast_box__(t,e,r,i,s){t<0&&(r+=t,t=1),e<0&&(i+=e,e=1);const n=Math.max(Math.min(t+r,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const h=4*(n+e*this.width),a=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),a,h);return this}drawCircle(t,e,r,i){const s=r**2;for(let n=Math.max(1,e-r);n<=Math.min(e+r,this.height);n++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(n-e)**2r?this.bitmap[h]=0:e&&(this.bitmap[h]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[s,n,o,h]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,n,t*(e?1:o),h)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[s,n,o,h]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,t*(e?1:n),o,h)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(n+s*this.width),h=t.__view__.getUint32(4*(r+i*t.width),!1),a=this.__view__.getUint32(o,!1);255==(255&h)?this.__view__.setUint32(o,h,!1):0==(255&h)?this.__view__.setUint32(o,a,!1):this.__view__.setUint32(o,l.__alpha_blend__(h,a),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,s=256-r;return(255&i*(t>>>24)+s*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,s,1-n,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,1-s,n,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(1-i,s,n,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[s,n,o,h]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(e,r,l.hslaToColor(s+t/360,n,o,h))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let s=0;s~~(63*t)));if(t&&a63-r)continue;const _=o<<12|h<<6|a;i[_]=(i[_]||0)+1}let s=-1,n=0;if(i.forEach(((t,e)=>{t>>12&63,h=n>>>6&63,a=63&n;return l.hslaToColor(o/63,h/63,a/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),s=Math.cos(r),n=e?Math.abs(this.width*i)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*i):this.height,h=l.new(n,o),a=n/2-.5,_=o/2-.5,c=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=c-i*(u-_),r=f+s*(u-_);do{const n=e+s*(t-a),o=r+i*(t-a);l.__interpolate__(this,h,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const s=Math.min(...r),n=Math.max(...r);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-r,h=(e>>16&255)-i,a=(e>>8&255)-s,l=(255&e)-n;return t=>(255&r+t*o)<<24|(255&i+t*h)<<16|(255&s+t*a)<<8|255&n+t*l}async encode(t=1){return await i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),2303741511===r.getUint32(0,!1)){const{width:r,height:s,pixels:n}=await i.decode(t);e=new this(r,s),e.bitmap.set(n)}else if(r.getUint32(0,!1)>>>8==16767231){await o.init();const r=o.decode(t),i=r.width,s=r.height,n=r.format;e=new this(i,s);const h=r.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const i=n.rasterize(t,r,e),s=new this(i.width,i.height);return s.bitmap.set(i.buffer),s}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,r,i=4294967295,n=1/0,o=this.WRAP_STYLE_WORD){await s.init(),t=new s.Font(e,t);const[h,a,_,c]=l.colorToRGBA(i),f=new s.Layout;f.reset({wrap_style:o?"word":"letter",max_width:1/0===n?null:n}),f.append(t,r,e);const u=f.rasterize(h,a,_),w=new this(u.width,u.height);return w.bitmap.set(u.buffer),t.free(),f.free(),w.opacity(c/255)}}class _ extends l{constructor(t,e,r=100){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof l))throw new TypeError("Invalid image passed");const r=new _(t.width,t.height,e);return r.bitmap.set(t.bitmap),r}}class c extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){await a.init();const e=new a.Encoder(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(~~(r.duration/10),r.width,r.height,r.bitmap,t)}return e.u8()}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),r.getUint32(0,!1)>>>8!=4671814)throw new Error("Unsupported image type");{const r=new a.Decoder(t),i=[];for(const t of r.frames()){const e=new _(t.width,t.height,t.delay);e.bitmap.set(t.buffer),i.push(e)}e=new c(i)}return e}}t.exports={Image:l,GIF:c,Frame:_}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.14","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let r=0;for(const i of t)e.set(i,r),r+=i.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=4294967295;for(;r>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(883),s=r(354),{init:n,compress:o,decompress:h}=r(423),a=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),c=i(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:r,channels:s,depth:h=8,level:w=0}){let g=0,d=0;const m=e*s,p=new Uint8Array(r+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,r,i,s){let n=0;if(0===r){for(;n{const{version:i}=r(306);let s,n=null;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}const h="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),a="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const r=o.alloc(e.length);if(o.u8(r,e.length).set(e),this.ptr=s.font_new(r,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const r=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),i=JSON.parse(a(o.u8(s.font_metrics_buffer(r),o.length())));return s.font_metrics_free(r),i}rasterize(t,e=this.scale){const r=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),i={buffer:o.u8(s.font_rasterize_buffer(r),o.length()).slice(),metrics:JSON.parse(a(o.u8(s.font_rasterize_metrics(r),o.length())))};return s.font_rasterize_free(r),i}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=h(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,r){e=h(e),n&&this.refs.push(t);const i=o.alloc(e.length);o.u8(i,e.length).set(e),s.layout_append(this.ptr,t.ptr,i,e.length,null!=r?r:t.scale)}rasterize(t,e,r){const i=s.layout_rasterize(this.ptr,t,e,r),n={width:s.layout_rasterize_width(i),height:s.layout_rasterize_height(i),buffer:o.u8(s.layout_rasterize_buffer(i),o.length()).slice()};return s.layout_rasterize_free(i),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},667:(t,e,r)=>{const{version:i}=r(306);let s;const n=new Map;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={Encoder:class{constructor(t,e,r=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,r)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,r,i,n){const h=o.alloc(i.length);o.u8(h,i.length).set(i),s.encoder_add(this.ptr,h,i.length,e,r,t,n)}},Decoder:class{constructor(t,e=0){const r=o.alloc(t.length);if(o.u8(r,t.length).set(t),this.ptr=s.decoder_new(r,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t;this.free()}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:o.u8(s.decoder_frame_buffer(t),o.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e,{env:{push_to_stream(t,e){n.get(t).cb(o.u8(e,o.length()).slice())}}});s=r.exports}}},327:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={encode:function(t,e,r,i){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,r,i),n.length())},decode:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.decode(i,t.length,e,r);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const h={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),h},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},876:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={rasterize:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.rasterize(i,t.length,e,r);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const h={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),h},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},76:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const r=s.decode(e,t.length);if(0===r)throw new Error("tiff: failed to decode");const i={width:s.decode_width(r),height:s.decode_height(r),buffer:n.u8(s.decode_buffer(r),n.length()).slice()};return s.decode_free(r),i},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},423:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={compress:function(t,e=3){const r=n.alloc(t.length);return n.u8(r,t.length).set(t),n.copy_and_free(s.compress(r,t.length,e),n.length())},decompress:function(t,e=0){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const i=s.decompress(r,t.length,e);if(0===i)throw new Error("zlib: failed to decompress");return n.copy_and_free(i,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}}},e={},function r(i){if(e[i])return e[i].exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index b2dcb59..f968d18 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","framebuffer","pixelType","format","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","Font","layout","Layout","reset","wrap_style","max_width","append","free","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","wasm","registry","mem","walloc","ptr","wfree","memory","cur_len","encode_utf8","globalThis","Deno","core","string","decode_utf8","decoder","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","options","stringify","layout_reset","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","Instance","streams","Map","loops","slices","encoder_new","encoder_free","sum","delay","encoder_add","Decoder","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32((~~y - 1) * this.width + (~~x - 1), false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new this(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new this(framebuffer.width, framebuffer.height);\n \n image.bitmap.set(framebuffer.buffer);\n \n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layout = new fontlib.Layout();\n\n layout.reset({\n wrap_style: wrapStyle ? 'word' : 'letter',\n max_width: Infinity === wrapWidth ? null : wrapWidth,\n });\n\n layout.append(font, text, scale);\n const framebuffer = layout.rasterize(r, g, b);\n const image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n font.free();\n layout.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality);\n }\n\n return encoder.u8();\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, scale) {\n text = encode_utf8(text);\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, null != scale ? scale : font.scale);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n \n wasm = instance.exports;\n },\n}","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) { this.slices.push(buffer); }\n free() { this.ptr = wasm.encoder_free(this.ptr); }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(delay, width, height, buffer, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, width, height, delay, quality);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n\n this.free();\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n });\n \n wasm = instance.exports;\n }\n}","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n }\n}","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n }\n}","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n\tstatic alloc(size) { return wasm.walloc(size); }\n\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\tstatic length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n\tstatic copy_and_free(ptr, size) {\n\t\tlet slice = mem.u8(ptr, size).slice();\n\t\treturn (wasm.wfree(ptr, size), slice);\n\t}\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = new WebAssembly.Instance(module);\n\n\t\twasm = instance.exports;\n\t}\n}","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n }\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","framebuffer","pixelType","format","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","Font","layout","Layout","reset","wrap_style","max_width","append","free","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","decoder","Decoder","frameData","delay","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","wasm","registry","mem","walloc","ptr","wfree","memory","cur_len","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","options","stringify","layout_reset","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","Instance","streams","Map","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32((~~y - 1) * this.width + (~~x - 1), false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new this(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new this(framebuffer.width, framebuffer.height);\n \n image.bitmap.set(framebuffer.buffer);\n \n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layout = new fontlib.Layout();\n\n layout.reset({\n wrap_style: wrapStyle ? 'word' : 'letter',\n max_width: Infinity === wrapWidth ? null : wrapWidth,\n });\n\n layout.append(font, text, scale);\n const framebuffer = layout.rasterize(r, g, b);\n const image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n font.free();\n layout.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded GIF\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if ((view.getUint32(0, false) >>> 8) === 0x474946) { // GIF\n const decoder = new giflib.Decoder(data);\n const frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, scale) {\n text = encode_utf8(text);\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, null != scale ? scale : font.scale);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n \n wasm = instance.exports;\n },\n}","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(delay, width, height, buffer, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, width, height, delay, quality);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n\n this.free();\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n }\n}","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n }\n}","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n\tstatic alloc(size) { return wasm.walloc(size); }\n\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\tstatic length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n\tstatic copy_and_free(ptr, size) {\n\t\tlet slice = mem.u8(ptr, size).slice();\n\t\treturn (wasm.wfree(ptr, size), slice);\n\t}\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = new WebAssembly.Instance(module);\n\n\t\twasm = instance.exports;\n\t}\n}","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n }\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file From 89f6c4367128f9eab0fe5c3b4faa70dc9be1c9dc Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sat, 23 Jan 2021 19:49:39 +0100 Subject: [PATCH 017/120] 1.1.16 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b97bdeb..5fe679b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "imagescript", - "version": "1.1.14", + "version": "1.1.16", "description": "zero-dependency javascript image manipulation", "main": "ImageScript.js", "type": "commonjs", From 955ecbef0aac8f44c91ca5f2f0b33147aacf5bd2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 23 Jan 2021 18:50:21 +0000 Subject: [PATCH 018/120] Update bundle --- browser/ImageScript.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index 34155b8..7a51359 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),s=r(723),n=r(876),o=r(327),h=r(76),a=r(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return l.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)s=n=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),h=r<.5?r*(1+e):r+e-r*e,a=2*r-h;s=i(a,h,t+1/3),n=i(a,h,t),o=i(a,h,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*i)}static hslToColor(t,e,r){return l.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const s=Math.max(t,e,r),n=Math.min(t,e,r);let o,h,a=(s+n)/2;if(s===n)o=h=0;else{const i=s-n;switch(h=a>.5?i/(2-s-n):i/(s+n),s){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=l.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}__resize__(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(t,e,r,i))}__crop__(t,e,r,i){t=~~t,e=~~e;const s=new this.constructor(r,i);for(let n=0;nthis.width||o>this.height)continue;const h=s(i,n);this.__set_pixel__(r,o,h)}return this}__fast_box__(t,e,r,i,s){t<0&&(r+=t,t=1),e<0&&(i+=e,e=1);const n=Math.max(Math.min(t+r,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const h=4*(n+e*this.width),a=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),a,h);return this}drawCircle(t,e,r,i){const s=r**2;for(let n=Math.max(1,e-r);n<=Math.min(e+r,this.height);n++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(n-e)**2r?this.bitmap[h]=0:e&&(this.bitmap[h]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[s,n,o,h]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,n,t*(e?1:o),h)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[s,n,o,h]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,t*(e?1:n),o,h)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(n+s*this.width),h=t.__view__.getUint32(4*(r+i*t.width),!1),a=this.__view__.getUint32(o,!1);255==(255&h)?this.__view__.setUint32(o,h,!1):0==(255&h)?this.__view__.setUint32(o,a,!1):this.__view__.setUint32(o,l.__alpha_blend__(h,a),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,s=256-r;return(255&i*(t>>>24)+s*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,s,1-n,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,1-s,n,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(1-i,s,n,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[s,n,o,h]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(e,r,l.hslaToColor(s+t/360,n,o,h))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let s=0;s~~(63*t)));if(t&&a63-r)continue;const _=o<<12|h<<6|a;i[_]=(i[_]||0)+1}let s=-1,n=0;if(i.forEach(((t,e)=>{t>>12&63,h=n>>>6&63,a=63&n;return l.hslaToColor(o/63,h/63,a/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),s=Math.cos(r),n=e?Math.abs(this.width*i)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*i):this.height,h=l.new(n,o),a=n/2-.5,_=o/2-.5,c=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=c-i*(u-_),r=f+s*(u-_);do{const n=e+s*(t-a),o=r+i*(t-a);l.__interpolate__(this,h,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const s=Math.min(...r),n=Math.max(...r);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-r,h=(e>>16&255)-i,a=(e>>8&255)-s,l=(255&e)-n;return t=>(255&r+t*o)<<24|(255&i+t*h)<<16|(255&s+t*a)<<8|255&n+t*l}async encode(t=1){return await i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),2303741511===r.getUint32(0,!1)){const{width:r,height:s,pixels:n}=await i.decode(t);e=new this(r,s),e.bitmap.set(n)}else if(r.getUint32(0,!1)>>>8==16767231){await o.init();const r=o.decode(t),i=r.width,s=r.height,n=r.format;e=new this(i,s);const h=r.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const i=n.rasterize(t,r,e),s=new this(i.width,i.height);return s.bitmap.set(i.buffer),s}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,r,i=4294967295,n=1/0,o=this.WRAP_STYLE_WORD){await s.init(),t=new s.Font(e,t);const[h,a,_,c]=l.colorToRGBA(i),f=new s.Layout;f.reset({wrap_style:o?"word":"letter",max_width:1/0===n?null:n}),f.append(t,r,e);const u=f.rasterize(h,a,_),w=new this(u.width,u.height);return w.bitmap.set(u.buffer),t.free(),f.free(),w.opacity(c/255)}}class _ extends l{constructor(t,e,r=100){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof l))throw new TypeError("Invalid image passed");const r=new _(t.width,t.height,e);return r.bitmap.set(t.bitmap),r}}class c extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){await a.init();const e=new a.Encoder(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(~~(r.duration/10),r.width,r.height,r.bitmap,t)}return e.u8()}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),r.getUint32(0,!1)>>>8!=4671814)throw new Error("Unsupported image type");{const r=new a.Decoder(t),i=[];for(const t of r.frames()){const e=new _(t.width,t.height,t.delay);e.bitmap.set(t.buffer),i.push(e)}e=new c(i)}return e}}t.exports={Image:l,GIF:c,Frame:_}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.14","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let r=0;for(const i of t)e.set(i,r),r+=i.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=4294967295;for(;r>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(883),s=r(354),{init:n,compress:o,decompress:h}=r(423),a=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),c=i(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:r,channels:s,depth:h=8,level:w=0}){let g=0,d=0;const m=e*s,p=new Uint8Array(r+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,r,i,s){let n=0;if(0===r){for(;n{const{version:i}=r(306);let s,n=null;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}const h="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),a="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const r=o.alloc(e.length);if(o.u8(r,e.length).set(e),this.ptr=s.font_new(r,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const r=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),i=JSON.parse(a(o.u8(s.font_metrics_buffer(r),o.length())));return s.font_metrics_free(r),i}rasterize(t,e=this.scale){const r=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),i={buffer:o.u8(s.font_rasterize_buffer(r),o.length()).slice(),metrics:JSON.parse(a(o.u8(s.font_rasterize_metrics(r),o.length())))};return s.font_rasterize_free(r),i}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=h(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,r){e=h(e),n&&this.refs.push(t);const i=o.alloc(e.length);o.u8(i,e.length).set(e),s.layout_append(this.ptr,t.ptr,i,e.length,null!=r?r:t.scale)}rasterize(t,e,r){const i=s.layout_rasterize(this.ptr,t,e,r),n={width:s.layout_rasterize_width(i),height:s.layout_rasterize_height(i),buffer:o.u8(s.layout_rasterize_buffer(i),o.length()).slice()};return s.layout_rasterize_free(i),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},667:(t,e,r)=>{const{version:i}=r(306);let s;const n=new Map;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={Encoder:class{constructor(t,e,r=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,r)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,r,i,n){const h=o.alloc(i.length);o.u8(h,i.length).set(i),s.encoder_add(this.ptr,h,i.length,e,r,t,n)}},Decoder:class{constructor(t,e=0){const r=o.alloc(t.length);if(o.u8(r,t.length).set(t),this.ptr=s.decoder_new(r,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t;this.free()}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:o.u8(s.decoder_frame_buffer(t),o.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e,{env:{push_to_stream(t,e){n.get(t).cb(o.u8(e,o.length()).slice())}}});s=r.exports}}},327:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={encode:function(t,e,r,i){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,r,i),n.length())},decode:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.decode(i,t.length,e,r);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const h={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),h},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},876:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={rasterize:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.rasterize(i,t.length,e,r);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const h={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),h},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},76:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const r=s.decode(e,t.length);if(0===r)throw new Error("tiff: failed to decode");const i={width:s.decode_width(r),height:s.decode_height(r),buffer:n.u8(s.decode_buffer(r),n.length()).slice()};return s.decode_free(r),i},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},423:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={compress:function(t,e=3){const r=n.alloc(t.length);return n.u8(r,t.length).set(t),n.copy_and_free(s.compress(r,t.length,e),n.length())},decompress:function(t,e=0){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const i=s.decompress(r,t.length,e);if(0===i)throw new Error("zlib: failed to decompress");return n.copy_and_free(i,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}}},e={},function r(i){if(e[i])return e[i].exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),s=r(723),n=r(876),o=r(327),h=r(76),a=r(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return l.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)s=n=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),h=r<.5?r*(1+e):r+e-r*e,a=2*r-h;s=i(a,h,t+1/3),n=i(a,h,t),o=i(a,h,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*i)}static hslToColor(t,e,r){return l.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const s=Math.max(t,e,r),n=Math.min(t,e,r);let o,h,a=(s+n)/2;if(s===n)o=h=0;else{const i=s-n;switch(h=a>.5?i/(2-s-n):i/(s+n),s){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=l.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}__resize__(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(t,e,r,i))}__crop__(t,e,r,i){t=~~t,e=~~e;const s=new this.constructor(r,i);for(let n=0;nthis.width||o>this.height)continue;const h=s(i,n);this.__set_pixel__(r,o,h)}return this}__fast_box__(t,e,r,i,s){t<0&&(r+=t,t=1),e<0&&(i+=e,e=1);const n=Math.max(Math.min(t+r,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const h=4*(n+e*this.width),a=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),a,h);return this}drawCircle(t,e,r,i){const s=r**2;for(let n=Math.max(1,e-r);n<=Math.min(e+r,this.height);n++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(n-e)**2r?this.bitmap[h]=0:e&&(this.bitmap[h]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[s,n,o,h]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,n,t*(e?1:o),h)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[s,n,o,h]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,t*(e?1:n),o,h)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(n+s*this.width),h=t.__view__.getUint32(4*(r+i*t.width),!1),a=this.__view__.getUint32(o,!1);255==(255&h)?this.__view__.setUint32(o,h,!1):0==(255&h)?this.__view__.setUint32(o,a,!1):this.__view__.setUint32(o,l.__alpha_blend__(h,a),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,s=256-r;return(255&i*(t>>>24)+s*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,s,1-n,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,1-s,n,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(1-i,s,n,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[s,n,o,h]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(e,r,l.hslaToColor(s+t/360,n,o,h))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let s=0;s~~(63*t)));if(t&&a63-r)continue;const _=o<<12|h<<6|a;i[_]=(i[_]||0)+1}let s=-1,n=0;if(i.forEach(((t,e)=>{t>>12&63,h=n>>>6&63,a=63&n;return l.hslaToColor(o/63,h/63,a/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),s=Math.cos(r),n=e?Math.abs(this.width*i)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*i):this.height,h=l.new(n,o),a=n/2-.5,_=o/2-.5,c=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=c-i*(u-_),r=f+s*(u-_);do{const n=e+s*(t-a),o=r+i*(t-a);l.__interpolate__(this,h,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const s=Math.min(...r),n=Math.max(...r);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-r,h=(e>>16&255)-i,a=(e>>8&255)-s,l=(255&e)-n;return t=>(255&r+t*o)<<24|(255&i+t*h)<<16|(255&s+t*a)<<8|255&n+t*l}async encode(t=1){return await i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),2303741511===r.getUint32(0,!1)){const{width:r,height:s,pixels:n}=await i.decode(t);e=new this(r,s),e.bitmap.set(n)}else if(r.getUint32(0,!1)>>>8==16767231){await o.init();const r=o.decode(t),i=r.width,s=r.height,n=r.format;e=new this(i,s);const h=r.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const i=n.rasterize(t,r,e),s=new this(i.width,i.height);return s.bitmap.set(i.buffer),s}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,r,i=4294967295,n=1/0,o=this.WRAP_STYLE_WORD){await s.init(),t=new s.Font(e,t);const[h,a,_,c]=l.colorToRGBA(i),f=new s.Layout;f.reset({wrap_style:o?"word":"letter",max_width:1/0===n?null:n}),f.append(t,r,e);const u=f.rasterize(h,a,_),w=new this(u.width,u.height);return w.bitmap.set(u.buffer),t.free(),f.free(),w.opacity(c/255)}}class _ extends l{constructor(t,e,r=100){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof l))throw new TypeError("Invalid image passed");const r=new _(t.width,t.height,e);return r.bitmap.set(t.bitmap),r}}class c extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){await a.init();const e=new a.Encoder(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(~~(r.duration/10),r.width,r.height,r.bitmap,t)}return e.u8()}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),r.getUint32(0,!1)>>>8!=4671814)throw new Error("Unsupported image type");{const r=new a.Decoder(t),i=[];for(const t of r.frames()){const e=new _(t.width,t.height,t.delay);e.bitmap.set(t.buffer),i.push(e)}e=new c(i)}return e}}t.exports={Image:l,GIF:c,Frame:_}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let r=0;for(const i of t)e.set(i,r),r+=i.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=4294967295;for(;r>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(883),s=r(354),{init:n,compress:o,decompress:h}=r(423),a=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),c=i(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:r,channels:s,depth:h=8,level:w=0}){let g=0,d=0;const m=e*s,p=new Uint8Array(r+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,r,i,s){let n=0;if(0===r){for(;n{const{version:i}=r(306);let s,n=null;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}const h="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),a="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const r=o.alloc(e.length);if(o.u8(r,e.length).set(e),this.ptr=s.font_new(r,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const r=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),i=JSON.parse(a(o.u8(s.font_metrics_buffer(r),o.length())));return s.font_metrics_free(r),i}rasterize(t,e=this.scale){const r=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),i={buffer:o.u8(s.font_rasterize_buffer(r),o.length()).slice(),metrics:JSON.parse(a(o.u8(s.font_rasterize_metrics(r),o.length())))};return s.font_rasterize_free(r),i}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=h(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,r){e=h(e),n&&this.refs.push(t);const i=o.alloc(e.length);o.u8(i,e.length).set(e),s.layout_append(this.ptr,t.ptr,i,e.length,null!=r?r:t.scale)}rasterize(t,e,r){const i=s.layout_rasterize(this.ptr,t,e,r),n={width:s.layout_rasterize_width(i),height:s.layout_rasterize_height(i),buffer:o.u8(s.layout_rasterize_buffer(i),o.length()).slice()};return s.layout_rasterize_free(i),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},667:(t,e,r)=>{const{version:i}=r(306);let s;const n=new Map;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={Encoder:class{constructor(t,e,r=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,r)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,r,i,n){const h=o.alloc(i.length);o.u8(h,i.length).set(i),s.encoder_add(this.ptr,h,i.length,e,r,t,n)}},Decoder:class{constructor(t,e=0){const r=o.alloc(t.length);if(o.u8(r,t.length).set(t),this.ptr=s.decoder_new(r,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t;this.free()}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:o.u8(s.decoder_frame_buffer(t),o.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e,{env:{push_to_stream(t,e){n.get(t).cb(o.u8(e,o.length()).slice())}}});s=r.exports}}},327:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={encode:function(t,e,r,i){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,r,i),n.length())},decode:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.decode(i,t.length,e,r);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const h={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),h},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},876:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={rasterize:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.rasterize(i,t.length,e,r);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const h={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),h},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},76:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const r=s.decode(e,t.length);if(0===r)throw new Error("tiff: failed to decode");const i={width:s.decode_width(r),height:s.decode_height(r),buffer:n.u8(s.decode_buffer(r),n.length()).slice()};return s.decode_free(r),i},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},423:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={compress:function(t,e=3){const r=n.alloc(t.length);return n.u8(r,t.length).set(t),n.copy_and_free(s.compress(r,t.length,e),n.length())},decompress:function(t,e=0){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const i=s.decompress(r,t.length,e);if(0===i)throw new Error("zlib: failed to decompress");return n.copy_and_free(i,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}}},e={},function r(i){if(e[i])return e[i].exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file From 23e4081e94d7ad0074bb4d024df1f45fa2ca02fe Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sun, 24 Jan 2021 19:56:36 +0100 Subject: [PATCH 019/120] Merge changes from #9 --- example/index.html | 16 +++++++++++++++- example/runner.js | 4 ---- example/worker.js | 15 --------------- utils/wasm/font.js | 4 ++-- utils/wasm/gif.js | 6 +++--- utils/wasm/jpeg.js | 4 ++-- utils/wasm/svg.js | 4 ++-- utils/wasm/tiff.js | 4 ++-- utils/wasm/zlib.js | 4 ++-- 9 files changed, 28 insertions(+), 33 deletions(-) delete mode 100644 example/runner.js delete mode 100644 example/worker.js diff --git a/example/index.html b/example/index.html index 78b44e3..016e336 100644 --- a/example/index.html +++ b/example/index.html @@ -8,6 +8,20 @@

ImageScript example

display)

You can find more examples on GitHub

ImageScript Example Result - + + diff --git a/example/runner.js b/example/runner.js deleted file mode 100644 index 7b19123..0000000 --- a/example/runner.js +++ /dev/null @@ -1,4 +0,0 @@ -// we need to spawn a worker thread to compile large WASM (we don't want to be blocking the main thread) -const worker = new Worker('worker.js'); -// worker threads dont have access to the document, so we just receive the blob URI and use it as src -worker.onmessage = msg => document.querySelector('#image').src = msg.data; diff --git a/example/worker.js b/example/worker.js deleted file mode 100644 index 0e23084..0000000 --- a/example/worker.js +++ /dev/null @@ -1,15 +0,0 @@ -importScripts('https://cdn.jsdelivr.net/gh/matmen/imagescript@browser/browser/ImageScript.js'); - -(async () => { - const avatar = await fetch('https://raw.githubusercontent.com/matmen/ImageScript/master/tests/targets/readme.png').then(r => r.arrayBuffer()); - const image = await ImageScript.Image.decode(avatar); - - image.saturation(0); - - const encoded = await image.encode(); - - // need to pass data to main thread as blob URI, cannot access document directly - const blob = new Blob([encoded], {type: 'image/png'}); - const url = URL.createObjectURL(blob); - postMessage(url); -})(); diff --git a/utils/wasm/font.js b/utils/wasm/font.js index 46c550c..160f1da 100644 --- a/utils/wasm/font.js +++ b/utils/wasm/font.js @@ -131,9 +131,9 @@ module.exports = { async init() { if (wasm) return; const streaming = 'compileStreaming' in WebAssembly; - const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer())); + const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer())); const instance = new WebAssembly.Instance(module); wasm = instance.exports; }, -} \ No newline at end of file +} diff --git a/utils/wasm/gif.js b/utils/wasm/gif.js index 0d0fdfe..f75bf0b 100644 --- a/utils/wasm/gif.js +++ b/utils/wasm/gif.js @@ -99,12 +99,12 @@ module.exports = { if (wasm) return; const streaming = 'compileStreaming' in WebAssembly; const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer())); - const instance = new WebAssembly.Instance(module, { + const instance = await WebAssembly.instantiate(module, { env: { push_to_stream(id, ptr) { streams.get(id).cb(mem.u8(ptr, mem.length()).slice()); - }, - }, + } + } }); wasm = instance.exports; diff --git a/utils/wasm/jpeg.js b/utils/wasm/jpeg.js index 01eaed3..d6d6434 100644 --- a/utils/wasm/jpeg.js +++ b/utils/wasm/jpeg.js @@ -47,8 +47,8 @@ module.exports = { if (wasm) return; const streaming = 'compileStreaming' in WebAssembly; const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer())); - const instance = new WebAssembly.Instance(module); + const instance = await WebAssembly.instantiate(module); wasm = instance.exports; } -} \ No newline at end of file +} diff --git a/utils/wasm/svg.js b/utils/wasm/svg.js index 481e25e..854276d 100644 --- a/utils/wasm/svg.js +++ b/utils/wasm/svg.js @@ -39,8 +39,8 @@ module.exports = { if (wasm) return; const streaming = 'compileStreaming' in WebAssembly; const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer())); - const instance = new WebAssembly.Instance(module); + const instance = await WebAssembly.instantiate(module); wasm = instance.exports; } -} \ No newline at end of file +} diff --git a/utils/wasm/tiff.js b/utils/wasm/tiff.js index 838badb..68778e8 100644 --- a/utils/wasm/tiff.js +++ b/utils/wasm/tiff.js @@ -37,8 +37,8 @@ module.exports = { if (wasm) return; const streaming = 'compileStreaming' in WebAssembly; const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer())); - const instance = new WebAssembly.Instance(module); + const instance = await WebAssembly.instantiate(module); wasm = instance.exports; } -} \ No newline at end of file +} diff --git a/utils/wasm/zlib.js b/utils/wasm/zlib.js index 69c7154..4bb6d6c 100644 --- a/utils/wasm/zlib.js +++ b/utils/wasm/zlib.js @@ -39,8 +39,8 @@ module.exports = { if (wasm) return; const streaming = 'compileStreaming' in WebAssembly; const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer())); - const instance = new WebAssembly.Instance(module); + const instance = await WebAssembly.instantiate(module); wasm = instance.exports; } -} \ No newline at end of file +} From 75098b3eb76ba76104f4f2e2f334728b2c228052 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 24 Jan 2021 18:59:08 +0000 Subject: [PATCH 020/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index 7a51359..dfe1134 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),s=r(723),n=r(876),o=r(327),h=r(76),a=r(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return l.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)s=n=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),h=r<.5?r*(1+e):r+e-r*e,a=2*r-h;s=i(a,h,t+1/3),n=i(a,h,t),o=i(a,h,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*i)}static hslToColor(t,e,r){return l.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const s=Math.max(t,e,r),n=Math.min(t,e,r);let o,h,a=(s+n)/2;if(s===n)o=h=0;else{const i=s-n;switch(h=a>.5?i/(2-s-n):i/(s+n),s){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=l.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}__resize__(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(t,e,r,i))}__crop__(t,e,r,i){t=~~t,e=~~e;const s=new this.constructor(r,i);for(let n=0;nthis.width||o>this.height)continue;const h=s(i,n);this.__set_pixel__(r,o,h)}return this}__fast_box__(t,e,r,i,s){t<0&&(r+=t,t=1),e<0&&(i+=e,e=1);const n=Math.max(Math.min(t+r,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const h=4*(n+e*this.width),a=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),a,h);return this}drawCircle(t,e,r,i){const s=r**2;for(let n=Math.max(1,e-r);n<=Math.min(e+r,this.height);n++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(n-e)**2r?this.bitmap[h]=0:e&&(this.bitmap[h]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[s,n,o,h]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,n,t*(e?1:o),h)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[s,n,o,h]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,t*(e?1:n),o,h)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(n+s*this.width),h=t.__view__.getUint32(4*(r+i*t.width),!1),a=this.__view__.getUint32(o,!1);255==(255&h)?this.__view__.setUint32(o,h,!1):0==(255&h)?this.__view__.setUint32(o,a,!1):this.__view__.setUint32(o,l.__alpha_blend__(h,a),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,s=256-r;return(255&i*(t>>>24)+s*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,s,1-n,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,1-s,n,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(1-i,s,n,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[s,n,o,h]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(e,r,l.hslaToColor(s+t/360,n,o,h))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let s=0;s~~(63*t)));if(t&&a63-r)continue;const _=o<<12|h<<6|a;i[_]=(i[_]||0)+1}let s=-1,n=0;if(i.forEach(((t,e)=>{t>>12&63,h=n>>>6&63,a=63&n;return l.hslaToColor(o/63,h/63,a/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),s=Math.cos(r),n=e?Math.abs(this.width*i)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*i):this.height,h=l.new(n,o),a=n/2-.5,_=o/2-.5,c=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=c-i*(u-_),r=f+s*(u-_);do{const n=e+s*(t-a),o=r+i*(t-a);l.__interpolate__(this,h,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const s=Math.min(...r),n=Math.max(...r);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-r,h=(e>>16&255)-i,a=(e>>8&255)-s,l=(255&e)-n;return t=>(255&r+t*o)<<24|(255&i+t*h)<<16|(255&s+t*a)<<8|255&n+t*l}async encode(t=1){return await i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),2303741511===r.getUint32(0,!1)){const{width:r,height:s,pixels:n}=await i.decode(t);e=new this(r,s),e.bitmap.set(n)}else if(r.getUint32(0,!1)>>>8==16767231){await o.init();const r=o.decode(t),i=r.width,s=r.height,n=r.format;e=new this(i,s);const h=r.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const i=n.rasterize(t,r,e),s=new this(i.width,i.height);return s.bitmap.set(i.buffer),s}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,r,i=4294967295,n=1/0,o=this.WRAP_STYLE_WORD){await s.init(),t=new s.Font(e,t);const[h,a,_,c]=l.colorToRGBA(i),f=new s.Layout;f.reset({wrap_style:o?"word":"letter",max_width:1/0===n?null:n}),f.append(t,r,e);const u=f.rasterize(h,a,_),w=new this(u.width,u.height);return w.bitmap.set(u.buffer),t.free(),f.free(),w.opacity(c/255)}}class _ extends l{constructor(t,e,r=100){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof l))throw new TypeError("Invalid image passed");const r=new _(t.width,t.height,e);return r.bitmap.set(t.bitmap),r}}class c extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){await a.init();const e=new a.Encoder(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(~~(r.duration/10),r.width,r.height,r.bitmap,t)}return e.u8()}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),r.getUint32(0,!1)>>>8!=4671814)throw new Error("Unsupported image type");{const r=new a.Decoder(t),i=[];for(const t of r.frames()){const e=new _(t.width,t.height,t.delay);e.bitmap.set(t.buffer),i.push(e)}e=new c(i)}return e}}t.exports={Image:l,GIF:c,Frame:_}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let r=0;for(const i of t)e.set(i,r),r+=i.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=4294967295;for(;r>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(883),s=r(354),{init:n,compress:o,decompress:h}=r(423),a=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),c=i(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:r,channels:s,depth:h=8,level:w=0}){let g=0,d=0;const m=e*s,p=new Uint8Array(r+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,r,i,s){let n=0;if(0===r){for(;n{const{version:i}=r(306);let s,n=null;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}const h="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),a="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const r=o.alloc(e.length);if(o.u8(r,e.length).set(e),this.ptr=s.font_new(r,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const r=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),i=JSON.parse(a(o.u8(s.font_metrics_buffer(r),o.length())));return s.font_metrics_free(r),i}rasterize(t,e=this.scale){const r=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),i={buffer:o.u8(s.font_rasterize_buffer(r),o.length()).slice(),metrics:JSON.parse(a(o.u8(s.font_rasterize_metrics(r),o.length())))};return s.font_rasterize_free(r),i}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=h(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,r){e=h(e),n&&this.refs.push(t);const i=o.alloc(e.length);o.u8(i,e.length).set(e),s.layout_append(this.ptr,t.ptr,i,e.length,null!=r?r:t.scale)}rasterize(t,e,r){const i=s.layout_rasterize(this.ptr,t,e,r),n={width:s.layout_rasterize_width(i),height:s.layout_rasterize_height(i),buffer:o.u8(s.layout_rasterize_buffer(i),o.length()).slice()};return s.layout_rasterize_free(i),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},667:(t,e,r)=>{const{version:i}=r(306);let s;const n=new Map;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={Encoder:class{constructor(t,e,r=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,r)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,r,i,n){const h=o.alloc(i.length);o.u8(h,i.length).set(i),s.encoder_add(this.ptr,h,i.length,e,r,t,n)}},Decoder:class{constructor(t,e=0){const r=o.alloc(t.length);if(o.u8(r,t.length).set(t),this.ptr=s.decoder_new(r,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t;this.free()}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:o.u8(s.decoder_frame_buffer(t),o.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e,{env:{push_to_stream(t,e){n.get(t).cb(o.u8(e,o.length()).slice())}}});s=r.exports}}},327:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={encode:function(t,e,r,i){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,r,i),n.length())},decode:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.decode(i,t.length,e,r);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const h={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),h},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},876:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={rasterize:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.rasterize(i,t.length,e,r);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const h={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),h},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},76:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const r=s.decode(e,t.length);if(0===r)throw new Error("tiff: failed to decode");const i={width:s.decode_width(r),height:s.decode_height(r),buffer:n.u8(s.decode_buffer(r),n.length()).slice()};return s.decode_free(r),i},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},423:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={compress:function(t,e=3){const r=n.alloc(t.length);return n.u8(r,t.length).set(t),n.copy_and_free(s.compress(r,t.length,e),n.length())},decompress:function(t,e=0){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const i=s.decompress(r,t.length,e);if(0===i)throw new Error("zlib: failed to decompress");return n.copy_and_free(i,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}}},e={},function r(i){if(e[i])return e[i].exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),s=r(723),n=r(876),o=r(327),a=r(76),h=r(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return l.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)s=n=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;s=i(h,a,t+1/3),n=i(h,a,t),o=i(h,a,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*i)}static hslToColor(t,e,r){return l.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const s=Math.max(t,e,r),n=Math.min(t,e,r);let o,a,h=(s+n)/2;if(s===n)o=a=0;else{const i=s-n;switch(a=h>.5?i/(2-s-n):i/(s+n),s){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=l.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}__resize__(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(t,e,r,i))}__crop__(t,e,r,i){t=~~t,e=~~e;const s=new this.constructor(r,i);for(let n=0;nthis.width||o>this.height)continue;const a=s(i,n);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,s){t<0&&(r+=t,t=1),e<0&&(i+=e,e=1);const n=Math.max(Math.min(t+r,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const a=4*(n+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const s=r**2;for(let n=Math.max(1,e-r);n<=Math.min(e+r,this.height);n++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(n-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,n,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,t*(e?1:n),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(n+s*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,l.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,s=256-r;return(255&i*(t>>>24)+s*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,s,1-n,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,1-s,n,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(1-i,s,n,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[s,n,o,a]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(e,r,l.hslaToColor(s+t/360,n,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let s=0;s~~(63*t)));if(t&&h63-r)continue;const _=o<<12|a<<6|h;i[_]=(i[_]||0)+1}let s=-1,n=0;if(i.forEach(((t,e)=>{t>>12&63,a=n>>>6&63,h=63&n;return l.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),s=Math.cos(r),n=e?Math.abs(this.width*i)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*i):this.height,a=l.new(n,o),h=n/2-.5,_=o/2-.5,c=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=c-i*(u-_),r=f+s*(u-_);do{const n=e+s*(t-h),o=r+i*(t-h);l.__interpolate__(this,a,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const s=Math.min(...r),n=Math.max(...r);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-s,l=(255&e)-n;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&s+t*h)<<8|255&n+t*l}async encode(t=1){return await i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),2303741511===r.getUint32(0,!1)){const{width:r,height:s,pixels:n}=await i.decode(t);e=new this(r,s),e.bitmap.set(n)}else if(r.getUint32(0,!1)>>>8==16767231){await o.init();const r=o.decode(t),i=r.width,s=r.height,n=r.format;e=new this(i,s);const a=r.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const i=n.rasterize(t,r,e),s=new this(i.width,i.height);return s.bitmap.set(i.buffer),s}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,r,i=4294967295,n=1/0,o=this.WRAP_STYLE_WORD){await s.init(),t=new s.Font(e,t);const[a,h,_,c]=l.colorToRGBA(i),f=new s.Layout;f.reset({wrap_style:o?"word":"letter",max_width:1/0===n?null:n}),f.append(t,r,e);const u=f.rasterize(a,h,_),w=new this(u.width,u.height);return w.bitmap.set(u.buffer),t.free(),f.free(),w.opacity(c/255)}}class _ extends l{constructor(t,e,r=100){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof l))throw new TypeError("Invalid image passed");const r=new _(t.width,t.height,e);return r.bitmap.set(t.bitmap),r}}class c extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){await h.init();const e=new h.Encoder(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(~~(r.duration/10),r.width,r.height,r.bitmap,t)}return e.u8()}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),r.getUint32(0,!1)>>>8!=4671814)throw new Error("Unsupported image type");{const r=new h.Decoder(t),i=[];for(const t of r.frames()){const e=new _(t.width,t.height,t.delay);e.bitmap.set(t.buffer),i.push(e)}e=new c(i)}return e}}t.exports={Image:l,GIF:c,Frame:_}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let r=0;for(const i of t)e.set(i,r),r+=i.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=4294967295;for(;r>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(883),s=r(354),{init:n,compress:o,decompress:a}=r(423),h=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),c=i(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:r,channels:s,depth:a=8,level:w=0}){let g=0,d=0;const m=e*s,p=new Uint8Array(r+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,r,i,s){let n=0;if(0===r){for(;n{const{version:i}=r(306);let s,n=null;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}const a="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),h="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const r=o.alloc(e.length);if(o.u8(r,e.length).set(e),this.ptr=s.font_new(r,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const r=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),i=JSON.parse(h(o.u8(s.font_metrics_buffer(r),o.length())));return s.font_metrics_free(r),i}rasterize(t,e=this.scale){const r=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),i={buffer:o.u8(s.font_rasterize_buffer(r),o.length()).slice(),metrics:JSON.parse(h(o.u8(s.font_rasterize_metrics(r),o.length())))};return s.font_rasterize_free(r),i}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=a(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,r){e=a(e),n&&this.refs.push(t);const i=o.alloc(e.length);o.u8(i,e.length).set(e),s.layout_append(this.ptr,t.ptr,i,e.length,null!=r?r:t.scale)}rasterize(t,e,r){const i=s.layout_rasterize(this.ptr,t,e,r),n={width:s.layout_rasterize_width(i),height:s.layout_rasterize_height(i),buffer:o.u8(s.layout_rasterize_buffer(i),o.length()).slice()};return s.layout_rasterize_free(i),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},667:(t,e,r)=>{const{version:i}=r(306);let s;const n=new Map;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={Encoder:class{constructor(t,e,r=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,r)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,r,i,n){const a=o.alloc(i.length);o.u8(a,i.length).set(i),s.encoder_add(this.ptr,a,i.length,e,r,t,n)}},Decoder:class{constructor(t,e=0){const r=o.alloc(t.length);if(o.u8(r,t.length).set(t),this.ptr=s.decoder_new(r,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t;this.free()}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:o.u8(s.decoder_frame_buffer(t),o.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e,{env:{push_to_stream(t,e){n.get(t).cb(o.u8(e,o.length()).slice())}}});s=r.exports}}},327:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={encode:function(t,e,r,i){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,r,i),n.length())},decode:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.decode(i,t.length,e,r);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e);s=r.exports}}},876:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={rasterize:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.rasterize(i,t.length,e,r);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e);s=r.exports}}},76:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const r=s.decode(e,t.length);if(0===r)throw new Error("tiff: failed to decode");const i={width:s.decode_width(r),height:s.decode_height(r),buffer:n.u8(s.decode_buffer(r),n.length()).slice()};return s.decode_free(r),i},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e);s=r.exports}}},423:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={compress:function(t,e=3){const r=n.alloc(t.length);return n.u8(r,t.length).set(t),n.copy_and_free(s.compress(r,t.length,e),n.length())},decompress:function(t,e=0){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const i=s.decompress(r,t.length,e);if(0===i)throw new Error("zlib: failed to decompress");return n.copy_and_free(i,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e);s=r.exports}}}},e={},function r(i){if(e[i])return e[i].exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index f968d18..033b457 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","framebuffer","pixelType","format","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","Font","layout","Layout","reset","wrap_style","max_width","append","free","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","decoder","Decoder","frameData","delay","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","wasm","registry","mem","walloc","ptr","wfree","memory","cur_len","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","options","stringify","layout_reset","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","Instance","streams","Map","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32((~~y - 1) * this.width + (~~x - 1), false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new this(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new this(framebuffer.width, framebuffer.height);\n \n image.bitmap.set(framebuffer.buffer);\n \n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layout = new fontlib.Layout();\n\n layout.reset({\n wrap_style: wrapStyle ? 'word' : 'letter',\n max_width: Infinity === wrapWidth ? null : wrapWidth,\n });\n\n layout.append(font, text, scale);\n const framebuffer = layout.rasterize(r, g, b);\n const image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n font.free();\n layout.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded GIF\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if ((view.getUint32(0, false) >>> 8) === 0x474946) { // GIF\n const decoder = new giflib.Decoder(data);\n const frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, scale) {\n text = encode_utf8(text);\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, null != scale ? scale : font.scale);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n \n wasm = instance.exports;\n },\n}","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(delay, width, height, buffer, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, width, height, delay, quality);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n\n this.free();\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n }\n}","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n }\n}","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n\tstatic alloc(size) { return wasm.walloc(size); }\n\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\tstatic length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n\tstatic copy_and_free(ptr, size) {\n\t\tlet slice = mem.u8(ptr, size).slice();\n\t\treturn (wasm.wfree(ptr, size), slice);\n\t}\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = new WebAssembly.Instance(module);\n\n\t\twasm = instance.exports;\n\t}\n}","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n\n wasm = instance.exports;\n }\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","framebuffer","pixelType","format","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","Font","layout","Layout","reset","wrap_style","max_width","append","free","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","decoder","Decoder","frameData","delay","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","wasm","registry","mem","walloc","ptr","wfree","memory","cur_len","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","options","stringify","layout_reset","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","Instance","streams","Map","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_buffer","decoder_frame_free","instantiate","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32((~~y - 1) * this.width + (~~x - 1), false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new this(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new this(framebuffer.width, framebuffer.height);\n \n image.bitmap.set(framebuffer.buffer);\n \n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layout = new fontlib.Layout();\n\n layout.reset({\n wrap_style: wrapStyle ? 'word' : 'letter',\n max_width: Infinity === wrapWidth ? null : wrapWidth,\n });\n\n layout.append(font, text, scale);\n const framebuffer = layout.rasterize(r, g, b);\n const image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n font.free();\n layout.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded GIF\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if ((view.getUint32(0, false) >>> 8) === 0x474946) { // GIF\n const decoder = new giflib.Decoder(data);\n const frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, scale) {\n text = encode_utf8(text);\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, null != scale ? scale : font.scale);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n \n wasm = instance.exports;\n },\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(delay, width, height, buffer, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, width, height, delay, quality);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n\n this.free();\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n }\n }\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n\tstatic alloc(size) { return wasm.walloc(size); }\n\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\tstatic length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n\tstatic copy_and_free(ptr, size) {\n\t\tlet slice = mem.u8(ptr, size).slice();\n\t\treturn (wasm.wfree(ptr, size), slice);\n\t}\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = await WebAssembly.instantiate(module);\n\n\t\twasm = instance.exports;\n\t}\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file From 335aeda27b94c612ee670e38edf67572a0ba5948 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sun, 24 Jan 2021 20:04:05 +0100 Subject: [PATCH 021/120] tiny brain --- utils/wasm/font.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/wasm/font.js b/utils/wasm/font.js index 160f1da..b3ccb70 100644 --- a/utils/wasm/font.js +++ b/utils/wasm/font.js @@ -132,7 +132,7 @@ module.exports = { if (wasm) return; const streaming = 'compileStreaming' in WebAssembly; const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer())); - const instance = new WebAssembly.Instance(module); + const instance = await WebAssembly.instantiate(module); wasm = instance.exports; }, From 9f7f149f76d01834a3da21fd4be4b68370cf707a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 24 Jan 2021 19:04:52 +0000 Subject: [PATCH 022/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index dfe1134..ac9213f 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),s=r(723),n=r(876),o=r(327),a=r(76),h=r(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return l.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)s=n=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;s=i(h,a,t+1/3),n=i(h,a,t),o=i(h,a,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*i)}static hslToColor(t,e,r){return l.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const s=Math.max(t,e,r),n=Math.min(t,e,r);let o,a,h=(s+n)/2;if(s===n)o=a=0;else{const i=s-n;switch(a=h>.5?i/(2-s-n):i/(s+n),s){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=l.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}__resize__(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(t,e,r,i))}__crop__(t,e,r,i){t=~~t,e=~~e;const s=new this.constructor(r,i);for(let n=0;nthis.width||o>this.height)continue;const a=s(i,n);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,s){t<0&&(r+=t,t=1),e<0&&(i+=e,e=1);const n=Math.max(Math.min(t+r,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const a=4*(n+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const s=r**2;for(let n=Math.max(1,e-r);n<=Math.min(e+r,this.height);n++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(n-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,n,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,t*(e?1:n),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(n+s*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,l.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,s=256-r;return(255&i*(t>>>24)+s*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,s,1-n,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,1-s,n,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(1-i,s,n,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[s,n,o,a]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(e,r,l.hslaToColor(s+t/360,n,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let s=0;s~~(63*t)));if(t&&h63-r)continue;const _=o<<12|a<<6|h;i[_]=(i[_]||0)+1}let s=-1,n=0;if(i.forEach(((t,e)=>{t>>12&63,a=n>>>6&63,h=63&n;return l.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),s=Math.cos(r),n=e?Math.abs(this.width*i)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*i):this.height,a=l.new(n,o),h=n/2-.5,_=o/2-.5,c=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=c-i*(u-_),r=f+s*(u-_);do{const n=e+s*(t-h),o=r+i*(t-h);l.__interpolate__(this,a,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const s=Math.min(...r),n=Math.max(...r);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-s,l=(255&e)-n;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&s+t*h)<<8|255&n+t*l}async encode(t=1){return await i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),2303741511===r.getUint32(0,!1)){const{width:r,height:s,pixels:n}=await i.decode(t);e=new this(r,s),e.bitmap.set(n)}else if(r.getUint32(0,!1)>>>8==16767231){await o.init();const r=o.decode(t),i=r.width,s=r.height,n=r.format;e=new this(i,s);const a=r.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const i=n.rasterize(t,r,e),s=new this(i.width,i.height);return s.bitmap.set(i.buffer),s}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,r,i=4294967295,n=1/0,o=this.WRAP_STYLE_WORD){await s.init(),t=new s.Font(e,t);const[a,h,_,c]=l.colorToRGBA(i),f=new s.Layout;f.reset({wrap_style:o?"word":"letter",max_width:1/0===n?null:n}),f.append(t,r,e);const u=f.rasterize(a,h,_),w=new this(u.width,u.height);return w.bitmap.set(u.buffer),t.free(),f.free(),w.opacity(c/255)}}class _ extends l{constructor(t,e,r=100){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof l))throw new TypeError("Invalid image passed");const r=new _(t.width,t.height,e);return r.bitmap.set(t.bitmap),r}}class c extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){await h.init();const e=new h.Encoder(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(~~(r.duration/10),r.width,r.height,r.bitmap,t)}return e.u8()}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),r.getUint32(0,!1)>>>8!=4671814)throw new Error("Unsupported image type");{const r=new h.Decoder(t),i=[];for(const t of r.frames()){const e=new _(t.width,t.height,t.delay);e.bitmap.set(t.buffer),i.push(e)}e=new c(i)}return e}}t.exports={Image:l,GIF:c,Frame:_}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let r=0;for(const i of t)e.set(i,r),r+=i.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=4294967295;for(;r>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(883),s=r(354),{init:n,compress:o,decompress:a}=r(423),h=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),c=i(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:r,channels:s,depth:a=8,level:w=0}){let g=0,d=0;const m=e*s,p=new Uint8Array(r+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,r,i,s){let n=0;if(0===r){for(;n{const{version:i}=r(306);let s,n=null;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}const a="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),h="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const r=o.alloc(e.length);if(o.u8(r,e.length).set(e),this.ptr=s.font_new(r,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const r=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),i=JSON.parse(h(o.u8(s.font_metrics_buffer(r),o.length())));return s.font_metrics_free(r),i}rasterize(t,e=this.scale){const r=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),i={buffer:o.u8(s.font_rasterize_buffer(r),o.length()).slice(),metrics:JSON.parse(h(o.u8(s.font_rasterize_metrics(r),o.length())))};return s.font_rasterize_free(r),i}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=a(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,r){e=a(e),n&&this.refs.push(t);const i=o.alloc(e.length);o.u8(i,e.length).set(e),s.layout_append(this.ptr,t.ptr,i,e.length,null!=r?r:t.scale)}rasterize(t,e,r){const i=s.layout_rasterize(this.ptr,t,e,r),n={width:s.layout_rasterize_width(i),height:s.layout_rasterize_height(i),buffer:o.u8(s.layout_rasterize_buffer(i),o.length()).slice()};return s.layout_rasterize_free(i),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),r=new WebAssembly.Instance(e);s=r.exports}}},667:(t,e,r)=>{const{version:i}=r(306);let s;const n=new Map;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={Encoder:class{constructor(t,e,r=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,r)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,r,i,n){const a=o.alloc(i.length);o.u8(a,i.length).set(i),s.encoder_add(this.ptr,a,i.length,e,r,t,n)}},Decoder:class{constructor(t,e=0){const r=o.alloc(t.length);if(o.u8(r,t.length).set(t),this.ptr=s.decoder_new(r,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t;this.free()}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:o.u8(s.decoder_frame_buffer(t),o.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e,{env:{push_to_stream(t,e){n.get(t).cb(o.u8(e,o.length()).slice())}}});s=r.exports}}},327:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={encode:function(t,e,r,i){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,r,i),n.length())},decode:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.decode(i,t.length,e,r);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e);s=r.exports}}},876:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={rasterize:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.rasterize(i,t.length,e,r);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e);s=r.exports}}},76:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const r=s.decode(e,t.length);if(0===r)throw new Error("tiff: failed to decode");const i={width:s.decode_width(r),height:s.decode_height(r),buffer:n.u8(s.decode_buffer(r),n.length()).slice()};return s.decode_free(r),i},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e);s=r.exports}}},423:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={compress:function(t,e=3){const r=n.alloc(t.length);return n.u8(r,t.length).set(t),n.copy_and_free(s.compress(r,t.length,e),n.length())},decompress:function(t,e=0){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const i=s.decompress(r,t.length,e);if(0===i)throw new Error("zlib: failed to decompress");return n.copy_and_free(i,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e);s=r.exports}}}},e={},function r(i){if(e[i])return e[i].exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),s=r(723),n=r(876),o=r(327),a=r(76),h=r(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return l.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)s=n=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;s=i(h,a,t+1/3),n=i(h,a,t),o=i(h,a,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*i)}static hslToColor(t,e,r){return l.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const s=Math.max(t,e,r),n=Math.min(t,e,r);let o,a,h=(s+n)/2;if(s===n)o=a=0;else{const i=s-n;switch(a=h>.5?i/(2-s-n):i/(s+n),s){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=l.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}__resize__(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(t,e,r,i))}__crop__(t,e,r,i){t=~~t,e=~~e;const s=new this.constructor(r,i);for(let n=0;nthis.width||o>this.height)continue;const a=s(i,n);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,s){t<0&&(r+=t,t=1),e<0&&(i+=e,e=1);const n=Math.max(Math.min(t+r,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const a=4*(n+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const s=r**2;for(let n=Math.max(1,e-r);n<=Math.min(e+r,this.height);n++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(n-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,n,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,t*(e?1:n),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(n+s*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,l.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,s=256-r;return(255&i*(t>>>24)+s*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,s,1-n,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,1-s,n,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(1-i,s,n,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[s,n,o,a]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(e,r,l.hslaToColor(s+t/360,n,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let s=0;s~~(63*t)));if(t&&h63-r)continue;const _=o<<12|a<<6|h;i[_]=(i[_]||0)+1}let s=-1,n=0;if(i.forEach(((t,e)=>{t>>12&63,a=n>>>6&63,h=63&n;return l.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),s=Math.cos(r),n=e?Math.abs(this.width*i)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*i):this.height,a=l.new(n,o),h=n/2-.5,_=o/2-.5,c=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=c-i*(u-_),r=f+s*(u-_);do{const n=e+s*(t-h),o=r+i*(t-h);l.__interpolate__(this,a,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const s=Math.min(...r),n=Math.max(...r);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-s,l=(255&e)-n;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&s+t*h)<<8|255&n+t*l}async encode(t=1){return await i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),2303741511===r.getUint32(0,!1)){const{width:r,height:s,pixels:n}=await i.decode(t);e=new this(r,s),e.bitmap.set(n)}else if(r.getUint32(0,!1)>>>8==16767231){await o.init();const r=o.decode(t),i=r.width,s=r.height,n=r.format;e=new this(i,s);const a=r.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const i=n.rasterize(t,r,e),s=new this(i.width,i.height);return s.bitmap.set(i.buffer),s}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,r,i=4294967295,n=1/0,o=this.WRAP_STYLE_WORD){await s.init(),t=new s.Font(e,t);const[a,h,_,c]=l.colorToRGBA(i),f=new s.Layout;f.reset({wrap_style:o?"word":"letter",max_width:1/0===n?null:n}),f.append(t,r,e);const u=f.rasterize(a,h,_),w=new this(u.width,u.height);return w.bitmap.set(u.buffer),t.free(),f.free(),w.opacity(c/255)}}class _ extends l{constructor(t,e,r=100){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof l))throw new TypeError("Invalid image passed");const r=new _(t.width,t.height,e);return r.bitmap.set(t.bitmap),r}}class c extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){await h.init();const e=new h.Encoder(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(~~(r.duration/10),r.width,r.height,r.bitmap,t)}return e.u8()}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),r.getUint32(0,!1)>>>8!=4671814)throw new Error("Unsupported image type");{const r=new h.Decoder(t),i=[];for(const t of r.frames()){const e=new _(t.width,t.height,t.delay);e.bitmap.set(t.buffer),i.push(e)}e=new c(i)}return e}}t.exports={Image:l,GIF:c,Frame:_}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let r=0;for(const i of t)e.set(i,r),r+=i.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=4294967295;for(;r>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(883),s=r(354),{init:n,compress:o,decompress:a}=r(423),h=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),c=i(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:r,channels:s,depth:a=8,level:w=0}){let g=0,d=0;const m=e*s,p=new Uint8Array(r+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,r,i,s){let n=0;if(0===r){for(;n{const{version:i}=r(306);let s,n=null;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}const a="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),h="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const r=o.alloc(e.length);if(o.u8(r,e.length).set(e),this.ptr=s.font_new(r,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const r=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),i=JSON.parse(h(o.u8(s.font_metrics_buffer(r),o.length())));return s.font_metrics_free(r),i}rasterize(t,e=this.scale){const r=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),i={buffer:o.u8(s.font_rasterize_buffer(r),o.length()).slice(),metrics:JSON.parse(h(o.u8(s.font_rasterize_metrics(r),o.length())))};return s.font_rasterize_free(r),i}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=a(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,r){e=a(e),n&&this.refs.push(t);const i=o.alloc(e.length);o.u8(i,e.length).set(e),s.layout_append(this.ptr,t.ptr,i,e.length,null!=r?r:t.scale)}rasterize(t,e,r){const i=s.layout_rasterize(this.ptr,t,e,r),n={width:s.layout_rasterize_width(i),height:s.layout_rasterize_height(i),buffer:o.u8(s.layout_rasterize_buffer(i),o.length()).slice()};return s.layout_rasterize_free(i),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e);s=r.exports}}},667:(t,e,r)=>{const{version:i}=r(306);let s;const n=new Map;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={Encoder:class{constructor(t,e,r=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,r)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,r,i,n){const a=o.alloc(i.length);o.u8(a,i.length).set(i),s.encoder_add(this.ptr,a,i.length,e,r,t,n)}},Decoder:class{constructor(t,e=0){const r=o.alloc(t.length);if(o.u8(r,t.length).set(t),this.ptr=s.decoder_new(r,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t;this.free()}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:o.u8(s.decoder_frame_buffer(t),o.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e,{env:{push_to_stream(t,e){n.get(t).cb(o.u8(e,o.length()).slice())}}});s=r.exports}}},327:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={encode:function(t,e,r,i){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,r,i),n.length())},decode:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.decode(i,t.length,e,r);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e);s=r.exports}}},876:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={rasterize:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.rasterize(i,t.length,e,r);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e);s=r.exports}}},76:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const r=s.decode(e,t.length);if(0===r)throw new Error("tiff: failed to decode");const i={width:s.decode_width(r),height:s.decode_height(r),buffer:n.u8(s.decode_buffer(r),n.length()).slice()};return s.decode_free(r),i},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e);s=r.exports}}},423:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={compress:function(t,e=3){const r=n.alloc(t.length);return n.u8(r,t.length).set(t),n.copy_and_free(s.compress(r,t.length,e),n.length())},decompress:function(t,e=0){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const i=s.decompress(r,t.length,e);if(0===i)throw new Error("zlib: failed to decompress");return n.copy_and_free(i,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e);s=r.exports}}}},e={},function r(i){if(e[i])return e[i].exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index 033b457..ba1d314 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","framebuffer","pixelType","format","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","Font","layout","Layout","reset","wrap_style","max_width","append","free","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","decoder","Decoder","frameData","delay","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","wasm","registry","mem","walloc","ptr","wfree","memory","cur_len","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","options","stringify","layout_reset","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","Instance","streams","Map","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_buffer","decoder_frame_free","instantiate","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32((~~y - 1) * this.width + (~~x - 1), false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new this(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new this(framebuffer.width, framebuffer.height);\n \n image.bitmap.set(framebuffer.buffer);\n \n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layout = new fontlib.Layout();\n\n layout.reset({\n wrap_style: wrapStyle ? 'word' : 'letter',\n max_width: Infinity === wrapWidth ? null : wrapWidth,\n });\n\n layout.append(font, text, scale);\n const framebuffer = layout.rasterize(r, g, b);\n const image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n font.free();\n layout.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded GIF\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if ((view.getUint32(0, false) >>> 8) === 0x474946) { // GIF\n const decoder = new giflib.Decoder(data);\n const frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, scale) {\n text = encode_utf8(text);\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, null != scale ? scale : font.scale);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = new WebAssembly.Instance(module);\n \n wasm = instance.exports;\n },\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(delay, width, height, buffer, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, width, height, delay, quality);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n\n this.free();\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n }\n }\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n\tstatic alloc(size) { return wasm.walloc(size); }\n\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\tstatic length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n\tstatic copy_and_free(ptr, size) {\n\t\tlet slice = mem.u8(ptr, size).slice();\n\t\treturn (wasm.wfree(ptr, size), slice);\n\t}\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = await WebAssembly.instantiate(module);\n\n\t\twasm = instance.exports;\n\t}\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","framebuffer","pixelType","format","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","Font","layout","Layout","reset","wrap_style","max_width","append","free","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","decoder","Decoder","frameData","delay","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","wasm","registry","mem","walloc","ptr","wfree","memory","cur_len","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","options","stringify","layout_reset","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","instantiate","streams","Map","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32((~~y - 1) * this.width + (~~x - 1), false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new this(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new this(framebuffer.width, framebuffer.height);\n \n image.bitmap.set(framebuffer.buffer);\n \n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layout = new fontlib.Layout();\n\n layout.reset({\n wrap_style: wrapStyle ? 'word' : 'letter',\n max_width: Infinity === wrapWidth ? null : wrapWidth,\n });\n\n layout.append(font, text, scale);\n const framebuffer = layout.rasterize(r, g, b);\n const image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n font.free();\n layout.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded GIF\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if ((view.getUint32(0, false) >>> 8) === 0x474946) { // GIF\n const decoder = new giflib.Decoder(data);\n const frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, scale) {\n text = encode_utf8(text);\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, null != scale ? scale : font.scale);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n \n wasm = instance.exports;\n },\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(delay, width, height, buffer, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, width, height, delay, quality);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n\n this.free();\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n }\n }\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n\tstatic alloc(size) { return wasm.walloc(size); }\n\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\tstatic length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n\tstatic copy_and_free(ptr, size) {\n\t\tlet slice = mem.u8(ptr, size).slice();\n\t\treturn (wasm.wfree(ptr, size), slice);\n\t}\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = await WebAssembly.instantiate(module);\n\n\t\twasm = instance.exports;\n\t}\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file From 06ce40973e5e02306578b99835fc3d39125f279d Mon Sep 17 00:00:00 2001 From: evanwashere Date: Sat, 20 Feb 2021 15:22:11 -0500 Subject: [PATCH 023/120] update wasm --- ImageScript.js | 2 +- utils/wasm/font.js | 8 +++++--- utils/wasm/font.wasm | Bin 205663 -> 211325 bytes utils/wasm/gif.js | 2 +- utils/wasm/gif.wasm | Bin 49504 -> 53702 bytes utils/wasm/jpeg.js | 2 +- utils/wasm/jpeg.wasm | Bin 92972 -> 91769 bytes utils/wasm/svg.js | 2 +- utils/wasm/svg.wasm | Bin 1052040 -> 1069320 bytes utils/wasm/tiff.js | 20 ++++++++++---------- utils/wasm/tiff.wasm | Bin 187853 -> 190349 bytes utils/wasm/zlib.js | 3 +-- utils/wasm/zlib.wasm | Bin 44562 -> 46748 bytes 13 files changed, 20 insertions(+), 19 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index d7717cd..cdf01f8 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1252,7 +1252,7 @@ class Image { max_width: Infinity === wrapWidth ? null : wrapWidth, }); - layout.append(font, text, scale); + layout.append(font, text, { scale }); const framebuffer = layout.rasterize(r, g, b); const image = new this(framebuffer.width, framebuffer.height); diff --git a/utils/wasm/font.js b/utils/wasm/font.js index b3ccb70..71c2ff1 100644 --- a/utils/wasm/font.js +++ b/utils/wasm/font.js @@ -4,11 +4,11 @@ let wasm; let registry = null; class mem { + static length() { return wasm.wlen(); } static alloc(size) { return wasm.walloc(size); } static free(ptr, size) { return wasm.wfree(ptr, size); } static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } - static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; } static copy_and_free(ptr, size) { let slice = mem.u8(ptr, size).slice(); @@ -103,12 +103,14 @@ class Layout { wasm.layout_reset(this.ptr, ptr, options.length); } - append(font, text, scale) { + append(font, text, init) { text = encode_utf8(text); + const options = init || {}; if (registry) this.refs.push(font); const ptr = mem.alloc(text.length); mem.u8(ptr, text.length).set(text); - wasm.layout_append(this.ptr, font.ptr, ptr, text.length, null != scale ? scale : font.scale); + const has_color = ('r' in options) || ('g' in options) || ('b' in options); + wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b); } rasterize(r, g, b) { diff --git a/utils/wasm/font.wasm b/utils/wasm/font.wasm index 9899476ad6a824df87a02ab19ba1d4361fe6d88c..01fdfc810b01ef8f81ec9c587e0080c28d2dc5ca 100644 GIT binary patch literal 211325 zcmeFa4ZL5~S?9a={=dJS^FPT+NOJPB_Ra~MgoG0yBq^aKJA{`sP_SZK?F*n%+jA&w zLYis?aw-9%whq#$sElTmDRBx)5gkTp4J}r#pWYfB#$m3#eliw&Gre4g8M$5@nR36s zXRZDJ|If(@1UutL=i^Dv*=w)YXFcm#&w8F`J!|dgrrSOgM^O~dB&%;s4jhPXjO{l* zaAWDf9d|@G*7&QRh<7EEhqQ{t`Z!+W1M!_VmPsc=g}-<5B>Nqf(??hJPSM3Qm9%TCZOX5=ER9t^bn}Nk zy!VHasQj^8ZoW0Tv+}X`@4flv=wsE7-E_+>AO61R*2eokeCxg&Eb{H`TWW93#BzS<=6!oV_G_uh2d z&84JqNgU;I>%5PD{Nq2wuYL~3{`v8{?7N4yRG*2R911Z!u9-BeoA{TSG@jEU;9kz zbCv0|>Z-1;S}LwOl~sL>)%=HjBjsKrz&&-Q$S@43qXT_5WYFi9tK@g=1`U-wnNn+! zBRn+;p6kMMy^rU-yFcsZ<$c+;WUfzT=Lnc<85jq&dX(}*ov9tsmXd<7~ZS- zL@(rep(VXgw->61P)QXXZyPp+OTl%{RQf)uJ~^bSN2b!0m;czBO5aM~CZ^I$d6f62 zH{?-T&6D)Hypnzg&)xa6zxt&peY<~rCownjdo{n;lk*&&HZ>Nw%g>eA{me=Dn3SM}z9 zYOCGq)vH#nSiO4r*s`Uom#kiW*6P)ZR~sa*Wwm^fS}M`__;@_-qZ=0eG|`P{jsJ<) zv>35xqbob(pfaMT5Jzp-Sh~m6TzNX(+a6bjFOgyO>4- zj*=TiBQVj|zj2D++v!d3@Bw=?Uj`9z`F(NQ;@0&m>maWK`9FjzQdEqV4r_ zhf>q&a9&RBRkwZ2h-n))i1F^ z@qqLSz14V6rn2&`epEe=rKcu?tPw0^O#pEf&{?!V&hmUjoqmk2GFso~nrWxKq?JF+u{eC?S%s!?R4oOG}SG-R_}Ms z(wd}MXY!ful@^02U@>t1%YCSs)fDQl0R)%q6Y=Gxec8o%TOC$e=oiX_94!$FvQp3z zgrf{B6jRxEG0BajRU>OXV_<3EB4Zs;xE`pirRpH*Vnq>tw>d`Ja)B8W1$vDZauEQ8 zb%&&4-O*~_1va1wEw+j%2zU5(8t(3YL?dCeKes(GsIf=xd?>3CvNkmB^6D+wCO53U zZxS9rj>urs6SY@!KGCE&s%f#ALD$Ns1*yJ3CvH zb9Nxav`sL&l0~teFHp`}ewQx-d_%Mzi1u{!18$NkG_L|(672wrguS}(93DT9x0dT_FW5RK?j29@pUtDCa*<{6+sp{!;g_UomXVdECk^<|lZ53oB z4nZjO-C3;@QTyd?NQ-Gq#v#)es9tTm+E})-m}`+En4HRnm{51-2rEMpfL9Vq4~X>u zbBjJ-PMrU}tyTlJqSwwzOzoARSZz4ww%au^uN7PptodGBbPq@VkpnC%!)dzI@^-0D<*S#G1U4LjlQ;uqN;K z+k)o4U!AE0c*U=O1QMgR^sd+qrEA^FG;=G`5qEaF+Kr~`+*#>nW~fkj(P`6}FKZdZ zEM4hF80ppN*=`*avpGEr!AsKnpp5G!g*s4_au&$@+sr(_kZn#5^TKeOya{JtwK=)B z?T`_a7g3J9%qewX73)M=Cbkq}jZ%qC(i*W9i!Ga6i?Bid$*6Sd@`j`?@XAb}s)Pyv zv4XX<+yW`Bz(;A_4O@cOS?YO|AMC!;vL0-UpApcXC~r=lCLnF+33aKpIeA>qvRgH^ zIeApU`sU;q&;0&ai`}E`sqWP*bMgIg9t%c-KOd)MFfDAi`K^_<_c6!nq6tSYMiBSn zvi+1I0L`CmT-gC{@C9G(MJUH5aaFZ(kpw>Kex{9LgT(T5J8SLkzdVIPyR# zzjrn|?gIxZdoO5#YqnfVns0XF|56I@+a4!daeW3*zv5dQxh`ZzKF7D zHDmP`N{(4TmJ8K<#j*HO?HMDsCOO8yL|vQ<1G2_cwlIKoIv6CjsXYNWcObRk*2Vc3 zi1Wv8Aed7GK=Ae))+Et{Da1Ojc$PoNDEsPx>g!aOt?v-O4I!F0?PZi~Ota&L7Dw?&bA zE5qeNa^vFYL;(FcJr`|Gp4Ib$&B<}`ZJO1x_PpZSo0G5g=p597r-o}wQfRxzt$941 zErhoT;U(CaYh+*>LiDBcL&g`6175rPCUxpioV8_#B>2fVrJrU&d&`-uMnGw+5fB+; zd5e~!WV@QpXJ+$XOq(p zn?+NZjZ(!SsS98R)E4zNaAXS$=Iq+Y_y!?TiKzcI3BDpUvJ~|=^1?GxCMcwpwP44P zmr?tAJz0lXW{uhx25PU(Pwh2PyL$5FKBampHNK;Gvqhi9>?F&w!cP-6f+Kv4@Nrbb^kD3krgy_?(|clfVfv%7+nOGV z-J8=Ni```U<1BdTPsHxr^pmk$o_;EJ6X{RJ?!5G$!P3)vV|PLNQ?Xm0-Uqi&KMkKt z4|KOMVe>CeROvh-(Tw>Z7uc+j`znilf^W-;`nfI9zci=ih)j9{1f;T7qH zgdc5hi(d}mMvtdstC_LYyCzk2!nEHUfE30UI7d^c!24QmV z;?2oRLUfROQ8OW`7h7&|Pwpk}VlVer0MKL&2#HuP;YxaBmjxvW`ImK};$>OHO|sM_ z%PuCT)=Dp3AmplS*dCZG39)(r%!{q5?o|MgV2u`uz1%`%GPT8Osw?g#=B5i$dYD)9;=H|_1y)dkd7@i&~$F;=k6<=+jX_VL& zu2##Hsxbz-5(NE-`$WLyaPb?Si_EyWA^OM;-^XdC+rMSH46r~+miirV7si?;Iv zZ|#)Zi`49JzgdRFnuP)fn`H&E6jq?JxH*Gy6)}X%5UvkD0?pT_yrK9>R=IQ-w#Q?c ztdtUDSqxL#Vy76@7z%QJdyc{{_v{I z_i7GI#y5HmsO4Dpha~P^fjQ}a>VynJ(#>{!7V!#kLD|imo%)@goLqR&@E?#Da z1(=Jvct2fy%Rm>U@cbOSer_M{9q8jRhSV*_I7qi)_Qr7*KazbRcI}|+Jqs3K+lW@M zt{y*sPP8Iz4$0(nN&q?FcfIa1Pv+?^n&g>x7eigVCtEHNLLELzhku?$y2nY8DY9Rf zr^iPIdi*pikz0;6RgYVB5*}=q zEp|(Gb%vc4+9Si=uv;Rjd8?0K?6wjWs;IanTG59})Pt3ItJ>R_zw&BrD*x82wLKYX z(Lz)o)S{8RlrAT@_?k|$J<_5|OovNpC7w=~Gr1R*w!5WlKGM8$yXD3&8HS}(WT6cv z^Aso&7fmPKa>qX52+fsL%R=ooEp(Ge((StHw%FNqYi;dP07V13ka>Nn4e+GY(8&Qc zluZhHJL&oL0|-poAx(kPuETO`68F9jTbXMl{H^3K@YVslQ}m zSCSZoM!UludI)2{lkr2@vR&v24Gjo_iY?(w&R_{|xMkB}6|cBuh2FA63prF&%AcFf z>))k@P2KvQdGwZ9ODtB8sxXA&8q`V&0FZy$@N3W#ueh6iU+bh_X`C#3evR_!#flZ) z+%o56lA^m&56L~9r=mp6pN4UeJ1qqjbOXnr&NDBDt5}DyRY*&b{kEt2V1p_48X94< zfEF{A(mld3o`*M%j?{J1dJBNHvGG3;*3$g2G7RUk4e!-5KRM5J=W6CVnYL^u z#9ruQE}d&!t{j!iF~YuQjoAe7r{}r}ckXT(heM6aRHa5SoxtHs=FHRKgnFsqpCc!= z((BwJx1}cl6xv?Py(Pq5=zcB^SY73QJ}y=UZCuYFQ5V|aDj8gb7VmF-r zvJ}W)k;?fXYi#;2G25k|iQVVp^mnCXJ|vy-sIPgBT4D~!gc&63v825ADh2$hIB-Ln$pLnS7 z3;7FtJ344J^6}`v_kw=v)mS-onD%;eK7Iu*9AoJ@)W|%MpVCW|kjK}{dJdKwOV77b z>HFJl1Om%|f!_-KIhl(J{*%J93;r7II(CzPJw_OysM=_TqW{^#zU{wK7-8Z1L5r8qQL??L7e%{p+?uticj|^6+R-mH|JrCsRjMTWmT*T@3Vng7O-ri8Y7E@Eng;SxcyuG*;oKMI2iQ56U- zY1ui+mb=$LB8^G9j&29$d9he5A$H(2OsQxZ)bjr>ZKN>5s9 z5FZ3gk6yOolo7KktS-TdW^K^1G!d z0Oqe2!F=I#1oLFGT@7+suZwa_tk>f@KMAPwz15&HHE=UBbPXabtMu4YJ>Trv6CMT{ zq_K1ZUDAY8`0YZdug)XVk4p8l+^$}5yIyr`2CDl`Ko8Z4Jt>dKtuhGPSbC)&%#Q^5 zGxYKWIB+X6TZ{h0y_)_e)bx#0YkEBJ#NUi%Ug@I+hGWD~E(k%p?MCHt79%V#F>O3} zVjuLOQkwZYROCagH=I!P==#T~9_9ju4;ArZW@qG68_HGLXGWgt^BKug_#*WgjP`%b zd*q!xA0&CWptzaN_Aa?G&=&)T$suqiqVDT&8);i=w+FsGpHL^^%KNk+{kPBsKpq_( z!nbSB<))eL2F3Bd?3#Skb}|yl+;OT{9LS4UCWLLR{gyHAsq|mNfU!EIPiO;jbSnKf zv3png-R_$7D)-KGm&Wa?^cuG-eW&~G^j%Ee-P(co!-o@r&1*SaVv)44sJ_G`dXr~g zbrSjmi)N&OCH>TaRT|E5JpAy@W1N-W3D#T|DLKfg7C}DW*yN+PWIGuMFgljLNg}0Z zxJiImTs;|pI4KCR!T=b&Z!27TjJ?B;zGq(c(b=E98((nuHjUi(NR|EV*u5=%k9&9e zUN!rk^lk3F>AOM5_h?6PK5sMzsDeZWYsE7el$F$dY(eul|0{_sNhZ5fCK7RBT(acWo{7{i?(~EF+aUWqY@vw2-skAHFrlNuqBju_2bJX(r z`g4u};9)-9eduY7!3SFEpUwxpt)YYck`+&kZ>qh|x0l_Q~jitV0V4otVJ_9Fv;IZaP0e@7dM#O{%pk#(IW} z@~$z#JAbBv%anHkM=M>+N;QLL?+8!i_MTM#*X$*%CJyPlkh1gtO58f)kiUCze@WbC z;@E@g#eI{wjl{7FRm4dHID|z1GR8Vd>j#n0Ukc$F!Y_vKD^2vL5Pq5PNy7Ozs850u zdssz%`BCC>;&6BD!TgKF?I4box0ml;;?T4uO9gLa`b3=6LR@l-e1hpE+I!yGURyfW z+)_Fc;CPbw2SWT&;tz%R2Z=vOIR6pq!{#axv8XRUjw=MFW_ddI;5!PQJNeeB>@pIL zV`HrI5}@jE03}-tliAphnZVvg%tSv1JH-Sst{<~xDm#yup6_)Bw`+VqR>v&zX~o)hm~FsL0?WUtRTP{d(~|)qAhrdQQDr zz++MG%Z)AZ{~_Db%PDONCSVQ z23{oPJ3J;|Ao$av>`B5u6T;6E{@D=z8sT3I;pYhd^ALWP@GtqWyPxL?)%{mQZZ2BQ z{|j$SqZepdNIzJba`zTvNcg8hO|Ovcz7T$y@TWugCBlb8_(#dVu~+fkyixJVQ1Sh| z{zNgFgg+Sy-AnjWA^b_gKN-S@N}BHfEWG^!DcgHh{~T{r{d}nUab6F`+cZP+M+x5@ z3O!8to)A7t_(wzdLBfYZ_z2-23*iR{|F{oN#(!SNZ5MuDn#yr}RMk(D{BA#R#|Zv* zDD@=axB2MbBA8ib_dVD>ZRI)P>$w-v?h^sVPZIuqU*ZtKyFx_=3D1P^4B;OM;a8~j z5}*BLf*1MVO9b!q!50Z0@WB@d4*B3of-8OSd4el^@C3oLeei1pM}6=)f@k^Qae_N7 z=q|?*i$1tFZBD+TCtdpkp85R%_nQH@2hknQcDsGqqa^&Bknk|!Ykc&h1pjr2ew^@c zh42%E-|2CCjNk^J`x%03eDF9yyncoJX9?oFq~LP|@xD^GulCdML4vpV z*dqi#?1K*wywwNqC-@;Bd?J) z5WK?&pC-7?2agfF-3Ol}_`^Q~(C)jSaY3hdkzABKU*8j_<{dM@9dZsAWZ8 z)$&35`8P^AT%B^)`*QaY{9KrF_Y!`rn0|ym=)pTg@B==0kl>?%FlPw=fN$|wyft}6 z75^-8>x(AypXQBbX99X3<+b9``!K;veU(QEvi~7MeUKndLJB@W@Md56`J0m?RWNc6 z?$kUd<8R?7PnNHc z-u>T?J{R4&BmJ@L^YL3O@x|Iyaf15=w!0ty>=&7Z8c-f5CCq+4-l6(#-%>g;@OpRV zPgS1y#?P1UMi$%Ay~iGFevFLI)iBhu4fjMTGxgWZ);j?$Y(}z4AkB&#PnJ@99xJ6g zMJdmeP8f_pv#W!6Tn7Lt?9R%a;-KfTgae*A zncPk^#j&ia{keG!8F^WIlcdjcMhJV8e3#)38}B*jsjsA6Q*T4SEH*Tpv`VdV ztKN!RwN|wfwOaX5Iu2&t_{Gs*ne)iS(SOymhLWf!lkWvRaSuE>gmF`Jqd`AScFTs& zT}8+4m2T!$$M5d3ygHpWi8if()z#cNv<;5ft*vabU4aQ!CKMQfE;@kYfOb>gT(yhg zU#OL4j^_ggO*VmF6Ocaq^EL@o_h6#p=!(u_4UX9fu8+tU?x(NpZA^i5>@Nl&ra0Tg z9g?kN$Qv0$=4>dCA&14rC~1d;EBUudW{pv&JXsEj7SEz(SerjL1GYF0rlo=*%hTx&dOiHW5k|p5{nyvMjYM5fyYKz7X zWUbq@F%ET@>D5lw07GHJ0v;$p26>2LH}kmcn%D5~H8e#EplFK85vaj?Lw}ppfT5ap z=MsaE4jurPi3p6?jX^JlY#TrkD%NZO53gks(xE(t)EV^s3^n8&jyr02%b=+2&cdw# zyqbBc!q}W<%EAj6SWE4h=hz@BK#~EP>cRx^^dmyEzfu|-G{hl29vJ z)t+O_q|%XA&agSj2~`f}l~qmEpRb0_SqXAcIs*eUx3jgc3kV1%qkKA<(EXjwQ#Um; zkzpU#qG8wEB_uj-f*qn&*lJ7`^~t zHmDzBd};F(#$NM`T};|8Nb(G*JcqHXJ*Gidz3KWz;cRtE)^}Jr?qp>l8OyswJOEp8 z3gb}oly6CHK+mbA9nkS8hQw-+M)f$#F?S?M$&jSV)Qgma94rahR5dRlV{B#T_#A%0 zuMmqB81~VvW^6;qyjPUexmGoDYI%wzaw|BeUj+`G6}=m4(CGr!!oh;F@Zzt;x-0=2 zkr}j3*+nDA{OgXgkF`sWEFA+T5OYI^yRf^L$1kX|6=HypFe!r_^zMN@1xP}+kck7hw`7f z>`#YxZ9hzS(`7%MVr*?lSK$os%qM>2;1BLe$LYn>NM37sYFNbN&AIG9@!V`UwA0Cd zM2|O-2NPp@vGQ`DavM(u!VFl)O}4`PUE{6+;!jA%^5+%YIP}7(HQf?iJK0>shppk7 zzyZ&0(wVGmOSp#!2rPg*jyC8ld>e}gq%^&Ut6#{gO)|R;V4OHNuGsOk8Z?-fD#fj3 zeUW{3NSJ%E;-_XMKNe}S$~Vz(u`>nPTs$x0blz2dm#nJ-&me1?H#fQv6X?`+%q9>J z`|Hgr`IjSQN7mbU%90ndQtMYr;t$BoU|w?p^GM+plb;}tQO+@>^x{quCu2YMjv|gX z%qRACyq(;Es6)L^RJ0MSnqSfy9jF?+xz|04S2fW$vcxQV*JoB?#WUt=v zJW~wM74r^{#I)JNqoJ5PJQ|9*!z1Is84SyoSc!&83a!^7&yWE~hDP&DuGz}p6g2OQb(utvf9{qUT6 zxu2$l`Jh+wKPX1#s(BYF+=%9kj5kHiDL^J%YmObm0~PxWO}0} zgWJ3#Q`N|5R&Sr?kLJybU;Ug7Ow|v}_AoFz`vX&d;{(HWh2oR_c~kE#`}bEfZVhAW zU7QxIJy6Y7dN$S+3+o9Vln#ncDiYg$ukbaCH}#P! z;_s2Wp?I`FxONrhMRBDd{;g91#jvK|Ko4*gkK(NX#h3I^Tz%sxMoxp)2T*JWF)G|s zV@wBR&U3?z)0bJ4is%+R>DkH$XYgvK7?42>&#XvBg(FB)q?qkv66eKc0yI2!TeLYf&sBYrdJnV_+$wGuSeu`?hLdjm+1CTnxh zI3FusIS(4Kr=1BkN{J+=sIfPxZKYgUAkNS@RJ>_7YhE-OE7qET)YhBuhQ`2&CjuJR z_t98;<7jN6=+5HAxI)&RLRP3gB`d~LT+B4}So%dYtH;u(Fh@L=ehJz0F}#E&-)kx# zk=BD)Y4XMMwL+GV=!~-+V(mZ_o)}`VFV%YP4*4%qT=@RocxprcJYe!Q4Dv_d@hA|{ z=h+0|j1xTPxf&M?#SCxM<$5tgOBP9MFkGWGM6~KBzP)hgUKP>M+q}QX&i~4RHmJXU zDB%Ixpid_w6btk$O;X#F1Y9rFOG9KU_(l?vt;u_MquO`z_C~ z!Gk@QaUQ=<&64Ns5I!<9W`+xFSM#six(+4+9_StiFXC;{O>)p~ z=KiEtH9RZfiO;;9{0iw{DX-^W;r?fE3;x?K8XGZ5Em*l-$sbCYBPuss^#l3VJ=1x4 zdNRh=?K;xR=;XD+H)@@(gw;)HT9eBew{S9*CgZPxdaQ^({D>Tf{Sp?NP$Pb3FvP0swD*2-dPEBF(L zs;t?$fl}2fedxRlGx<;e8^xcUZ3f+&+uXKN>W~&IG>bjT1U6C5x^(Wsh7=iu}ECse&!y z`x6ddnVEETUgqAzJyQCS0NjYOj096cHX_xC$X#QmoZcdxafB8}m}|QEc6C0il5pP& zab_s#qNC}W0#sP+5okejb)+NQxrvv()G@9t#QqHjFQdret5@5HCh59+08b*jbPjr@ zFn7MClGKFUj3(-)Ev!-Ro!J1^CF4>DF1?RQcOPTe;`xTO1rJ5!h8QtZzqck!g6wjn z+9SkAQ5<`O_@GwlzehrR2|Axch@*1|adZwLj?N*((K&=TI!K74gM>KxPlWiIgvhL( zLx@WPAuj(m2@&eUVm(NR%Uf=nw?S=VhBN49mNDt+}yl^-%0sFSg=Xz@q5&4@;yRYjI;| zmKP}$aN%oea$k|aQ_>vK})VTn^_GG7qcgjG~_GvTY8qa#gFS*#Z`xAj^O-gUDD&gg`6rMp82t(4Jut+`=FX$K+&0Vzyw0s-CnC%#3S@^K zGBF^tStT-N{)orv?9c!i7qiM@5%F!N%r%5idiE|VR9g?T>UHyKRsm2t3n1eV0*Dzz z)1rRn6%WlTjyQx^0W|LhHS@}YaGKOs#_=IZfwgOR*j%zX#jQlM<`mxNjDw$92x)FL z+7|Z-_GVOBXD~|$8SX0lK|9lgm>yj98_Tz~zw_=jx9c^CSoVA!FOV@uUfgq z{H0jNj=(CSZP9-g%YeYFyAb*dO6QiRlRS;R!{W8{o@j=5v3Rlc=ZFYP!?Of=G46g` z(HQL*vncnMKdtpE`C0%J1mZ&60`(;L-m#I3ENo_79R2UYKR9l(L>yDN$`uSs6V^Gi zYPe<`y51RSBrMkdnX7^*$6lSRqoY&n*d9TLmrkzWQwp{%cr4bcye_F{Uy{gt;J|y3 zK8$Jk;8Pa+s$#$BgYWK?b>K~Y5LTpTljp6+9wVjkR@mgfG>1KgHhN_TS*xWDloe|Y zj4?<@22`&sZv*Z6x1!yrC>t1BC~LjwmE~=qtbZ%Yevz`l!W7B|#|*jO?Bxnh;}Pat z>T2djW`1cH>KLa=ncY%k3TCg)RA4MIHYqixuiI&8p-=n~{On+`E|>XzB56w==`Cis zIU6PBMxj_>^G_tb3&freBFG6nA&Wff?ljLdhyk|yZINr4ru-ep^N_19J2ra#1iO!? zC0H``2v&wq5xNN0A7u0}{!gM)EQ0?;r>{k)3`V6>LGI~MDJM}8x7P)G4?NJQ7WRr| zLnfd+@^s9y6cP!rMcCjdD$mCo9IWQ~aDyuzcphz}Yv2=v9&N}Nh)&VSM)tCWt7#Wu zOZ3m*3(u#+^O)`QkL1;T9I)FkmFgQJgx4XsrJR~ummF)L<}2`YBYoNe&ot8Cv%psx zGEuH!lVXG1|FA*nt~B$VsJe|(p{s17Xkq09r5vor#3I@B7AJlQ2Re-Z!RZ2$Dd<_V>MG%FO>SDw$Ygti1D#R3D()U+N)9!qdv=gCx); z{;M!@qk>Nq;kL#vm1eR^1L`7yz<1o zVvTmf*K`+J5bUgR>$G>@;;@)&^rzFdsTdfM-)T>~FD%fBZY!G@k zxYbm^aazJ7p@KK*Tr;+&d98=*P7^P$5wm{^ouK8@pmHlA%rW5AB4m7JV1?bMNdGdg zvZmTlymxc5#8oegqM1wi6GcAuhO9hhW>i;Z+jw)rKE0}IGqj(6QqbyZFql`{$Cqct zbMG8PV(X>V>%JWSG{08;yQx;D+wvDg4C}uDupS_pc?}>Asx1!ysh}Br=Yn^mfj6#t z47^cShXx{MCy3{Z2&On2Q4dLlwyP$!JOy>TEMMkmoV!{T4Zr%3Wa?9u37 zm_c#3!CH7Id+4g07 zW3Jo3JLgIBDKvvbi5YUJl9Vdt2lf#`MS^}!>lT0i6s!4)& z!6qh_)`bf1%a~#OtMB4Ejht{^$LX;Gh7*dh*r7~e&1cU1mKCcDTY;_)AcM>X z%$$-OfoKzfm@o(ay6>cVgCsR`%=3waf(Z`9d65~}*^n!}gqme-4!I4=%K;B4=bdTR zO}@itR1`UVyFwjLFwJZ8Ov&_>8}Je;z^5kJ-B|#Z=xbR~4v&fq*aRPaP3UVhx3Bcd z`l`B4)7Oad{l01+N9}^BiDYhHVbJQKK-Rg=9>{4TD5J|e3%DZGk6zKO@<6vh9D^Q< zUse3YxS@-X7j~_w3{ZB_MdsQ*h9Kf!LKgvvUaN}{T`bS-BHZEix=39ET`Y$4jdl?z zi!S0gC-~%P#kF-bOUHT`SYN#~_`QWHc!0yz!C9d1=-eRI_qCPJ8 zeAblos-N0jDce&!HgT3BfkQ-u54_XHW5dPKQOGEjY~orwqPN2fL5eOXOvcz(O4t%{ zd`FO5nhSeg{h$MHe1>dCa!<*FD*(UZ(aFpZy|u zroy{_`8&DEVLzb*S59Y4TJ~Gu0@J9NnV?J#W}WU0lsiOPBR{5cKDF(9!pm$$!Y8zI zm*E@95whfVP9ku@lA>J44ZY)$+i9zof9^m0=7C!{)G(c2f@LYfgT4EHYJS4@Y2b~I z>^N|@Yu+9jJW4conuk{Og^_T?+qZHwo~IRG;mJ^8(*S=i)Z^ct8K?(7wYKye_2}w9 z4=uX4ptX89Nfpb*j|0}RygpIMW43HH2q>gU&YkPSI}W(yk$Vj8yRO5-4eAC}w5Y*) z>SXzre1ULVdaL%cgxLK4XTKO3uG${EEd!F9-|1{UKT@Q2xQJV5*Dc8fc2SDfmVWSd zzQ|F4JLHB1Zp|gr;P($d^9PaeJC(oL<2Nz3@HPo$z$w69#b6foYAAcPtSxQzsI7a< zegMSQa_-*eqAb^ZXd2v9W**9a_!bQL`2l}ofu$-f4p??7PYphHEZ>Xu|?);*FJJbI;5N40(R2o+>!-6a~tHo{S+ezs|(`nkn2(pO}p|Q zVo}y)M~q<&S;57l0WLm^^lLLWf8deBjed^y&z9WTW!T=+-Sh#;rbw3}y4PXdHy=D+T*k+i9ehoBa z4Qn8pw*g6~N#0Z?R!F-l^hbqeLn6_K)fSKFevXY(*uh%)sCKdwTkAy$eF`W~Uqiiy z$EvREk}M*J-`!lY%VL5>lqlqKR&HjLW)&-U8Hl`aab&hJl_ScESWP zu1cU;zymgfG6b<%!pXCV_kcT2rz9Gp-_0+alm(?NeL*-mW&GPaF8$H0i8pim_PhU= zCx!tEIt?)lZA`%c5$_O05Bx3rgiJ(s`^`?gD*q(R06OFZ}1f!Pw07 zFB$q}UILSA?zoiQkkS;Qzh;*>-JhBPUHDzk*t1w)! zkBmT0j4S`7`OQ{~PD@Unxt>PLosXQ}s9FS+OqyYRI@G#m+_)HPb4je*yphcTQIW8^ zDEEX^pQ06mH$Lw_==vJt?KMA?_(x594{Dz(nqRYpVEcNl*JjQ5c`{+e<-M3H?3QWa zX!sc;VAHYyGgiQofuuE++ZU&}PLxzn))+2b+>IHbCDSRAHAK!SQ=F?P%DBPm0$FH; zXH5vXNWk}|!Zg!<<}1x8G7&3eq%A+o?RDM zS6!S}j}Rh;b~IIV90>|1DRzDzc%C z6?u_ZZet6neS7FN+s{Kgo|mKta`YSqJ78wm4bfCP$^v?j^rrIj zcem7e0V9E2aK59wz2B2&CVZQsYgyXpG?vLcYaRk};ST^)CREc6e}_u|t$915Vb6{8 zfYBn|h~6gL6sMv<7F!4$3>*RJufBTMw?6Y{|8e9UIwa7wh@bn+H-G)>u|*79#L2rp z_h*akeMs-W`v-q@@K+Lh*RZ|%ONamEr&idjG`&~<@K3+=l1~M&9k2fWuOC@si3m(P zUj6j{{k4+4as11Rvud}lmxuqnY$>=l@A%z=Z?-U}!*=}Ar>YjN5dLRhjVvr-`2VU| zkRzEpzV2h;e!Mi^G1kgp9o2l~sxi?IItrqxZb3!ngS>Ndy@X^T%2i);E8Xg6k$G>hQcg!x%Q5w6R38i7%F6H zUIjEszL5#64I3)aO!u;O{%a=+Z9t18TaG}c)++)J4yM{@CO}4Q6;8X_{8l|=GVrvz z7Rzz|=+{(b4)cKJh`zmH#K78{CwqYeja|QQ#Q|a3fb#fYl`7h#Mcw~UG5L*$973U= zWV!`*z8<|5q(-^ju#LG6=Pw~A;rpUw1SqLyAxv0lSRP zL!nMqGCi{HHzA>t>XH<9Cilc)V$SlGvGllXsIXqr4&n+DaLlT;w8Kw4kHc zTh}DbYO(!W&E7m_UYi7pYSCM&S;w4aarA&rLo?+feqt)ik zX@xFrQ_L@vFbiQ{es;{WwP0=sCumfQAq+->$$Tgi=pkZ!IrCzxNj8p~aZBRB3D@0DF{0q{`oOP_pwoG9Jq`DYh2#Ef-}K z>&!t6La?Tic6kWkw-MkKIJ?A}O^~B7v~Y;4TS6y|BN*Rv3Ews@$zqWay065oN5~Eg z5MK0DTG47#hM$3Md2fm-`!3TRxEhMDE%8)Ozl$i<0WQ5-q|LraU4iEP4j{N^aH(Bv zKzmjA`YWX3tPF*KTv5+VK&IbXRv9j@DB>eh7$OKnF_Ix&nqBnb#8OpJkaN#OhhTP$bFmyx(jRz;vWSH z%rRje6o~QA@r$)y4QdATdWm{%>H%mymN0|3!aIRC@%pf*O4Bb)d9HQfVTOq_RtBL4 z5yC%IWl)w7Ps?za@eFv?_^D!~4iSxx{5STY!SeYmPpKmLzI*{Bs zbO&43M@FWz)_BD1^PW%K?=8`fxrNMuX#>5bm7icsUM`DB=Vfkhsg{bLlSQq_t^x=T;#kUAK+jSHxd5^Dt zSItp2k^?&H(!jYWF+gu|PsK)cM#9!EdEfglwcwnRuJgfRKn>r_)#o^MUrfSp$5O?~ zxrapj6nM0}%RZm#co*!A<+O7;7^bqJR9MjR2j85^09(6he0fFRbYj0PA%SI=0fkuV z`c8q1Qz?uHHV5>@-(d=>Y2AbcZ&XeyN>Se1ZXuOW0XN56L9QIx17g^x;d@t8_DM1L zFFqp;$(P-{9CEo{u8KE3Fqz1Oh|YNONox%zL?%fl^cX%KV8^)ckr1<#v+ETrSKCK* z9`SdYwKW(}>%d@`kELzmb`L^y)IQCuQGb{QLI8xKd!!`Mwemv{uH9tW(h0~ghs+6= zO_)HfEuEIs=}Hwi($DpPfB?jhGw}TT_A_f8L=%(2^L*k38?y{$QJM_}Ze{EQwhi~PF zd5-XWk|!So&~at1gyC{Wo{M>Mw3)9N+6<*1>!;Ef@Rv`eB_0p}`|QTXEJ^&8B(YPH z^qHGqgjeZY8MB5iKlqnCyCeR78yra;4+@ad&gM$K%+dt!P`Rd z$}v8RY_g;<*>#K7`s-+!3A!78kCSWKb5a=3&?t|tY_ajX z-c8=epP@0jw85Q!AAbnTc@R)VGT9KzOg1Wp){>uD)V)rfn2aY7Wm!0xUz72=Y*eev zs4-NX86F}WPZOu*1js~#{Gn&^l_NyYLLcebS-xjf%W+aQ#A#CXN=J9CV^+xb&ax`w z5;-+Old97rk6nLgk~JH2Sm?M2NejA8R=Sn6ELy3#cAz7>?P^ts=HpF)C}g*GE>J99 zWg%M9x=TZ}5zZ4`FAlgh7e{|XTkhXfZCgVi1-YU^%Jj%_=>k>CN+Ap2qyb`w=}k z3u5D=lUH3vZyo1AF3_W!o+ssq&~hT8eDjo>(5Oa|7S8b@&R$<2$3n3dcb*R+cgVR; zYh7>HY3H8?2IRxh&Uj$J?VN$xAK)j)tpE+`QwU&u12<4hnE&yuIbk6=7gr(po<-r0+1~Das0tnSa9ouc44=L%;u!ql z`?5)o7+Tp$E5P1M0ol5FA|Pop)%78QrjH~8&X8p2>LbY#PK%`T;P2}7dG9+FNlFtE zl@<^&3rQ-eH1ZWlQg%aT$Bjc((6#sJ{F{+k@fJ?R7zSx@?8Ki$CXmG#6#ofE{XR$s5-*J9MHatEvm zlmhq9>@0Sq@YP=4198_wJ3OvqIr5WR zSXsyN&|`5>o{`f|x1mRTlY_(uoz5aY<7;iPfI;FjP9hdy$;JW(iI3?+GsZRo#}KnH zKH*u!Y!+}ntf5DIMu`RAw^iW$;>{DEX6O7X$lNu9&a3-=9Wqu)O*Y|uyWt+lVU)lvP=AcY)zTqVZ~?MuE;IZCR7@(E)XkL zz%T0z<`p_sM2wCoiiWkLpamOyqz2RT-<|2eu&sx+!#C#T8AbttXY_{6XyEjm`@A`v z`@DHMw}wrl1yCFLh}ghN#2ZUVf$VvBhSG&hKN$0@aMU?rwHP_Td3mxTSiPa{xx;34 zhI&2cR?OU0Hw>HS+=Igw(0jc{FRNsKR{RrsnHAqIdc6?Rm!v#h{^JohJqr$O)gCZn zNl=?K;cY@AlrA6fn)Up)Bx~4VOT@oh8%D9St-b}%5rvC%Bsw-e3Azn zcPcXwZ5@-|d=g`{>C3ZJU8%4nqEvUWKIkeK<0+VlFjr1l1@q+)NIjF7TEPY)lNg|= zF8)5D8U?j#J;Bx0x(kQTyvokr#Dsta3quq)8#l0`*by@s9x&LH^O0RJHD12eP0bqd zN|!BP)YzB1=|y_J)aB-5o-cN}@|fof-E@ndC%frZJ)iHUZ(*IdS{a{RkY2(f0D87^GBFr)2%JxT8FM;tFAO;AUB?@9Fzjql*iM3S<3Hai zlqsjHm7tY#9)kORgDvM>er?D4HyM9VW}n9LmtbpzI+&b$wj5m={6;#byM)b5C60&X z)r!y8I~D_V?J9N6%n?_!x)bJ4uXh&=^lsx|?*>3z03o6Y+g66HWXnCPT|%v}`%x<7 z(M>PZqwST@dU`(NKNQUG7b4ee^vfJ;@nMj-@$h}pz6ByER?LOsC>OX%BZtFoqjd7~ z!^?%z(~(X5tMuIS-G#*q$9K&H49!3soNO&!mwUmu+vtBOJi-4X4=*`NDY$Tvzh^TCsnZ-_0juI1U4;3{ z-^boiua~$sAgJHe$F)x~R-rWWtbZdX zpY-I6t2cge50s2tRC_c$`6jB4)0S)}7k*+kN-(btfNTK}Fcb;kM+(lm1q1cgL>|*bau-I;-dHv5HP>DOkyb{20cpHSt z+z$j3yK2CstsFCBz0IihS)mr zakG|%Vo8v9C!LomUDN2uh|VVuw|-$uDLqiSGtnOJiO7y6yArnJ9cBzJP60Y3$2C&8>)d za;ux>#LP+5E}brW3tTB@!)gL3Fw>UuiK*_pxaMB!;%ooI(d19fL%N1blL$6c0JF|t z`iWyvcRAJ2_Y&t2=@ZMPdZG5!dP(;?T}^~aZAKqc%lv`qc5`_jtY=;1f#v=Ryo;e? zZJ|cp8}aU8AF`C&rJCugdCDy+$}t@l`Rt2)@px`=Fnvn1RPLMA(&LNcNvqbA!Qw27 z={fThUocR7fiJ$m7cb2%E}Zu|jpL9y&7qZE>$otfujUO@?ib!V1qHIlR>Ib;kUn|f zv7swnPN|U9Vs@39k*uqE#j513sAzGoqDIe?HxPlUxGKYiz0SPiQO?>DWJ)Yw0)cfv zkGhE(x-hjM!=dpgs#N$t_h&Gwg!i0x+13pT_{F)fBI1hTZ?aXly6?ipG+!^zpAFH~ z5c8ZOz{4CEY@DqW<^b+bZnQTC@UQF5fmtot9Kfs1w}jtm4Y&9!2TfbZGEd3ecoBk;dyf!yf^YCLILc&NDr7+lJC!-J;{lYp5;wR~K8qsAyM(+lR@u5gia3BE ziKiVr5T`56Ue(c_>eiAwi;*vH-w~&4Y-mdtCF}VPp^?f&vaxWiFNQ!R*gTmY>PBV% z6DK@N5iPIcg$2R`425w!iGY5vpbC+*^ZgICH{wAqC!eUE-O*CX~|!=WC;ZdE@1^w&nUSmP`IO3L(*vOK+d}$zxiCEPHrWB2#L|%n+YFq}O1sm7dLlLM&;5R zwU#9*tBj>hoCN@3433l$;A?Oe-C;l9q8n~CfdwIYiCgZYb^Lmaiz|~W#?l3ZmpSGW zVF)1%+Aq+zKv!HeSK|a$tq0hqFr3yt2kFCa!VdTHwGn)A5*Q7n}kA zoz0s|_~gu<9F1afl;+Sq#}5Z{>gqUzN|Umf>(_P&rx^Frm4fO_{y80C$~q#=ikQTj zI8GA&&;5y$Mn9?=Nj~_~XnH8E#l4?$2qpF``L`M@b`WBqypo$HR;z-Id^!nsj8B*j zjyC6X72~Ea2p`HL|A9JmXf7u-kacoEJ=W!l9i8N$3z!Ea&fCE!R+Ar{ITq=x21W?G z`kEYW*pAkhavYC(%f>rk5&$%BYph*D&>6IL@C~$<&DUC4OyW#io0-vNSZCBV7W=9lVvya(x@x2=sZR@N7UMOe_It_zEX~Uu#ryM`1*$RfJ%(Y+g zgk8^riGefKgkN4E&IxgAuiQ&$MY4FO_~zA;Ecl?17s0NQ+$q7IO1M=)ck4w4lTJzw z`{{-PGUfQz9}APllmzZ`P`*JYTZqMsTU@zBW#pX4@w1N+5V9z%bXJ&6%&nBrz}oDU+JJXc8U#&~^)#vB@F`hvQPLpVv#(8d}E!A@)m$Y{WDor7=CS+?e213OTkaI+As#uF{=W%ctYQ14-gmu`Y zP|YjW;Ws!8l~aZR;dlOFI8EORQAvPvSbmU<<|-vVhe#$?D2;R}hV zqmoBaA%(gO)D2OM9)(yZC^%4zJah&XFEGo2Dqij@M#)vhtEq7TEKQF*h?A-qT}Kkt ztbu;FimXq^^pF{WM5HOZ_nqyzbOOpO#8p*+rY%8izAEgh?@+}u-&#pkoP!u!2*j!a zRZH^Qd{rzRfMTg{4X`$*4hyBp-Fa*T2Jb}d(|$sqVnat34pgy_D#&V8tnxYpj2~5^ zoYlnmTc~h#HWsk(rP?4tr^Cd^x*#uF(h@ix-n5@Wl=khKzUQq7EQ7(apzlL@1)o{u zC18I?vlJlD4W$#$;)bYfv$?KV0_#_4F7xnH6G7d+r0W(*o?j$Y)_bUn0EsaTm#-y6 zZb?vcnSi1pVo-4-x7_}aMiWxi9ZNChrdiTvxaCji>VhU7++C=-N~oTWgtd zjg0bT6fEp$%3&!iuT{%jXI^$)_*7-{5x4x29k0fBp)?*$$4M&lYjx?4(-@Nq_%uY? zx56+OD8kzngjpFEh_LTe+1Kf6L|EBPEd*(pMF}da~f(oFxxct_eN7@2^$~}v(OkB$Tq@&yE>*b^cP273r!o1De6u?qBI0Il*v*=tmQfU~6&=buY^mT~Y)g)AFdLVC_ zt9S@Q*cMF#|5M4BLkD7dkeSXV{(X=$tu>9auw&pY`?ILF(&L0xBOia>2jXcLTL|qQ z@yy;rz#bG>9vAeR9;b@o)>w1=yf5W*Nr_t`*uE5N@dL&5Bf>tZ+p}geMx=Y5C0R2z`^!K6p$Gg zON^dGE|D4wmdylisBMWHEFJv|FTtyhB<-o{=y&p+^^^Z*_tGYC4a_}bswWb z7~0LG)vK5I&sq-r`z>T3A^cN04Fd-wHcHQo*UD&|jvI~)#s=9I^V_E$(mHu*dZ-K! z_Au&8$Da!@`cPg9W;beA>f-^#hI;T9FWmiCRry$jYD1nU0+5Ydp#Y=+$-mG`QK%2T zU;+m){PBmd2P~!!T0mUnT+Zq~W`~U3D#A^|5%CjtE3#XFuXCH%bNp+ISME}E7)EbH zdWo;tBb`@&WTHu~*ozHd@5Rx3$s+q&`3}ysPfl~}fTQu&!93ZoY zZp7z=A|J0|!5lcDNar}Pu2_~qolxXpC(Xp#HRbrlz@a##qpao662@e1F-tHsBV-`8 z`eTV*|2WG(miUJbC}K-xcxgA$xjbN?xUZ=}O;vZ=Hm9;u8ke@K6+?+xDbg zxW~$FvKLsipDxjt$ibqvxHwq4keRmNmtlZlF)RaAO|6~QpLHjID6yT-WS z#e)Q_0($qD0p4aUoPf`GhHBIR&ls4^oDd-RvQ87vU0Bk-X zB{#&!Aj6v;P}x~VgE+Jpk(B&5p-a#p6^6GV>Vg!#?hrEga$?z-FZW=SVuEnkl}bx) z*z?p9Eb|V{mxfB?ieO>4#1PBw|311j3$Z2Fv7@xAgl@^TjAF8N$&o?B!XZL|OB>{r zc0tD(0>*3F4UeVBuhrZM8iYMelT^Y5MCw?8OLNyif?um{j`b3S2ZYA@bRY$X27v@u zRk4-_iPA7yN*5scO~+F~iubTrTyi>5$H~N1j*o$-sUJQT)8gO{AszhbAV<{PDxLbN zxm2fqu>JN<{d6S9k#jq|i_DhsDxYzu&uFK9EdCN7ztzX<)DKrH>D14vbhT!GO$S=| z!v@b`JxARt`5&!Tc!~bhLqgXlq!j6$`r)f$@{wNUR=HHaIPs<~mH+fO&5|}@X{$+F zP1s?cE%$5ol5 z1y^{vXHKVn48onX0_?pMkgZcc0ZA@h)kBg2%+V+(;Ox}TDutH#o^UkE671B^d`Kdh zoczv%B&7+74&Ua0hzX6GuX;Ve`*J)ABq_Tg$vQ^4kk&^M>3t-@X2^X#0Pwhu;q8co zv|*()KRuG5rGAgIwaVPi&MrtJJIB*NruZcpAnJ2SYYGC%#si6P&TX|jTL?Kvw6w}i z@V-Xx<3?MvNhoufb)L#L`e7=1WBty+SJAhClRzLIFCr{UpASpaIbrd$uk+K4mzcqk3#2H@PN~9Ux;XPQFFDR4z%&CR&~ZU_;snJgWFX9?SwVM< zf~UL;j2h-gvw&9M)hJjp;}DX&nPEAdGYZ*jkAe`SkqD#UaZ}*cQ>MMif8SH)-(eJl z${x-Qud~KQXMO@pAtM+%<59>!LP78SGe14D{>RVhyuPXtCsL4E>QG1^k-MVA_!%8{V?<1Q`{yTKg)mf_G5m&UDVO z!8Yb)8DZFrW%P!v&oaWW&1M+7}4Tw9+sie7BY+6 zV6mUOH*CtK29(AVa!`zZ6vNM~VY50zz0gR=ElN>tp2}Sen`hjE!xqqcy+uHxGdrao^%Jc3yWgoA5{z^#DKj7mD`&Z_@~vr%>ffJ~XvHicoE^0r;SbSq954pLaVsL3V7Vr)~bD zMHSM@PVsW@e)O>xmccv3Q-Nv512vK#i_kxP?;MYrOX0uVD6@yAs_Cdt$SgtA-RwDr z8$5e;v0q&sQkd=-v?O|HN97x(9-R&xRl4;s%%kYid@zSht5CULw&l4LB>*zpg7Y=a^?lIRW0MFTY5rt&grtwFrU$@>_ZijGl}c65D<01VS4x65s9<>t23ex<=0> z#8V8p+Y5x;prwndBnPp>AeM;zY1lQ_CO7H=s$uO3H)U-G|BPxmoFK8AvuV$i8>-4g zlseud1G(r@p>uknwY^kNwWLB9Yb?Du({yq4E_Qv^Y{jtAbZGiZc&y!;jPf`~hViDG zkjcF%`%0Y$Tl$=>_P3rkB{n+%m1gW8+x=q`coiwic;9rfz%SiM(u?|&qoU{N&|-X<(lX8&XBN(;Dmu_UwqqkOuiX7?`YGTD42?TUzX z{z}JJn3b$6L=wXl`U_ZE*q2~ejkTs)2)BQKPsj9;$qmMU&-bfwa#4b-ceQp={o=+& z&5JI&C~39Yon&aZJF;Nm=%V<4?Vso(S;4hM^6}lBO+0LI<`5V}tH~z60v0#qleRWH zYPi8%1T$l*idimINIOo+KJMCcP2+G)$OSU#b3?*`8_ z)L-AXclxQvP61`J%>7oexvFU&O}nenhG?ZtP0nGh44;d@hgVaP(}nW%kN49Ra3e0j zY{!k~qPbO>uaj!R|3U(pT)T38dGtcdxglC1BQ1#S4mx2-Jk+cz>&(OoJ%ND@GMc?y z<6tAfHl8cPVDHP8!MxgF0Netqs<-Y4**Hq+G%WreZ?vI2wjmEq(PY1=3xQ}uv|Q7_ zNmtItd#c|gd^_IL;Uaxf8AN_7Fad#%PcjEC+3vGCS)8(Z=)f$vm79C8w;t6;UP zoyyQII@uB(3Q*B5vl;ui3TK=LaARnQJl`|M#!uZX)%bE`fbs4QWLkD=riM;Y_iG6? z(a2y;4cCzMQtd3$FV#@Fbi}&T1<$;VDImB;N)Wjip{AJ8tf-1iEU>Wf|DV0Lfwk+p z?mN%N{d)J~y-V^v@{x}c&po1~M~RG>fkHBp8u8E)O^H&Z%otMxu^nU5PBiZcjY!dq zfy&}bt-35m4Fr-7gvJA?tp;Kds}WpdAfSp&#ctslc&46#gE3kUM!*C!Mr{m)83*Gc zYB<0DTKk-P?tAy~LsH`+s0h7#KK9ukYp=ET`r2#jW{fHT5sYEi_Hpw}a3sRQ-DVNiFbL^v7wqIF-D7^&}Wa+uKqrgo6_AE5@mc{*Q^bV0-W z8E()EP8UNRF8~rqfYTOMmENLr9VnG;r*)8pouN2@DYQYGU^55j9J*K(TJ)+UtlUiv z_M_I3BPa%H5eK&_PaJRE?bUm{V6#cKKn8A{{?^Bh4Z%=)CoPW(2MeC0bF)P%1&Kgv z+%{g(_9q5P7$8p7SS9mg#HsQ~ELq-rc!1G+nY@NbG6lQn8A?=Ki8-c0%HI9)<%HjZ zhmu$M)yCDA`Bn1NOZx2{N?y`0LDsJ%44|#di0$Gf4n}({Yu^(uYLf2K)vjWz!bif( zUkI(f3gqBlr!47%{m0N#a;f*EM`)M9@9(B%p>Z3*~?Ts(?A1dl+Ujp2P`Dm2<`4DTL4 zak?DdJAQIcf4{z39zXfH{@t*D(@JgKA!J9p3)oQ-mK|*y(1FU@*%P6?iGD};&h2qd zkU4x&lZ(V9F5M<<8!d>OgFKCLc{^F8;g7>Riy`C>vXGYogV{atF;F(trlzS7dCn?C zFMMLKi@L~JVRfkz=EJJdr$<5+_t6vYHeaVI z+p(7D#Bx^bLrC{+#krUDxSl!uMTZhm&=Ym-pR5Zfs?B7@#x(^G4{oV?TCK8LhY4iS zQl)J0ralIvPtjyP$klif3WvAe7wr+xH*iY&U`23o0uHQ&bfX}`(+yIHwz^0lAs=^o z7Rd}rWIqVz)r!4CUzV7*CW$1aByyLPym9_QRSR_aiwz(8dV*fn;kkjP+x01)m`FZ7Qkl`+)Fy zc!2lbpfd>@?On5(-yo^o`N2RS0F0Ze55Es9aKYg~Nf5^e`}%j3Pxp_XE^B7I>@SU< z-r2_z?oa>9_~{)C!36YX@!ZJ)wk(!T7tnJ@xhaYSgBH2K(_P-JD-vSW>lKLt+ua69 z{SJciYb_8Hshx<@8IXAzCbo#O!S-bnR;H8I(?{{6PO-M8 z_2b9qIh~x9zW7n3xJQy%Sh14LN^IT54&xoi*0zrpHAy0Bu{trwe5cF`|MIg$;?aiP zJn?C}fk|=FHYB~1puMZV{A)ZEyW4r$wxY4(vBp8~!0u6f+I-!DgtxyyEL4*dj9wq@ z5bEv77GKDBye4MA$8Fn~XZ(w#M2m`ZayEE^U2$=ttqXv9hj!?4$^28V_~K)eyzJwH zk=XAZRmuDsSsq|fDeuN?YBWX{+twqldVFwOpJ*0Gj9bTuk+Vy2%*#Lt09C1ydL;~K zRv2Iq1lIp`ylQh@-xX-R%9(FNG+U)_5y%6g!CGL$(=^swOGJAd(a0uhtg#}((Hv@E z@#C#4Q#3(>c97q*8O{Xi@AhkUFSpp^9@YLKOEoQDPWY|ATYqgVhY&|8By?s7^w3Jg zEnTIkX(gbE5MD}-?GvsF)%BZDh|^eVwMhL@p;C1z3uUcMRTojHsV-b-lBBxS^jO>t zRgXJ2(&LUavTOC2x!trgof{dA*tGSSi?YYaxuxcfTclky?~6Vw%X52Q`lKJuVN$9K z=tHpt6}KZhWL*sTi(FM=bypQ$7QslR%z7tEr){=TC?vV>ZKHok|*twOu2yExZ+2 z6&sM8$Y-7d34-1~Njy{NLP$GFJaxUlq>Bl3o6zd9Ae4p1#4|x&()*2gMAK7=hp=3D zoN4@Rtfk6oH0=G(fnC*Cv0Pv@=&?GAU$E$x+M-)Vy5R*s6=XGxT`(OR0Eo0iW zgDT4rfw6sfjvEZEXLI%s5xT#Jp=yDlEsYv2|2Ohz74`cRrQ$QI#V@V&NOeTm_xV5g zrfcsJO=6NMq%y>3SBpKTxY%=i>5R?^Wv!vv27Q2Y<9E}PwpcB*SfQ`ch+*Y%2*OV# z!^}HDAm_vBi(AeTKbeu+$mt~dIQt5f{J}QU&_EVRl}+hEI81$F<^lsbD%CSu}LoDvTuM40VP;?xIYAq-8ykmST48>ckK9!QlvCSuatI z;aZXewCO{AQT@9sxa7hW3G>4O?S?PuW#}2AkDW>*e=jr#fj~k|AdwSD%ABPE$vHfZRa|U9 zkie+}xq;_In3oi!cFb)fOkmK$1jeZxHa4F~cp3$%2`p`yc9&r^q#qg{+tu{mKC+*V zkSa#EW5Ys<G06gBIEiItbnDUB*~#bjY;;#5)kWGuZ*=UNppH zMPcS5oiqwP2yixen*Pqp9GDn@UAE4o1FqhR;L9&LCz$=SxG?ve$`iO%ky>1JATvmm z#2KQNlFtD{fCBYzpm*@lW(_J&S!NwAMJNFgjYxWy*UI`y2aIE-k1!P^7gEki=7phg z0h1M4$FPE!4mc`1D=?CU)+tCE{hZmOg_6$gM7PG6&QoO4m?;C_BTgn3!?ly~(lg-Q zc}11FwfOYL5R_BWwGc`GXc!R5}k%N%tY4IEWkI-c@6Hu zHz{-m)@g7&^%Sj7_C^l6o9azc^+rbRvLoOJTu^m`D>}N@$r^IzNNf5&=A{gj{tFAn z7+bvLoR;-$jJr6tvjz@tk?I8Q5@Au|u2{U%`-!UycHpxA2!tFYMYYD?taTbg2R#(1$@r?ivFkdP98ux7Y7JbP3qckX!JAdLzGJd@MWR`D|52qzFgp94*o zm=8SyK_PBU*jH3Qe}uEZRgiu}d(VnXo0r2I{Z_@ks+(8B8~s+rzOI|g;f;Q)VsGi@jqpalRk3gB=FRX% zzg4lXYJ}G1@96QBP)5Ji2j8y0`JQg{M8o`U{pJU{(G$J-e*NZ8bfYJF^KSj-$GXuI zz4>AN<|n$*6TNw_e)GO=^h9rdTEBVWpYTRc^k%Jo^P+C_L~kzX=6tx(Z}sLYx_K$Q z(Qj4kRo%QC-sra~_Ep`y65i;yD)x2VTn=yaTNQgtH*bVD`mKt6OE+(ZH~OuLeMdJ} z!W;co#lEMTZ-+Pft&06XH{T6!^jj7C6Wx42ywPt}?8mx!H@wkrRqQ9a`C)jY->TUA zx_K|W(Qj4k1yqaTr{Rr$t72jwPDX3>GGbzA3(KpsC zCgv%D4EEB;Xop)F(S`kP{J_I~?_v81?qL3`!1`2;R*Wm+tW9Y%NRp&S=j2+w3`|rj zHe4)=S68$$8du?*?^U{{?ucD*GV#Xlum#vgAT=RZ2iG+z7Nv!d6{3`RE5>Ae$+p)S z4;u3)K|zO7>pOzEIr}g0+vF%5*Z8X?k_~)T8}uA1(#s6S{D>nv6sWFTvGM(^plBf0 zuhQYMV=JNB5>C<`!or+cVrA5iMlPvMPCAxe!EnaKb=zG&>S%?cQVRC-N+;rOo`dPK z)Wo0I)S*O@D=)MR1D3u-8<%=$AN4^BkIt}*w6bW$WesB`W-Kg5Cg^DiX128;BN?H8 zqDZ+$WQi!e7n`ian2Kx2&S;R$}_P+qEHzrC17lS!Da63w09U zm|B-UsI#LbPl9kMi%XD0?(sU<@NQ%v$$k?3Bxq~8C5RgSmrJK<0lq|50`vN^^dB`! z--|qmVwA!_&s}FT5KCvHd!9^_X_3Mv(ArnkJ1pHY2oaP9&Pn^Dl1A}7QmDjdBr~H- zuEJ^G*s+4r1|`a|J)}^nw8;daV91S18_I?0IlG~W(i}00ghcvR=>bUrVUHz2#0>RD zGQE_x#3@Jf#gKzqW6%;18LG$XN_T_uTz88%>TXaqx?4c7vF--qjT@8ZhU_P#H6_e6 zrkdtv({GJ-j6apVaDY#0Zj9Zup-nWmFy?8RTT)8DvF2OS?=;O#MoW`+TtYLB!3RQH z+lJ2-TDZh^7$?NYy~}Et*2gURCb=>_Nfo{I`BSh~pd@)Yi%u>_max0T8uFu0sXR5TNQj}M=>!|puc(qYTq7zRe@dxD>jzH2#LD-Q@Z1e;Fo@%w( zbHwEtY&{QJt8hi1H7eAlyKZl2RH)kkb#W+6L0z?B$6cz9XpFsyFjxO7?8OKmlS5N_ z480j+FImLt(uB#OX;W)_#7G#9b{&(0qpd}EOqv{A6c?3*Y~?n=fkiP?!y6(@9GG;m z#=0PRqe~kkK`6!}p+PUAPt9&6HBLI83A`H(4=AC@2IZ}y(4Hya)(ue5YYu%t4MurG zmo69OoTXBZxevF(qWH!7UkhW+lx0H~Tci`~O<7X^O3rAn6PCA4Oj*pcaYc-qZeufM ztqGUG>@Qa5wROd`Bw6<~S&A^$+ES@iQ;j&ickf7gMD*Skk<~SC?sdAuBauK_qh5*I z{+k}1yq|XG?9w!5609j-4sy&Yu_k6aAv-A1!OV1O;tV%hb8Is_j^B4*#$s|Hicloc z7m2?T%FY0PG{SU6RNfvn3=x&x8q5aPqk#~IBGg1+e|oflG4Me)pd!4%c`U<^g1HE4 zr&hHHLx3xoS&rELLrI1(Nyr;r8UD2q*ikU^(75oU(ccOX2tc)5)!pI;l<<$7(DFyH0^r5Q3cyS-7Z~MOC$v_a#O}e^W~f$v zavwG6(hsp4pD0^uqGJNL87edVvS6wjfou3_TW{1J50Ll(EI*3>qC%{_f}uL-TvzN| zWxMJd!7{D>f(+q|X1kAOM+sG+t`(MbgrKJ3ZJD-gc*WZCXy7)9WM!0m7^u&#gE~l~ zvC3kQHTNa+tWj2dM3kP80lE@0c%K)%&z#!Lm;k@c5AK5T95f_d8U->)Z3fzO4)804 zIbh_=K>pejfJ`62Z$LNL%V1fDy{&Uli+ZlEff4iuGmv4xw7j~|7S0!QX2UM+mwww6 zyx)!FHB>!F^r{j9knF&SKnKm15hCu-F+=(p;H=lYXj|~_CYx*Sw}T9B04}4vWNf;(^JO1^DFR|XueOx zQSHC9c75H;#7Z>y+YDt}{I;Xc4B&+HPLl1Hn9L76L?#;K3%sEmA!&IH+fu_lqcxvl zN%)!(tjdoJbiTzVG%tLU^9=>s@eRzr2EnhxHzV>zC;3TQXUG-4rApopmCyDGTA$us zasiLKOQw^bZFlJn-5n6@u}OE8__l(s?QfaRQU79~OK<3IUuP~%hpy$hEs?>x{d(1Q?@;{i?uh*)yKt~cEOAHu&3!UtFf(;CdhVjxHcv;TtbMl zg%(JZvUTrwiFM0!Q5Hd9v9(ugsC_hEL*x1y%6nEJNo6K+YYk1q8p;`K6Vhj@9N$){ zb+41-fVZ_=;w4+LP7c_$bH0LRS*HzWrZyb(uxdDeYQqs;%{g8%s<{%awo622s3!+9PcV#0Lx_>|+L534^oiqI>2vC9ht6P*!&etzmlM=e?^B8a7*EF`ju={6-`VAZcG;buy2?8HE z$!$NVy(KcZ*U2L#K2Q1cx(#+YaQBA{uyV=)@?PuA&q-iP= z#o=kLn3{LXnH!haw0Ze*p4kGT6EqO^gZkjVu#6BR>%Yxx?g6TgiAZzpi4E0~30kXC z6{K~-`Y=yQj7PJw@H29%V-1EDl*Uq?YyAI}{wlS&l4ZNsmSro|wXQo6y<5{;gYE>0 zR=N|tv8=mN;=c2SJIJG=kGo^&)B*@xzb*U|N$@0MSzL?SZC-u-~CHRnv zSPVA2A@0`RbT_u9iO7n>j8w%vl7GTzY zTif)DG11?#>=?i2Az@?(e64BA)Ke{W_`4`xH}#B3gq6q`{zio#@M3$^HmB(JSsa)xB&E z{3-7-K-io08Y`9%T$5(&7+c_n7EtIZ+FzGv95YIDeujA0fz2JKM7EY509a&<_DO_wvtTbs#QpCp<% z_bgeB?HMqAT5NPnamhkcIdprAwwE$TKzxhp)1`*>ZN_K;{@bZx(Y_i~U?NZ)xbDD= zTEkI0^*8-Cx*RpV41Nu1&5%o*XK^A7smJc;#Ta)8{NPBd_&OxJJ=|fpvYz5F+(%u9 z0SdWwnaO#zIFzpl0$I>(6NSg6a#H#NBL^89hiq(gdD)v%^yv{ z*Fw-}Q&eZJl%5Zmp$r`mqWUo8^pzL~HVpza)kdxUYfU)_)s#I%bp}uxDC|j4aa@se zE#DOeC>J%BSKzl4o@^nVO1$ELE`G>Nt4O|^kHI7>xk$uv89~mt6;rjaI#Etyc(`E_8=-oixp2eL%3;#npZzL>9yy$K zjB(E8c^oKP_% z$q(THm%xnTE5sD;R*#_WcJV5Aw^VmubchjKzUR#abll*LlJ z=*Fv8j(~MPNC26zzO#G`k=Tci=rL4ayCB)<#OVpl#hY=-M@eiU*uh=MvJtLoy!948 z>z&uTv$=q$6+itUo;(mBp92A4SWEf9@Mw6_iF9Dg7vjGWX+IF@kW<71kl3)Lhl7$x zIS)f3h4?9Ay)MO1x9V~i$lz>Y2_&g82+*e@#W_vaKth54T2mz{V!KxQsqhZoQL$BH zK_xFW7F4p)fdm75qbNu8k@bzAt|?N2Jkv)az3_YPS;S%PG&y8!56=-mm6m+QroNla zX#*scozX#<;JYPAksy_Kc?=}`Hi6xY^Zb}V#1x(vIdl00eE z$kbac=UXd1+Cg}yftJf?18Qd264JycL*?j~zKDi$65O`jsrRFNJ6(AKXg+%Y~hO?$NC+&q4gq@_ji4Z%j_P)t75BaEk@BGGC@k zodY{)?A)GQFF1k%)Y$6a>V{bx3{gd>br#PX8@b4=WbsX7Wi69O47;4yH;vcZOq37A z?g=<+*y6>&nuS=tEq{U0Hw&?STL`NsV*Lra8}KmhA^GfOG#>6vF{DRuM=SycR#Su& zMUi191?m+5Tg4C3a@Dl;xmA3xdSI;aJI-@h{uGqZG^UppnC-M3F4YV+Z14mTN`$;V z;xms{aGih`FwupCF*(*GLa7nRq2SU=W*7(E+bFTtXp~r)G=9kyQou#BeBmy}glXZ|Htoa6X%wje4iVM35m-Aaoz@OMnkr z<}COwL`T2;_m&%ufqVWpIF{vq+wb|`_ILKr?BCz*?N9ps!E6%Jzip5Ia{m|Y_ucfC z|LtyoU*> zY2!kR8w<&dQY)Yh+!W%|dQAkTY7f4(6WX%8Y1-3lhMb*hia7_wBm_`W2*zFId0U=< z3>_yR|4x>~!Cs~eNq^LWqWQKVv8tBn4fU%VKtNg+Kp@!@V?fgry=i3|Lx>y*i^$xT zY*4^q-1>L}aJqHi0KuwI9XO$o0jDakvp#gdToxJwXR!{x3OMSP1IH4*DeBfVEijZ& zE2ddl-jpw;gS0l0)@`p+X!z4wTDRK-Uw>Ll>z1nq)h5ecJ)>KJITS-67_0mynbtSt z#b&WrXr5cn0d6h7Nw*m19OxDkIR_+1iWlZ4T5GbL=aoD@HT_>^=2iNOIConT>XThf7cm2_Y`-BGHO1=;;L z!03g1;WZFTaux*2Ai;oadq{I)VOMRW5v4f+dJ7@VNdUSU)CsRTjeJOICr<%&d@w5W z)fiXFYg{ESCX;;`pF>4dazHG)Ol6~21HR{Q})D~aWl6_^Ch2=o>a?*@Xlp50&G$ zR4>Xjbt&nS90e|XpZZcVLxfNXJ%$S8x!F++LfZn9C%CE2e^&2-ZmJ$|bD3aH>p_;y z3Mq}syHB&ODCdg?-5<&DE3cGE?j)WeD~z1VA_QH7AgiM-vZG2GHbiwN)>cepWR{gt zp*3pra@>E;u8#;B)Clrz%B3L4<)qOK{U2FQp2)K5Ag1Hn5N2R(rjJtN@NOxcw`pWU zA^eDtin)xcIGt4jij-I6bXZXz9R>r?20c(ajG8@kW7>W>DIxlpx!Z4s2U)c8D? zsk&exO=6`c@PTB0w~7RBe#KEP#_eIvvBkian!s`y$#G@G$yjSxmTWmPW~=oDh^=3V z>U=b;L}JU6E76qYsrd+waY@->}f5j*G`KRv!}JBUW*oxWlw8Ky><}yWTKZP z^^(XT_lL6XlC4n$H7OkuBxNk4En|iV4qAX+m~^OoUhAd9GM`sTw$ikS1%hbG#ZF37 zNafY6r}FYGSgaxlO19L=h{f#Ad7y*=&uI6+z2feU0nn6%ykk|Rqk zP1iPyFwvYMsMN%1g=TB{T%Vzm!-hI%_nwJU{_R(T3{AP z)2Lw^*bQr#Tc9|RoU7g(!B&NmbK&i65s*E;-eL^bb=i%7OO6W=6zgn>d8C|jBs};e zuWauRwYIPsVutz>dCvmg;(!+Hc5KYohU0JDx|wlwU3|+t=3BTkkXG8)=TxAUh0Sc37PQ{S1q3rLp@6kY}vD;2d4EDbA(r#C66;K zKIhCsER<@)%x~#QqSOd$V<@yp|4EsXx5QNHgLq#9ACg}p<5e>46)qgH6uSR$fzM*t zkoNu26Fi!+MtRim12qXZ!J4!l!l5C7=63)9-(jqzQv)BNOk&kA)g#qFC{b;WLJjY% zD17QSnQ49=0f;ThykW8(RWR;%N=(5oxo)njAs1|Z<^xV5CD?FlF^kjnBoDSql}vOF zD`%4G0s4dP+A7`VN>5vOIA>*yNhDFpqR00_HKbh_!3sUDcp(d z1j~BbbB#!ZRo(;q#f|2spEWT&s|6yF7-gHu60EV9z&Bt=H8!2C5-~NK7LgY{yj48A zqo1abV4*~yWnT`%nZpbS=9Fl!nemV|3h@F+D2vCIauQ|g4pe26IHOa5$?dYXmYga$ zPNS)K9-MvbjuM$$43FU!rV61Lo#rS3NLu_2Y#iE2FygVva?}U0sT}OCP7UEY7)yAC zu>>O_((`Xh5bZLJ8FD;$?-hID*C5kSJas`Gj(=8>8YXAH-f+2ODqqHYCFni}4~lt7nax~mHAqz!a! z&#J)Zq&q8VXS3-ini$xk0dgR+SORtE^VBKvdBuhrtu<7=((*x(V&fI1g^D4~Kvh_b zC;1^rB<7VAME>#<2FF3+(<m$_oe9uo*|!7GaTY&N^gu<6i>?w%!>p5&sZD zw5aiVUDsN!FLACyr8rn;gJegNZY=m&{QBQM_WGay@t=I}Z~wc?-;ajB#(Q%*WwZOz z&U5*;V>=1SMKz926~FzrUg$gxgC1mksb!>ze2qkA$ZCB+sL5@c{WW@)@yhLFAFL8~ z%ZKC-l>107sZ*mF$uSurV?`t6_e;c!*)Ij08^%gzBvJx3GH-?N#dfgRlvPkY5x*3s zI}&b1A+*e?&(AW^>T1=pV&b)Pp7~$RSVWZLK7FbnBQ*gu9mxtev@n-2UG_U}HJkjTZT$Wh(Q?;5$InsVKtcDf|*(5 z%uOZ?SA=BmrA2%|@$)-%IM8>aa5#`l&=B)}VJuoCh=8yBSSkAC9n0qwj3|jUQ9eq(&qkz7yel~|8tLb;QI3Umj;_uPf758Bm(Pk~=oF}z zcNH9NwaG>SVIt|DQ7F#vpXRr`W$m?3*_lT z&cj78FBEKCx{z;wOAqHs(ozWM#GRSAGx9#Zk)(uzJ8duk%I%0@9LQLs5 zn{SU~v1;CMP0evlO=?og=C?i-l!v4PMwYL&5^6b_=jv za67h^3FX^f7#lCSxy*zIK-$MyA`r$!RgV0BOPrf#HDd2O{q{#vADQqNcbe^{)4r09 z>qP;(fqpj0y1~rX`q`wPNw&+drLReGTX=IFw#*o|uxtriSY2#VOe5_(w(QClE{?Pl z0)U->4z~Nsk!E`?j2281S$jV{{q|^=3MlN_2n(A6^u@7)iq+Cnt4#eNwk? zKB=LcPijp6(roEso?fC!je_no`{`uoG?bWuRNd`l95CU*G?+7{dCuX&-LPuMjiYpR z?ZIsE%cDCL>Cx97t1$;zE)l>u2&uat7~Pujb7XXju?a54PxdJgujD5@gP-Jgi=*(k zP(&s^?zJoBSLEuwq4AI)70a=Pv1op+MNdz8ZJwzHN@A?hW&V?wBWZ zK|kzPcV-KhMz__N%iW8-%wRCV zl1b{pqB~g!s0ter~xmI-qqR+j$|sHQRIX(r9mX8$DULK!o!yZg&I2 zz-;9JuC8yxT3F5;>$aF$A3nOBbF~-XWgM5AEil>eLF9zp+1^jfbG0iwkZ~?HrS@h! zF3{Ai`9ijI0phh}2Ya&p*=}Ah@WE{tX!;fyV0HnbZuVexJH=z~GC*y=pqYH|Qob`! z-$ECFanntf`NSD_wsR!g71|a{eb1OTVt|-8NtKLxOdk;SK#XRqki)5DX5w1eUHpUB zUAzP@HV>BZXK}iUsS$#>%0|{$99KdRV;2m3DZM?r!!S9W#N@P&bm<19tCrGGuH?Ec zvGW#dz`l#NSlyjfFi4Sy5VnB30Q4l&U zC=Q0dnfDPyQA6Tvc9aNy(P%qZ6_W^u31z9%D#&{FU;dxxK1LUo#> zeP&70yXEPTPNscNN>?n!E6NC~?DI3UFt1F>Ot_PrtMu9k@yh%_${&oElIbI)^YRMe zS|=lEO!fwaMJFzWd&$JJ+KOYR0BBnj3me&WrZ0K_WJfw8DlC>pum&H)0pW^yiX9;(LSm&PjHK|i~{$ojK%7GtBz-P8) z(Qs#uG|qlys+Cxd;Y-48vHY~$#Ks|YF2&!=!&mZ3i`h)AxkYA$u$xIy9k6$u5(k@C zrW~pTL?}1{cE#YFlVI`gF$s`ma_04H+w0Hgw<~5rXuyzef6Y}7zngQkSQJ{IXyl8; zSN4kUvcnK)AB+D}kmg-(jwJ+R7T?#E_I+3ZyXx6P`@;t`6hEi;`iA?_9mNa#h|Jf? z3Ia6|l*?#T5K-}h9Z-jTYvtH`7VIs9kLRv~$Ou3fve@1sm8y~5PL&2+W=SVKC}p>1 zk8pB8y8<6m04-b$ayXO4vJDQ;oQCNM0`SO2q3y)&(+G!+Vze?^Dgmb7;yKL=xIbJ@ zvJq#Vh@>!mO9?*|=?s+Nz9>4(6$N&~^QmNCl@JM`6#K5+?$X6P&3u`+ z6B8PGzl=`v`HY!9us4`K6;GNzKnxuNWgX#fT_zTGV{ z&hFG%%rQF%^=5%LV#G+HZCQDmm6d1RK;dt)@{kgS@fsj)ur^enu0-p=c*5Z114Pw7 z1S0{iix3twdxSkB{2W{v%H6mxJu$l7p>8wziIJH|KRIG+1Y)vgM5t<*CWnzOqT$2Y zok|D7T%qR6!Y|w2#|g+%WcTZO@rir@mEU1hKFscTjoo&z{n;#H#$yCb2@4cEL*P9> z&y1k`Y>QLA+26K6`8u3|O<=g|v=@+-f&Y{AXa+2BL}eX|qBmoSOtJmbq7AH8PvBh> zbu**fY5kX^(#*C1XQ?Oxxj3mM{oE?v8Ns`$8`Vr1y9@wBYsv5lKSI`)feVuqGgmi- z84^J_e20xDt053JD%ry#w}-_t;K1$81Znm#!xYFu_AoO*DHJ!G*WyK^tIRMh39t1? zBQcC*F*EBE=_%;7tWV*pk4e#=4Oh!GYaU)Kl2*yZRVC2U)$Uc_HxhxH9u6IW<1jSd z+CX*#EewJ#(0~K|@!9|r*>r7)SZ}bX3TuYf{(==h@s*0qwzm3jnZ8ttQDoa#{IOj% zKs0ESU0X$z>9nlWOwt2OQ^{Dl-M1zp|Um@O|Y*u@QyC9zez@VxYPr&;V0f2RY_F1gwX@rfvjXAdWyrHlPCYA#i88VG70=-o*~Lg0K`Lke zJk|GX^uqn|!M)Iyd@^IhfMc6E>|I59r^ zsS^9&-Jb5lf^YKrOUUa=Rsc2LAFq+t%y^UzjLsAn0vOys1_1#oUllcOJM>AWIf;pA z&LUyfO0zw(bcXK)U@2wA`&Z{=zJ`)HlUP7kO;qUzvMPvE;bb<2UV>Wt_y=rp;zO20 zRItjM&UNsn^9o!}{$Eu_1l1T(C@ z#^&nW5C%sm0VWJkQjXB|eIwAIH=;W5j)l!~>#!JT{dQMU79u%1ID7wbtS1Xz414@hpL!K7X^g4Kf(FLT5Jg5fNIg5*v+8UL;bS!x#W3C-6gi{2->7 z$6But4fF05Mt|;6COq~S55bdABI>}b;DrP?T#Q6_jY#qXU$p8p^{QpG%-TR`tOxdr zJI`huZH>1(n^h)|2!L>j=b~>y2UtR7Dpnx+fHcvGCEP}Qf>%eTTc0JRivsJ*8%2EJ zcv;OC1q0n_?czRG3Yr;n#O;=hilk!&2|M;8HC}VU|^4Ep6WJ3khU{k|_ zbGM}PnbFWc7!{G~ChvvZ12)+P526tG$3qLy>9KX0<^+RLMqz$N*(`DxVgpz>4@WDR z0GEp#>`5rWE{*W)Xg?B4eAdUFe=NfCJ~{|Ghis+B`{g-mA~Y%_e)sk4xlNXxVIXlna)c#EzVIv74v??td*{J;fc9p)p8l8P(R!)`5%2Icz)E$$h7DTI% z>|+JmR}nqBq}y!n(Lslxc3vup60nQ7+alcAn%!}nsIY?=$L3bw`5Hf4`1$gs(Ltqx z+M3-i$?G7cW4%SkDBlw76d6#E4^?GOoJZ8tIR;U-mni6k?{zFeRg$cD1Sh2!LdDLJLLF?}Vx!PIOcE1@ z$iBg#Yb>?lEES$;G^lXWrr4E$1i_+NK@G59z&62I&E)7U-bp8S&`ECSz>9YPdVhY*azk2T|pUf{W$7+(n5&T}cQC~M?$U%IKmxh~t+eQ51f zM0R7i4O+tUlI_qpW#=Mz2z-)6RBX-2NPKl#clXE7aJT(X@-#mfE1xRP8S#Zl)+S?$ z{V-Y?K1sY~yeJGpWR46EoVx=nM#{8+HoFvoB*ua;hQPrVM!^CB>=@?G{WO6IVJ|-i zk03E2FajH;IL^4HEB6Mp$Ys%qtRI%k=~fChvV+4X9CiVB;AIi=e=0l_%e(&AD1!Z~ z8cy*p<_HG$j3O{>zxGpy(@*M&bTNK9OZYch2cl<3Kc}D5BLeDLI=Pm=e4EGjKr8e+ zeErG%p2O)0-koQH+Zqrr1UuwXWClEk!SI_#3`BeBGHoB10Z?IE-?HQEq+PT!Dq7>2 zcF|{t)2Hkzc|g5m|MOa#3U$;MwH&dX%zUzs58Mp>bN4}rpzD2+)(&1gWkzXjh>=km z2$0{xIwu=$cEICLm}g4`L-Q!~#5t;Gc7yGjN4;U>WwnmXL z+nyDv4WbBUFPTWK(*oEQqBZ}O?ddG0>xN9%ZzL`X6SG7xD1GydNy$+)wamUPn_R(B zu_{0-!VO%lnG74=hzikIz5(O8Rig<*6`p8#_5;IFv_CaTG2HcPZCVF&Iwm``G>^kkK7ULu-}m->(SEaE$>+@X1DU>U)t)~C#Xa$Vk+<)sBm>dHV@e^{@v0t*@xzS59f*zEPwm+}NkjGDgI_eS*$j_b z#rJ8$lJr28%VL{%CC|W_xc;Q1ZEiosQs8W&tH+b&=3fKd2worP)ss29EJ#?QwL;zx zKK=x5L#`Fa!Omp1Cl_L(T#(F=ZKL`x`{I+fYIaz4k)q?`-hhHJQZR;LK2|)KuCUhJ z6CdIb2Z*Uzew{BoIYCi3Lr+~{rjiERo=TCB!Y;VCh{-WY^*<;{Dc!S^lrkwhNs(<` zBtrq&Z zQ|Op`Rtm2dzl6^;*3M-A;pE3~GKo>IY7xMHr0;TyeAVx*zd2U?uh_k8b-1Bz#nAc) zH^{diNnR17y$n|1qcb5ZO__N31_D+erDHp+jM-#QgA3QPPcRJ_jIyp$O}C0y`54O} zLmbV+XicU(l)Nc6JAXKRLq&i`OAD)H#^ODnvo|fe)yP5Xm5DU>#CH{7)jjd@l91|* zb;Y>-Xdc817-qaGQTd9xVn%T%LAxGY7wfujCy>dl`v(@8HBp-^phl&AUtQJjU9J+yi2~lQoF< zH6@NdAdeG^@D9_2g8y+eKg@~t0CmtGq^1ZGpTiz+g+Z-7sAv&Fd&CkfE{Y(fZ1Go@ zc)|+DC11{*&@B|LTaZyZE<>lYfp^*G(7G($pVgjqcA!qT-^tTQ^M-eNAbo;PCsn6+ zp!#|rwX=s#YrH&2-vQ?tvK}PfX6gnSekbuYH!#!=&s=309F*ugJl zEezOSdLiq)e(cDXUQq0i$;=0xUB~cZ$X@foQo|MT->Psw3gWN8dBqUnmFR>|7>^gNQy-T)3FZsBs>FXF*pk(}dw(tV!HJ}3vz{flj z0d0gAMFAn-;v^+g6J(1I&WvQiP?mhb$q%p~rg$7bh87$mnESwFGsw2wSV0yMO+tK1 zT~UaD!lrueor%&Md8Wmi z*UjREe>VB^&z=AG0K^kbQHSN zKfX@H_X&7|GWGM2{(R!%1*1~pzT`rTWd5QWB*q-^$LYRPC^F9IzN7ej-X4`Jlq*%n zADUBD7sa0GNqG86;yNw3?uby9uO36B-YJmF3asL9HeNt41OwLsGH>A8#5u;H(@)HYX)JTTT z2c9}mEcB7MC`&P)aqH2OoRuwD^jB(7*N#$7LFJ1?>XGM%4V%6Eo(s+c0i1H-S^EZr*aR?A#M>g9Y9)|m7p7OEC_dZsIbw9{^d!X@Ie`ohOyWbM zU34d`d8+h=I>74n;XA;(CzJ)j6!;V{VlNnha4^OQkVP1Q6`OwwJ*i>D@_LNuGM051 zu{_2Iq6OArglfGJjM%GWw#Bkxg!&9dsFSReh&s@%A`=ZKGNS(WLMYo0C%gF}N&ryF zj6BZ|NpD0%yRtY zEGKCyddOBsQ%cGuJT57j=(m!RV+HG!^cz@#(JxO~hZ&Sni8i(;^7_vpE7>UoLcJ-c z5B!U5jr3gO`Q{hm=VY;zXox^2Lj#?Q@MAtqJu(8CV1+!L23ri_F~JtYTdgP947HU3 zGa(BJX2SFrSY6Nte}UBnXvbKF9bBN-pv-YtE&-)X$BP#b9iWPq`Tk~ZD78DQZ z&;dd#TEbI%Kl~M3;HustREvK*QGd&8Lmz5guWEs8dhJcG9m6>yMe&mtufQz~6*%gi zn`IAKweif9?a6kiF-{o=Sr>V+Sz|4447YWV7 zdX2^g-WYQ7Na&}<{_kChLSSuF{22{~n^X(bFd-`IpXGCZ7|f3_zUYhJcqp>}-aGf} z5=g;>qp$RrJM-zYzmdyHSlQ3G+fc;K=wCBe+ z)o2I*A&+*p&}omGjaG=nR#jPKK%~FV-~uAW#qV-cVy(#aD-?0qND`@0sLlDgtp7ov zfGlM*E!Y=H54+BFX8nt`SzpsNj-oK@YvWn}Vtv+Mt{B7SaL~v|sRw(ncmoI^!U-7N z`yivMk8Q-tbF*Wk?Hd>yEDxr)`PjsnbV!{Ih@unRsWHi&!f3nyA&=Hs9=+EW&EjPd}u7- zkXCxIC9P(34!(nziF%A3-RQ(I`E=(+qmsRO zpe3B^%lek~`Fj~ND~pQMSbWiyknnPxvnZdZoI)P?;mBnK3YodHP>S~)A>#~5)+a=Z zp?i?qzKe-vp%0_t3$1?TXp9s73Xd@GA_B2RNs%a<>`^KRKAt8{G006`EKU!(=YM89N6`#k;06WABI%tYlM@(z6%t z?*@dlxD@L#5@5p%pcJOXi~i6=!1L@>lkoRK>_XsL>{8%!E(LzxrNA>T1wJDwP>aXz zP1cSzcykc%!kuuUBOTzG z5=*Sno0jf0&Kr{M{=&!UV%?_Wya~DPflWx0wdombw>Ko#O%A^l>cT|3RCle3{`G32 zKg$&oU6|<4Rulc}^@%<*W(S)B;FZ^mK%SrZl>%9`aHvQfy@)LmK_EXmQC%Rs4b zkOhdNpi0aiAln%kY^pgI4s_H4YXJfM=k_Qcsp^Vn1>#zqT0dT-ERFb)H1t#Ddr z?ACA^bbe$Ye>k9kz%%{_6zEZi;2rimL{zp3POGL3pkS=)aT+GI9;eyhBT%SYuHc2P zx;F=wh0~V~OfhZOa9ZEcXAL!2-cy*N*~Jr3lcXI=$ICRbb>?v}u5S;?cRQ$~4+U3= zUNwNt(VyJ>9%PDD?Oo~yh2(3LZ_H81Cqu|hKunkt{3I+N+61EwG@vM^rL4JuJG2d{ zU=8Ho6E+B=RPhEd)>%V^M;&Jmj8=Ssll25clJe?DJ$2~85vY4pj$p{c0o6l89`YLS zA)Pn8k#oOv@E>&&)L(q;KZsUmccroZYw&;5uHv}GZ#(XQbH#W6))h7^6#4N%XP3E4 zsTX%y2~gtO1W*g<;rzFj{G_4JxV$(79`I=+TbDYn0l;1zfOv2OKvi>H0AgO3KhgMW z03hz{Islzmm}2?^40$^phQP!bB_T|;&Ip+};p>KBVL<4N(C>kq zBU9J0$h=}8Qw0n7E4*BLBp5HLL^P?j)6RJgK52g;-Uv>Kr?}V?U7juGP8Ht`>%o1I z$YHibh|~;}Q+Ob; zLZTk+atI5|)fLW($UTf_Cm0l3TC9RlK<5vn>FGiC4UwV}XgY zHt+U_zJe&ZKnW11%(_+PAH7Jmh5k(csE%dcfNHfK_*4~d__xZ+!0y?yoAOs8dz3Zj zX|a!p*5VZkTiQfACh*&_PF%6VfRV(y1eA*9XfEEQbaIZZpT*_S2(?CvHi|(iW?Q_gc8$xGCJHuVdVARJb3auRl2MQ}0yVH=s?&{b?9kVYI^C z$NY;-0FD9>K;$!3>={9_GRz|AC^n@np%|{q|DChHkteHX;hW5Jd}g)yC1Wh4?J23R z;w2++v;0@G2y|uyK6bi`Bqb4&*&eR?`BPb>-7HEg4MPx9(aHcL6^2PSQq*ZwL0 z*pRzQXbcy7jxP~)2bwmETh0~@y0juE0+~r*I^u4UQ(=E;y%mLgYjMvZ59dStC=D-K zSfFO(Phh?CC!{0wK)8<)(Nbi>c*xZ~Vx4S=SK{52 zD8kp_wJH7wo20ygTW;B%(!SfE@h8!C~(3}y{9Uz0(Y zoR<2Q$h}c!`Un@6=_6b}t6E9bQAB*PWnYR^&Yyxn<0{_=nQ)dlUytNsTVDf#wSCJH z;n>(&IhEgg&H`9DqXIvC*%~XfR`_i86m4)khbq)57M7%3inHzX=QPUl3l)%LkfNUe z-eM=%DGLA%ttzuOT8s2g9?`#aRl!j_qHhVx6Ox~AR!qQA5r=jTX@7{_BbsQJQgx57 zO_E}H&n`?W$%I2%imyT|FDVcKa@DAkp5ktbT>;dL7M9OGp4ZNQX!t;lvBH+N}SGY>F`ol3>hn7gCkL6X=Y4+7wd3 zayg+AtZ(Uv8n8sE#1x=<_0Rv^pS4d*1TA#1hYiU;QyNnvDWj93VZ zL-$!K9m}!87H%?)OLJ5EV3^^dHcyVW7#_mZ3|YycbwCJUY#m6f`lcw`0vWJNvqtY{ zHE-?V&$Ex-O;y&fQP=Pg(rS7BIGTf?iGt)jA)y#MOzS8Hlt3|TNQPTICRGXWE8LRB zBVgkgx7d?ShJ;lZS!0#c%}*)e2=uNvy9S*%kUH{V-Vew}q$B1i0Y;A$<}F}Yd}qK! zSzsAa4?Myc1=VbuMs;AO%v_UlI=xD=Ao!8{Al*QBbrP_ujrkB&MZcZyDz)_5QdxqOA(kaZb(Uyh$s%;)htLW zC3%I9hJOtShG*U#V4-^ZY}fM#xmIZ{=Mtz)wx*UWkpvx$xcBai+t+9rYq7rlFj$)# zl1oiCPiq7Y=sW02?I!Rg>xf{?yL@%_6P>8`-^5Mr`P54BiYe!&I=0jpUyDIM=+ENEk|_w0}gUypB&l1Dv&Lp7LBao>T-Mo z4GCDV>!M4tp0%~cN)N2Odi9&p<8T+szIXLOJ_Spc=wKZ)ARbaOqcOzJ4oq#RVa{|0 z<~XJ?Mg_Pw<{=*tYsJKbwI8BJjEr?Uu(Qt+(gcAx;IbtmEPuhQkeJYZRRUp*k&A^V z&Z-STwSZOqT8FZ=kvfl-@a8C+2xXJNt|xI;SZs$lrb1rt*H?Opj-$CPlH;$ZMamYp zoWOl(W4)Tx6$fHS-LN*^gqp<00Y>x@s7Vl|D_FL@Q_7Vh?6p?P;f5|CMM-fyX786B z7UAipHKZ=P`_^knvnHA18JFNb&VlafF1! zh*#ZTNTLnrV4)w8hEqj*{NXGtRtM;yO)s>IPtXWDlSJDoI@3TplT^x0bS6s+?n>cU zuEn6XZKKWW)`xsUI0;DyV}+=!rqw z>AJSVgR!;)3|!kGJ8IB&6u;-%4krBxZAWH#(f@U|9i^5M*Ec2ULuflg*LI}ln4{U0 z9*Ob+r#9Djpg*QrqP-&vba=*10ANdhBes|ZX#!D&F+*Vt3Xt%{$VNUf*RipxPvVO! zK)5JO0otHkPel~+9n=&c&M^xLkaS9|ZGy66(pUjPv2;w@pa4}!<%$Q%1F;~uf-{gX zzYXc=uf%fpZTlry@CQ>ssz%DX#d@_BHgt5XJ5(KAr#lQki0;5V2CpnbnXW>t_2U+< z9Xus|Mu-*!+4(1YIa(x8Stt`z6km=T)OkAHmm?D&lK{?_z8o3|z8q{tyq$35Pm7sBX1P9f!8zh24?>vd)_fw-G4qK?jCY?15qA{W#3w=)`D^$@uI~}S zynr}5)gvMdmPaHmKD0+97%|Kv0;iN%0-4K9p?tw^+(DW)am73jATiq*=>UQ_CEOum z^npNQUrLTf6ow;LZVvK1Om%ax6mN8M#61(-trON4Rm^ngM+TH$?;muN*166XSfVTy zSe9JUHiKe$MY|L54i|fMrN<}|cO@BD`P^H%oqA{+qw&FifllI(KvMl!#D7}d=6I+? zTy`MhE@FBlQtP0k4q3T4lbaj|I5|)$*s2}v;(I?7v3C)Z>la8ZJo^?Z9;Xf2ZvVVp z)-zkx)3kcX6Iu2Go2)z z2s=K=*LgAThCX()uDXsi$${P@gtHQ&c4fI&5LuCUYTMwEJ~7=`!&A4xlUbV&^oq~e z2H!G+sbyn{KX*!s0w+;+{WJ#kBl?%0WhyL%NwD)SZw;hRysMg)xV9oB3rD(Pn-|f!%yO3Ir!?zSSte zz*wVThdP)$RBRQ!`tXC1)n}OXFO*YmSktId6L18)<-@TI-60=NS8iCQ0|Tff_Gp0A zhDLB4e?-y2Ho(FL%E06+mln7SQ(lrzF|355-85SkPlL^zF-SIsbpYC1^j zGadv4Np_N^lKL3<8H7UKG>CEnn(GJA*klmI+9@;6bSmPH_fmu0h-okJeCp}@yba)fv;xZ_>a zrki2!pUH>6IBU4@X-#-gdTA=#AlgMoKNJRa3i72m&)Lv^+g_f7`b?Esuqc%OO;$t zb<4wHAL!VPh64Er+s} z=$xLd`e7L>fP{CzU3`eFF3hVzOM-K?*6&5&KTVj5dG*Nv4&vQ zNsaCkTbUIG2iT@*Fiu!Cra-K&F@+?sHvB{Dm;%R_Y$eEg%cYAnrn!UZYT`yxV_PZs z&$w`R(feq$9oTcveBYJKU&^-zM(@Y{ZlHTAP(R09jPPy-zmXRwfr}*^r{}zY&)~(x zU6h<4ffp0xki0$Gs?}key3xqh>jj;KF(hyroZuXki`iDKair6GTDD3~OgdA?FeiciQs6GK0SZ4^}gT=E=b zxSP;$Nz@#U&~%> z_z!8bOM`EP{0~*gf3!mWqeA|J_))1=R3PMECRG!6%2;FgudHX(W{iT0VGBRpZkwpun52w3h*f!NPOq6<2m z5Ef%`J_9UlUO=oV0N3FNifBrpbU7;IhEnuAGp|&Oh7BW7dBHJ*lW#8?Ldyh8*kaTD zX{oYM!>!snAn^ZcC*547GrIu3xX8Fm~1Yky*aqDbTLERyq>nGGJG(}LP$ zy#Ph5a_o@Om_zC&D-}8i(Flhmg3Rc9MaD2V!liXx4gs9?q)T0u z2_$W8h>ol2(D4=4ZT0HNCFD!Ob|$BBOJQvXYI<2pbB7U0kdm^O7js$Oh94kR0Fg@~go@~{V~1%86`gCPxG5SgTbs^}NJmpd5saJamOpw@u;;eL`8SVZYY5u-1V zt`yjFXkwx$SNPK^tKV9ppcOsW$xA$@AQEb|WrORmlLrqF2aV`GAwUWR&~_){YTAUj z%)nmFIfP?Gk?}}hiZX7XUb78piG$v_))^(m-~YWUEK)pKEVn)g?2qU?PcEQKm|w=Z zFma+zDI81hC0g;LZ6&<7&K)IX9J8q9(#Duk_+gET;Dsf*xN(1!>yM>VJnA(7(Qyr2 znj*DVdF!BUh6qtZZ zvGU3LY}m%Wv)(WF)IF~s%dH?p?!4) z0-`I&8s6TU*KF^zReRpDb~1U(ovP)%I$4HEAPf-r7jb#2CIEy3HQ~B>hZ9aP5o#F# z^02iWd|}bjTH8Dj#mY2^zX%!|F_@0BP-?FjT6gik$MT+&ul@|dnS_uSbnTTLjiv=q z{!8k{r6lpf*6#z6Wv?W(fmS??5fwB~(~4K?=_qFkQc+s9;D|6n=ZpEb=oHH6Ri&YX zosxzUVqaVP79xC!PJ1<8z^`tA5o^dVQGqc@*IJAVSd^~Uh_X}|4@}7q`V#jzgofhi zVNRz;@#FC%PMc3VG|`c!>yy~@N&J2}i89}4rl2mSX(|dm#cM|)pIn_m1`0*J|D}_( z-5Gn3umha2<({MR_h=IS$q?UR;p7K%f+AG;r@KgspMnT5&HQWjCXHs|>c4VxQfg1M zU5Wp?0J*6^nSMK}{%hL9gR3_G98dzur3C|4V1k6u;U~2j2ppE!Bksu+n4`RKZRHU~ zDByS!VoeKV%j9T!lqab;5x_sr4kCGF=_3e39WW=a;qRjS zs9em~hY{A5R42nsbVw;K?OTD6n9aIfTVmLBWX1YjTtB zz$a{xU?I>lBxpOt7$^@|>4*53IgYsk+Fs$G_K$~C!4+N0w)F|hIf3bvK*6kju(n7QB!n?9C&+Ms{?u&%Zux)<3mCtg2}d z9XUHMptiR!ecv8J+ixTMa0pPW!Fa0<(;}g=gMyIL|viF;RzZ^rtUD1Pc4y*+rn-5Vn7*=`l44L z8t$&eEe%Lgc&N}R&D!Q@L%^Bv1+=N*?I!rrbri#@Tg|rCG8&jbn>scGw3hYD?Q z)POX~pv*bA>(K@#)GM}_Ges)ew10o8_~s1~0OFWf^RxsogjeC`Q~*A;70i7 zeky&;Upr0p;)OCHcO5PQee z7nA5^xd)smpqecNBhU2!{8=^Z5trKU-YoaKb8jJnO$(+|tbgPtBwlET2m{wS^)zoj zQh7%(N7O?ES#5w7WFh5(B+W7yQa}bC=vkJf7_?;4qeD z_QjB54M+fxV~UT-^}zFarK6@Zf``pb`Hsy0+E|ICO(!-Ystk1{qRt3!CHn+KoKaljG3Olif`q;w0tQX7`y~$!0aUNCGRctX3wePh}p0g zGSZRIjTV~%DHabm%_{9v>x|6fh%&SglIU1E5sn9dq7W^$6><2V$%&%QV9H`b8fdXT zFV;C(8d=qZ&Qy5TYza&)+h)~a)?nGPX`o|+vas?nD2(^AvyKO4*4mG9P*97VEAfE_ zB@+n2^tC~8B8hbvq-Ai>p&)41XM&B+os+lcL8h~DF;Bmo$=4P|zlx4`Fl*W?d!YB9 zW&7cgB*Tyh=X_Q~fl=8Gp2%XYQFt)?;0ey35KJC`h_e|&vi$Z4afp6(?~1qC{j%RL zuPCHZpX~KF-XtG;lX^pt1^1uPJT>L&p+DgUD)jy^a+@(X2#J{fat~Ao$3qApJvKf| zAttZV6tDa5x6O8ajBt*%O!_v*Bbpfpo}rD2#~aTBy7>P10mzM)U1NOWC^~eqdn~ft zYyQqG+aMTprDf8>45{J?@ePqSN-{Gg_i3!j2p(=8httk6_P^ggh5wWd|ExDLwelU- zY%0MTL5x(W4bPG4OQ_HNS>|V+S`jnNVoZbZq(_Jd3$@XG4dLXH52I(}HvrJ0aa3yz zpBtYudYv#9xSYI+2QbuY0dP3n7b(>7Rvk!sB?p0&^sZB$ehJup9 zYzTHHC}J!_u>L5+U>Jf`$r7qyTZ4M2)iNIV5P&aOm!+KFsUau`EN2`cg_j>w{<`fO z&Kj>Di@$g*`%>0<;e{;nhsTCrdZFpm+3WprE17ji(@V0nYH8Le7ISyw!c~blh>Ks8 zFDJGWos~A`@XDx{9#v6b5wnfUR4VqPNKyff*w$fr?EH8*cTka8tC4f=?}b!hb*ar~ z%EfYWKFJdv88{Hg?}=YZbuxR3_+Z{UeIqGa8_#2%*Gw!FxrUxL`MbE3XcEM!gJ;GGmp)m>7J>N6d!iF)klrw1h0=F8>OrP6O!RpYUWT7l=O%!G_`V0%ofE>@ z$dFoSDrP36 zMOg71@a*(x3EJ|P-UaXN6~tCcVT0#hIUd^8($Y059=Z-jTg~Fn{_u*Q0hp}LYI^XO z+3Ew79vP%8tzG_~Q5B*IdIPfO%FGZR(`xD*zUoJ_co%2iY?Rdg)4ZoVKUKU!+(lvz zuPX|tl;!P?2e-oPmE3o2CbygH_ zOqawF;E?ySxI)o2MSdVYPaP2||FjXk$B3F5kq?CFw>}=EZeea{H;m;aR#rBP=Y`c6b|AtD5anoKc+~>SR+$nl_Pa< z%oIV1gyU2I@<;_CD5ZataaI*f4uZ}G)``lAJW0&zn#$3j$U`^gKjcmS3euik1n##! zw+NI|A}jXE$LW!R;K$;bGDaT*f!LM(PF8V&xiJQ`kKP;_94FzY8Y=?%)d(Py%os-wF5q%mUJj--y=oqpjc`HK2Ks@%)HdIsvWml; z>Jk9XL)4+7$sFjO2L6GTC5oi1Hs{-{w#;Uw0yrO_g{sm`fK?U9W~)k~psGc=AS6o8 z8FTsFe|Yu^{5l^8ts`d)A0>DMPwy*V`(k6)W`95F~j zj;frb`#1?@f(whk>2lqsVlq5Xi zWYg_C3#jX2Y92zTW2XqvgB<+`T2nE&H{Bl;$s(sF8+J%mold2Dl}v<`b1L%Wc>+=9 zCBDck29gK9sEi6ZP~zsQqEttWi872&tHT7~`d)HAhQsPG-^zvU4MTqjN0Bibl^c(B z!1N4b7EMw4)TSfM04kF0yvYnW2Q)W8$f+XewhUVNA%Jk+%ni;-ddwaNe!>3{W*+d5 zDg{ag+a!cs;F-)hARNV^EzU%{(gC0Q9ANgvvEkyvWMHs1Awx|om%W^hW55lc#KXLR zex!gz?G0{Qz)R(Mn+12UOfWtQ5CuY>Oo(}R;X~x@u!BivOE|@cjDW&W6xJ$}Iy4bf zj^`byc@QxtAq8ca{80~r>J;~|v0J%B3Txy<*+vlcv+|poZMg`-Ua!xhvo`UOa%DI` zw*p5%j;OPSpwS2(uz6W|GL*n!S7xIaO*N~Xc+-lkkG&PdSy+aB%m{=$XB$v}AY>Oi zPHv2H&kUl-MSl*>LX|PSmO7#JWZZ+J(kx2iU=kmo4m%&94%a7F!^e*kT9gfWO1E() zP4L7;YEUMI!(j4r5!84wOUOqpTg;hDaTMmd|dF5a#$jZ?sWw0FV zWwCv0Q@wVMqjI580v`qNGgxO91E)Ahh=u@FDM&-kkbw{7VuXVY2&@5R<$Gi#m4BQn z4RnFqCc0%-|2Xh=Dh|is7)S`JsEkMK2msJCgzZJoU=c1uu?a>>h} zN%4irYS)|u4!1upZ}@j+8aF4XQ&NJO$k^C!52gFZnS z0BtCkvmIAFdw&pyXM0e`2}M(gD}JOUCVEIBkjI^eI@fZr4-uSZ6hR%a0vtWKhXP!g zGByMb7jW9H5ATYa(zL~@(4cQ7r2CR|=!VE}RuTFheCokIifX`x%LXKz4;QN93K#Tk z7Z)8UB;%NNmTE>_hFu7K!x?vBGUB)k8Gb7I426)4gE3-?!$BQP(c>~O1!96J2&ym@ zo~DkwO&R+9gz*I90M|Du7%&mSV8gGN=t=Z)jz;)^2`9UdO%w-_!>}g^LX?ibdNSv*JRn8B zgjZRyO#JDgg;AScW~-?7!)I(2Bq8qcRgg5ecY?zl?-sr1!mAVE6&P~DviI7e%L;eD zVgDVr%<_)?zi2UJ3ST|myV3Cu_gKK%899g;Y=5<5xcD4E4E(#{nMe7E)d;$-<-!uB zJoC66F9EkWo-qPl0l>K1$>|Q~h3E<=AzC}svIg>HX~Y4fgwKJS5i#?U5-Tr6jM6fq zCg~+cC-XVy0Tj66hh)k*k1?>DdCqwrM(7w+v2uVEr(vKsSjBeHW6Pjtd1NH&*fr%j zFQS!s>MDLHOF1~Qioy`+#U6Dzn(&k3YEchuFV2Y`Et!hm5<+h?*B7Wz#b9XvxHR`~gTga59FjF2n{{qn#N;F9nyCJdA{v z_>2%JL6NCswL?pEN12r*+hExl=Z&dTNl|paZO?QV4Q*(@w+fyfWkn_N$$3T>d0^xg zJMzS?)R~ZUwWMd#w+hCMqBkG@?f0%RZr{enMm*g);q)y)f3saQRA5f87MxP|V9beo z5I&mmB5cwvic*@Jqb)4!-o4**&mOu@BjiFJwhgQLByt-q5(EpCd8-ozRzYKen1Mct zc8%D{i8CG$d}wrIW1=fbCJHw#wveKeMX&_VxzIGy2!||SCXFl1 zQv~Dy3{4}AFdtflE|d!z<)qR`4n+V=3XN2xq7jm=mh?=jXhi?t9G6Bp88pIHvJ4s} za#y?bqRyhkBAN}gZrccP8f?V2Y}Oy-XoR>m8!^`@u(~uRavA~Cj-=F4T?%T9?TwJI zfkw<^G@0ShUxAi!eRP`^_4p&;!; zwhknN5|nUG8!#Hd;G)JAF`$a-Y+z`YgL1*x;iOoB!j2UvLJJ<`GxQy>1Sb{)F<{%a z9hod)EO*iqP$oFA8AuwA^XVz5s*6zx5Aox$oGJDL6kwuw8$4l%sRT-|Sd4ft;W>sZ zNt6o1sUDCrq!KcfL7_CXFc+{fW)KRu5VRd`lYx5YS*0}6RQ9<>lU5zdI}pP#gfx|N z3}GC%sZ6lCyTe{=;Gar?uS=l;QtJRk4M|A{rkClcF9YCVzf}`12Mf?o20t8DZ%=-h z17{Q<1;#SWx#U5SkXUFsx0R6O(E15T(u3qL$f| zMs{GG(u~BOrA`%Vg-&Ha)v&dyyq`_0f=0lvtI61lDKHO9fPanJ zGl5$-NJ89tVbsxNoMlMVF5E@!!X0WCR1Q(Qa(Rc^g`EIU*QghPIX{rRb zg?M`<+`%7RiF#eeV64zU8c(ky3~NDja92AM9G^{UBB@$Ps@{>RJh+NQ+L%uR3iTjN zBU;p-a1N2Dhl&1_hZs-eAgZ?hpf#Pb}V5T){>7 z+5(zb=q4doGxaj^^e2M1Mi)&{#eEr37sY@Gq+}pTp=ImzCoT3~2u^F^l-`WZNxCDJ zy}Q$wA<`qtX3A3;letBhB#IG9#wQ&T-k5cmNMJ-@$`9j-I)X)-2_1-i3M17l`f^0k ztuSSsg+3`=7+s6Kh`Vv@-hC|c!LtkSCayY_g#M(gos7gc}%zAr2bkca)#Y*OW+D8B>qw zQm|J`ET}`#WlE-)lz>ejxS(=SW)XLRf_B0scA5jIghP(X9MF|nWO`Bpcj)pAk#b&$ z{X|0C3vEGr;b7uSwFsU${o&Nf+Zja|GOs)N@@1rC79l7u+y==qi6RXAw7f|M8_ntU zYQp2pLIo)YYsrepAl9xQ5s{D&5jF_qK1h^?i&;CEtM_E-U@#%D zgOO>Hp*iBPWMH62)4(Xfvj)gz;2W;k3cv9Qo&{`dJmC{GToJ*ObRu*xwRTGG@puWX z#0Za_gdfODHfxZV;)XUa&LLev)zG zbnKaXXe6Uqzu{~vybNF%>TsZg%nHWE;NVG^L4FvBDQe0%9dpuRYe{%Pg%E&-350NVH5?+w~>-$0w*!W8&voIm?kMhPXw@HZrFDc>*Sq3s3Ol1|Hmo5$4Gk6d~9& zqCUX_6i_CeSW!NoKoDTbCm;wsigF--F#3Vz`eF73y9CN&G1%lvyu*THcoFQ6VPLo% z8AON@!K@rX3A+=C5;Dw17-eDkaXG94Kne}6+&9n+Aee<4*7Na&Ix9+FEhyeY%}#7k z!&pqNRxN1QEeM>PMnwBTkGI1MVb-se0py5LxX$E=L)LwkXD;mM& zQz3Ey6tr$C4nSYc)6uu1w5T&@=;KLjEg}dc0|Y&vWigsjARZ*XN~PR+GuEN=dB!FV zs^HiMH&V1cT`|QRAgko*tI8q7N$^g0k8Qe{!6D zlCl`FLAnc9D$>j2LV3=H#q01QeyWtgC4pq98U=}x1>vjEruhPP2IU(85ku!-$TD^> zkUT6yuRA^qj>g?n2U8wvG`t6R4FCWLUro!Ehk<_$09C zC8sCxA+|mUcOheuG6#iwX-OS@hqa~PrImq4As7%>)DAGz!Z$+LQwAFK0WsPebc3s$ zT*+qhAqk8svIEH%MSl}$Y_i?PaX<=ZcR*t95Cf9G3>sXuRVSl_Y)b{OqyG#n7q;h7 z_N?qO#mx(9pwB9m$Uz2dSn!co&rtFixW8zJLO}{8=?SBaO`^^D(JDl-z0tELSdsYg zT*m?q)ynw-6{AH9vip91M$H(lER)JM$k_zY=L!kC2=0gp9z3^eIuMQ;^?(kxfvgBr zW1N?$Cet(LqT_F(+j{cZGcfwdA&$BGYxY$Rtsln%R zcDx18B&who5HT)}`C!{6U%mS28=F71U(<1En1xY%C`Kmq`Z3@9?zyF}t$*v@uLwXp z40Q{hXN8`L;RUy6H8yb|UIK}s9Q>&>D;CDk&JQwSo4}!L)T9n59H*5U4Ecl9pilxD zi<%CfBoA~;b%>TK33;RjA%s*3#KYXv7+nM%qMtboig<+MEvECl<-uziHwYTIEXxVl z>f}Uy%&@bq*fMmz+~o;;D3K$sj*)gb3|5+zzbKKS>nUjFSxRe!>VLYaCQ>k^PjtL^pOE)FUM|n&R2%sSl z`l97hx+<0BQ(e(jrU2EKQ%Qgp19T4#=FmIjNK*gm z&p@eIU2M0XhReUYh;?=>p<$UUY%h#K@Oev;APyH3u>{%1YQse%NzX;H@MZ`l3TrNs z!N?#lxJU-&dKIk>SR@OlE|P_9n3P2_6{!}F;{1GBXf5Q@ z7|x+>L^8MXkD zNJi!HO}ESy!kla?gtP*o>Wvt(up$_zLAa6Ys5r!#tA<<=$r1P0JDI?s~Bouxpg!K6&Uuv$+rcv6(b-VcH4a#F0b#_05akQd5S5dCRZS!i5H z=qc+e2<2jk!mS&)LSxgyx+o?iaa_Slia4@34lHm*!JsZHDmlDcvXbH%hhR5Q4k5Cp z0@2{J4qzlkn9f#UF%GIey8@_(e{4^06+&QPoWR}oD`5f&LB=32T9UY`K|=(mK&jSy z*FrD$de`tTp=_Qctd8=K$@GUwG1RLZfQaiMDW_yIu)oUojd=0JiG#r4A>wk?^@ zSSvP%*xEu^v=M8TDCMx*k+h&7zY(C!G|jKyu=*gC_-&{qAPITvH^hhw?#ig@c;t|} z?qZLq!8D{f8L8E!w2VA6F%xGlZKe2(NS3UKyC~&hM1=t8z!D+N3$g1XC_091OKQrC zWUV`)2ibY-G;TQ2fd*KO#|g@wKd5;a<}hofRLznCYR&;@HnLCSHEa|@4Y6BKg0LB3@IyHP=%^}&wq4n_N)s<8 z4nXLTyl}Gd8&q1Ya056}Ux!obu(?7K8_7j-9CH#wvw(|*Pp0UZdpGAHUBF3q8uuwt zKUV3`ZBPV^9WDFzAr}tcNPwvuPe3t83oZx=g|I1-+7AiCg%Cx>Nb(D~h@!tjHHjn( zPD#r5i8-eUB+rM2g(}KsN|h7$?$Y4m5W&qy5g^(4nTaHvmWXqq&Q>ktx(oXjiZ<$J z(zXLd3mK!OOZ84bCjp;9X>WMUNJ2I1!s!lL?0R=*gKayQhoeQE9W%%ij@;ZRAl!om zAEsp)`;;1OIwXI>PnFJo)L z7Q$T>;5J)r(?})d1%dW(5sd-SBTzehQ5?wf99$%Yj|G#eNfj5`x$dOC*c|YZ=GaN0 zOCY%<6&eBDGNn`|6)n$~DwnB1ndq1RWFF2WXHY%#$e5bWj|15+gof(BJZ z$rbF?6p`?iUmua=!?(~_Ftw*58cy;P#mJ6F3Z>GC+mF;d7ZVil)l!I^oMp>kt3gNM zM^66|F!=>+-97@uovxr>oUYhY6u6x^|I|bUO-0e;?E%2RB28!lP?{v+_~wT>r-(We zm1xRDMfS<6qzQT*J9_}aGEt%Nn%zi@*Rtoy&KsNq4Kz9{zqh8r2OAq+)2@`L05U*x zv9m~dXm#HNg-vPTuv{^MdmcIz1TxiGzr>m9D35pMBa;?z43A~yoSpL&=-8NEa|WD4 zQrYttc!2Aam^oYSAJ<0Oi-kX;0`b)rz_q>C3YnRl6=WFj_tJyJM|aDgzvc=oWO}6 zT36(O7*VOAAQGlRbxJ=Q5j{m}M>eLkl9?NrB|i`_HJsp(#71?{0tR?`H*th8xO1JQ zY`~s?#R-@O&RqxD9a{&2u;;_JjvzX%NOZM31q7h$639^lRU}Xi)lMQXJDkNJ^dY_{ zf;o^okYK2dJE;c|x!G4Y$N-dfY#g%*V={@xci>Yw{sDgJbqUy(J(I2M0E1MW-)xtg5K&hi{Wg{^EHdXW=YQr892>? zS6H8jCAa~dLlBn?Ozv+$&vfzU(HV%qQbM2!)VXJe%_2`q&WkN#6cP4X1sF?+*%kP*8y1!M{K6cANJWz-Z9ZNSN|SU*Twltdxm zc)~DM>U7tgH>3H~j9hSrE(!kQEIRw_kHDP$39uyP?9U6iGi)y-Z}!K;nbYQ!X}`h- zaGnQ&i;>VWiX5n}v2EF599lL%`@5e5sI#&LM{7_EiS1Q2^eY)tkt=gdM7Sr6t3+00 z7Kc-5H0Ye>XpXsnii$wZ!QvMT$=p7ktCqh4c~lAPB{2F)>*$QoG|+oEF3Ne0rhk(+ z+AMXGcdl&mMlwrhJHSeGFt^UiHM7nY zbk@0o+1I(6eUA!jVm1)DNh6=T&ZWGdV=vMLCDm(^wX1wgc(tmWlA!^&JlYGvy_nQv*=-jzD^k~DA;Jgq-Fa6w&0@Z zn(-XD!&6Iqa>w@LLfcb2w1-}(Al#kkiKMhWO&i6jsfjV%$plsgT~3Py3vqWM+8kpE z+E&VXb5f#=E!=OI9UCWCu9VTy71uN8iT%$!^YQrRq5$SID^gS5da=7ZTo z5a1~9u$?;aAEaf2k;}ki;@t}$4CQ0$_Yusbc#7E*?S_Gk3_!ah?T<2ynZQe$Fx73( zA`wK7deKbmVCULj#U@r3zPig*HtxE{*j5ITY@VFwXs^NEs1@NQNzOQez0>Ne;2 z+poo@_qA9HTqf;9k>@c7_?HX<#mN>8EqEd~#c|NNyi8MM6Ll^~Av=4&q;fcposhO| z+PKLxKaOM8nkM{-7Mu9QHf)PnOlug0c_YRl91Kf4DDtni6@9Fq@im+gG_WMlfaNKq zcC4!%^;CYWyrKetY4lluVgXAvPc;F?m{*R0KLdUgdzhHv56=yeBaO%CMY)*qK%ir& z>zdH8X*|QOjA<85lt4<;GG1<2#&{fCMn5xj72lC58^)BKy{rhr);7}RE}I}9{6$Uj zfv*@V9tMW7b@)zVB5)AY9|XpfoxASgMDSpSIG5BcqeMr!JR?#&fL0y&1i^2ou8wbE zsg-qcD>z=nuzqL&zCJkU?BTm`({Q_l_U{105TOjm68S=>6Xol0)FGk7V$g>Tyuiwr zPaa|}oe1GI^qbhF0X=MQ0)!pWQ7qJ*EP%;7l~pJXR43%fCOp9eC5?g!l<1>k*z2Wf z!65#pU;Zc)iXas>=#65VhN>$XB1@vt5SUUy1j<=e*yI3kz77W(Sa1Y6=z2g8*-;5? z9$l!_9|MA8DFkcK6ULgB{3)M$)6jOjpWHw0NkSDN$xTPre zP`ZH25p-9u{9N&x$&(muFVT=AFUYi9(!>ptf{Rj^$K}{lv@b`ggSyzW;N=0k1y0ov zHiyawmk-VHtb)qu^w5a23spQjBRmX_=RxsQG|bLrt1nj&DfuuVX4hBN??ga^37oZr z`Pu8(r{jAQSURBu%fzw@6b%%~iKZA+FwqRBOf-YQ$f<>;ie%20j%phIt}&+ zc#HCD=p3G9aK=|+G0FaRXU|g-`4mAgU(>)tAJTkT=S_Fv1~DD0D_+qn+<;Az^TIp~ zTas}SOSoLv6HjJ!?6fLNwnRu-;*SL_AcWEkr~t$jnBmK-iD0X2z2GD?AoT_-xQ7NM zd=D+a!+sM5^o=YSQ_Mv{UJvcmmM%-g5!K0#dVkbXgd!^RWzVI{mT}?2igWB22JCHx z>FCmihuTND=~=VCk!#5(Q*9^LRVMZTpnu{NUO9jodmsa75o*AgpsSDDCorG4&#Y4i z+;EAM>(1)TI?kbB(iIwvp2dV1zlx3hv7kUAq%X}Qr9*nZ z8Uj5F=dsH1qul1nmc*8tAV?QQO>u;ibUcGoZuL>|oFWnh!Vj71&{mz)$|6Kt9ZQ^8AZvrSD zWU>8=Re!uFOPI4j|k$3U?|`XEcto zFlnew!Qfbu&;48ncve2<=+q63>)LBrJ@}i@d5i3qrE*#DCK*yIN35EyT*`iC9|gS1 zrR<4zD@U69D#yJ>-~n1HA+A_Q_&uT3*_5KJ_|NM3NjL!KVEu2A2tBdY?T=Nl|26jB zB@Q^tlrLl?;qL?42+;?h1Pn1r9PLN0f)6D%Pw*3VW^yp2u8Ofi1~#5(PQL`hfUd)T zfC7Mhq;%Hxj@bWbp&Wn}(^12VqgfoO3|K!@@i6EqnB(##xybQA&J>C$?tYNqEUa?8`wf` znT26#n>Hu&4bDA~q%~gpEKm`AbwP4S&zpPBG!Dclol9)?kV!O)bc~uzg;zDe@5?*S zthTs})C7t+!7w|D%nI4;eE79ep3neR;hGnx`1Jkaw<^r!M;dM9tSAt*kLJx}UuW9OI{4>RUxsJnCo=?~bcLRSoOc~Jy4r@sPN1PZ=$ z@{jT=q&JV+X@>?kcvkTA|RH$g%M&AwOD zWqUSRCgu{~v^mRsYKx)c8(kDA=(q4jwI5|8E|0DRcV(QS37)|#sOWqJeadHRgh!eY zq)QZ4IDD)F+BO$`z{zT68`xWKYhhZYtUqxKlQ@+Uofo@PFayT!QwC%%V=6x&@K1!nr^9I#@|m=Vk~_;6LeQ0dYS@ zn}|y9x*wxE$;<7j6R>T?@5*jmct{!Pxiz&dPF;V=Z@HP;D- z*#xL>dnzcp$Y^0>A>$oZLD_>kRr4Oew_A`2w{gXugsUjYIvVO2=7aotkRuo@_i2Fr zM6#;4bc`cTki&u+n%e#<5~>Uw%0$foErDqnZrGh_V5@7AGt;t}@nccE&>h^49?%QS zgqsClTqdW_R+;37W-Y9d&W{5u)MSi}4LW4|)EI^;z{}W&{P1xAT8e27Mxp5KaBO6= zFgunGSefIBIhi;QL+`^087LUS=VT21uqX2vipMlo6{$4N=AFl_&ZC|jJqv`q(}1Ug zcr?TO#HlsE!K6-arbXRIM92*6Q{vH$Ck#`&ZTA)D>w?gVfH+)wqA}9PR=7+HnI-qIj8h8-%E%v+! z%Yqq_LX!njWM>)~=G}$OS@_h5olap$tVNmzXAZzA@B+bnQ9%slaLNP5NgSpL0>hNX zQJRJybSkKp>eP2xOt5Ws%MEwwCO}gxc>tq3DJLg4B01U%G_<{2SxgR&1T=KyNX&r) z83?5jJxnkyXe2NjkaFzEh)0aj3+K-Xz2f*36h1PC{)$^fNj_$v=)#Fy3v@YEQN$_I zZm}3L6f$7Ti;%(I`r;=8wyZ)?RwB)08*m*PoU_c(gSKQt7gX&AVo*o+gciDv$Q1Z* z!T^A(fHHivzpljBj?l8-Cb%a8MBrdbo|nF8e?3lZ#D@9H{m7D&e}IV$wTS{Z6Ff_q zg$=#7%)-)V%6FD9W?}cP$SlsbWw(fws&;` zfGNX|LO{vSVu#|$fVmJ8$&K<8fa)8qwgC*8z>EYVlDx#9+jLzQ-(qP6d|n6DO3<$s zYBcfIqoV663cUt3y-QxU8F`klvY{M6Ng`}}l zAn*{s9%kvW8+9ciFtV_9zcMzOTj5#_{QyRG)nKTAJi;yAffDif^LP0bsL{5cJpTf%`pFtzxuAZyd3>07d z>J5sP?v7=D!AZsdv?xkZpSnQvJ3T?Z?WVV~CqR{EPoPEyT$m#n2{2oCX^I6C43b)$c#xoO~?j>(TX0~KzEXjMB&~G5>f4l zqDqxYHYy>CY-*4u*$k2SU|O`PFfH0NNIH^qa5YJyA-b||kZs&OD?_4u>s-ddkO?4L zWp?%rsbdmNRs}@hMpjuxBw1|lP0$GrtM*12QVWRMtDBnUJT#~yN^Ch|`)^KFV!_r9 zMSNphAo?np9PBDz0i{c9H-squMXC$yu=DEpV5I8aOkxZ`#MT=rB8mmP6V)v(_Is~s zL=8|Qpc3weq5^JMpB1|YTLx4hv1~eEOV(hm6m1Hj$0zMcu~T%-vJ&m;G@NI|p5jb8gmHF4 ziOaGQmzlgJ6(jD#lP?tyFq%C_P5k7bAO<6H<;;(6Dt78E~^O zZN(9goOIzK5jb}lS{ZDAu2M=UFA;xk5hev{kj6NIq0chV0kSnqu4;O=YA<^rkp`zb z?0R8pnqnZO2S|e#qnRyv;!$?RcokQy48>h(ibuOzuF@0tP=wrgo@!XlEk@&bg%wqM zyrRMf&xQfORZFU3_$0+>v11%*q^4+&1i`FY$r*QQ;tC`+HE{rQ!2lwVTtEt%*kKA; zCzbKZ$i9%*L) zuO!xm1>^JyyrRkt?nD3sIqH~A@9t+OR=}VY)>J?j>yA+sUS zx41-2dRyqxI9wI)ES=}k^lG6-g0%;PV-ZxfWty5&HR^_vr@9qO!FE{?gYp#XB8Y)} z7*D@k|0t3`Z<5g<)={%#l%ED8$wIug#q#a2IU1i- zz(*A{EtZ2Q*bGs0EP_Xj@I9S}1MpJH=F1RX#>dCPDhK->h{5;ycT3MZ|GHm2{rFjD zN`@vZRs6*sTWgNeu-^BO7JDVXyn1eB-Mq?q)zwus^_6us<<(YYU0rS62&7ZUNyJAZei)%x~ZkptLkUW zn^H2hcJ{zQl~bqgHF)^&iYdb@rw$vuM=4TPR8E>Xx3*^BppvqZy#`B)ipr9@xtgX8 z*5cZ+xbGFvv_8J@XoM387vjfD$FDtpKRqVE52$Pg9>*d7;UP_Hi@OsZ6p__PH@r8( z_{_OBv3_FR#F~lICQg|+abn`fU{zl~ZQz{pI-oJItYlaT2nK>yS4~m$`Gv0NlW%BR zPI~?8=FP32H>b3|wze9LRaG;$bZ$M{Y+!kL-P9R-4H;NIXAVLY<#qF`YM5s!Q}E6* z_{_+|)s+?C`-2WZ`w5JFu>(g;C4Lj)sS6daUVx` ztE#4=a)D*l&a1a-r&&{K=halqwY1{`aV-}x6}T7p(#}F!_G>4vSAh4vzVKFr`F@O) zYgJd)Os}7TGOWo`nu;DVqNZ~GWUKbn%DQRQwe#m%^X68aR_W%s3{0AjJgRC=Ew8Ss za5B-pwQdlqs=Lz7TXJUsMAx%FW+`r;Bj+ z_c<#qoc=z6_df=&8Rc_lOsT7#Un2rb$@9AM`K7aKD@0BNLUHW`lyNwI#rVyys;Hl# zdRKV`hLEY1lO)Oss8@-gpo`eRUUL)}{%Ihj7O~JS}YwnENx~kJaT<1N; zv3XO$u5(1{rG~8e7~8C2R%LbNY#_rit7kYa?Ms?tIFPo-#PYohF}iLFj?%DwX=?eL z@~Ktz3tgTB*ttkX_UH_jh6L3zMK6dr>D0=pLPSk_?|?4*m@jns!^7V_y940b@1D5w z$&Neb-1hc&TP1w>+nXQUe&_t1fB)`n3Fp2#EBVF6$2{0(`!)%W+ z_w27P-JUDqW1qk0q=juqo^|K;LJ1E&=DWl8YK%Yf%=T^)KK$~7hSmQ0(u@AEy_bZa z9C23fXO`E$rhPv^!e3vu<+A5qID1Xk?}teEctowS-sR_wjw#KJeb!l{;>faN`;E=e{uMmTzy_v0lP2Ty^ux)pPd$&0{+@N_bZL zf-T>E8TsXVJ2p%BojA zE3Vl2wS)&$cK-0Vj`zNF_s;D*wdAiF!M(xJS3kcqpe5Hc@Q3d4o3{SxPdh2Lc}-dW z_+J)mFl|w@EZX?(g5jf<^bnrbw7c7fpFaKh%N`nr$sn&e6aRer^Melt?FsDn!=lYv{ z^=b(pJpYR;uef3M^<(sU2``^@#>UeZME^EXUnJrAo!(h^-L|7P&exYo_>sr2I&sz6 zC!W1ZUm@XrPP+7|$B*3esr7oJgzsK+*}o=k?0?CV`qdKtXwsT19=LYwyC3K`O1Srm z;cpFj+2;v@!HF8sJrrszjrV;O8EH)KRN2iEpOjD$k;6550i<%b^L1kxrZ8$ zN%*D(6JNgSdF$C}#u!8w(N*8QXnZQ+`2IJpJM_>~fBP5XYYBI`dh|VCTzK30A#=Ng2P`{w zZTyR#FXGGq3@Mt{Z_ve`e0*d4s=duz315?Y^>yD}760SWW}$lj_1;t7u!`5uF}q24 z`3vh#JNc0P8_qX-NqFEp>&?;IiniQj4v_H5o%^3$diC@RA2NqXICqi?`z18_w-KAR-Cwii(!Uf04wdlhxpB<`Uf<$Q1-%!3y!f&=eoE~~ z(K<$0^)o6t+FMm~Eo%xC5{4BZVlvghiYiQG=0ckqQl<^dQ$qe_6u>eZX+5>Ju2RP0 znt8KJr(kfIH(TWO48X?$w*Yqzuyy4%P=+dND(nIsg-FFutF5!0FA%0~G(C-n)_DQ7!<|TE=R8+$ZN=}Y7w1eI;*vaT@b_sVgy6ZhVSmy5L0ApaRL@zT38H4q8#x2IJf!iYgGQJCb zAJ}2;jB266xbO!jPu=j_uwdc&7hGR<>~ZI>xTstAck&AkIrO{jC8eV#o-}FGhs!Rw z@Zwds+?NF*bJQ z%i9rqA24>@!6#Q#F1z@uYo31og}gTX4j6ZAMdbw--vZ#rpMG!K$6w~PIbd8xWy7+& zHb1!KmDj%f>(b@t-?;X{EssC>{0ncsbIJn6g(SKfKgy;~lB z;>p+Abm(~E#J~Sz$Igbl*{8hwUVcH(n%ZvNC!MkQ*SG(6^S?TD?9p@Vf#VN9?u3aa zFFteA<6B>O`^&$6Q#W^I{k%&{C-o^QU3dGvTb_L3wfC+Zec9z@D|)YJ~$XVjPjF1mQf&LgMKd+O;IUwZwGKknG6S(6fHy%#uZ|47$BsLhh~ z`3<-2SsZJ4-|QUG1Eql>fv~BEL*X_#6AIdfj}DuGZaGmiVutaFOA{OMuox85^VvrFi#@6F@G?PDFI zg}H^fGebF{E}`SYy9dYS3<%@~baPN_K%h$~W;U$HtD;ed1_qk-k&$MBIWjyfvU~8X zoozZrO4|%HacXoy!-~LJmvxS{KesVh8r(Z<9x8c<;xxt2=!G`y8KhHCl zU0@E4E}2-^a9^b1nf}AfoY1hy*hp@uKGwrLA#i-OVQHssIUS;h1{!`Dy6wi?j)6hf z1(v+oC!8A$Hr&)^$?W)o;{GALy&%x=pxMGO;6#gYEUbSvx_9UtgXuwQ=X za8Br;NZ;tZ*r;Ux(B8qE&=Da$7&n6r=TGTzP$Z{e?a2w)(L#CchKFL(q=0<8dj%~QIF!$JK=Z15Z9B3{dQ_z0-gxwon8EAG17)$1i z2NW(jwHq}IV!ikX$Hg5&f##>%nSExc&2yGvQUN$o>x;PhQ2v< zunE$J#6fK&WGBaq(L9||ttQhDdfVE>yTN<#mi-VK3liID(+IC#i zBiDMr#}@;v-TRlV*}Zn{iOLvPFf zU|4CVqTyxT%Ex}ytoLN5p@Y?IfU$eRB@XD7yI9z+PXoB|s2S=2BP=4g6A6|FV zi+}pyC`&6j`b&Mw(GOuvMojV~Iw;U!xSKH?xH)BX*ALPI zIH5%o9pwdMdatNHEue>hlF``+m~ou=Wf&p7KnMNJ z?q+wRhcOx+ff3z^MfHK^d?TTsY6gs`9x~rT^?_-a`5BQ=j-i*e85Jl)IH(s#bFst( z0CN~#0u6IS#4s*5^*lYy;!NX-5qeP5A1%_%3-rmB7OFC|fSzL+6AX>=PVa04^~;Pd zZS(X#kQ?p=+eBaE3zD&TFUiDnFHQQi0kZ4DmKFG5)X-O4G(w-mtv zA;T;Ik+m?$p#P$S5oT_ug-`(K4DMo4I`GG!qv@jpNAMZ-3cmmDTm-*1r2#Whj3E^wJ{S55
    -(9)4rafHyx3hNx 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�#sC7f5W=f-pK(a#FVld0P(N!FgkThy2 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 z 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 YP|}FH_>#y^3WaI?-CYTy_+Zli1M-lDsQ>@~ diff --git a/utils/wasm/gif.js b/utils/wasm/gif.js index f75bf0b..1ba13b5 100644 --- a/utils/wasm/gif.js +++ b/utils/wasm/gif.js @@ -4,11 +4,11 @@ let wasm; const streams = new Map; class mem { + static length() { return wasm.wlen(); } static alloc(size) { return wasm.walloc(size); } static free(ptr, size) { return wasm.wfree(ptr, size); } static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } - static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; } static copy_and_free(ptr, size) { let slice = mem.u8(ptr, size).slice(); diff --git a/utils/wasm/gif.wasm b/utils/wasm/gif.wasm index 18e19500ba234e39e3f51c8c979cc376ce125f9f..622a4ff9063b6e1f0c7da06745fe1685bcd85fae 100644 GIT binary patch literal 53702 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 diff --git a/utils/wasm/jpeg.js b/utils/wasm/jpeg.js index d6d6434..063de94 100644 --- a/utils/wasm/jpeg.js +++ b/utils/wasm/jpeg.js @@ -3,11 +3,11 @@ const {version} = require('../../package.json'); let wasm; class mem { + static length() { return wasm.wlen(); } static alloc(size) { return wasm.walloc(size); } static free(ptr, size) { return wasm.wfree(ptr, size); } static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } - static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; } static copy_and_free(ptr, size) { let slice = mem.u8(ptr, size).slice(); diff --git a/utils/wasm/jpeg.wasm b/utils/wasm/jpeg.wasm index ca6b1c896a320c28190e585293affb78eff810fc..68c8cbd22fb6a3d976252d2ffed334e2a3438869 100644 GIT binary patch literal 91769 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 Vrxt!Z1lKMK7BYR=+VuY7{{SUcU$p=L literal 92972 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

    Ghl8IGR4axh9|ktk4AQXDFJG6A(|9iWr(XB%r^l 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 WP}kjG%wa!auD6is$=0QJ75^8v`xv$W diff --git a/utils/wasm/svg.js b/utils/wasm/svg.js index 854276d..f4492c8 100644 --- a/utils/wasm/svg.js +++ b/utils/wasm/svg.js @@ -3,11 +3,11 @@ const {version} = require('../../package.json'); let wasm; class mem { + static length() { return wasm.wlen(); } static alloc(size) { return wasm.walloc(size); } static free(ptr, size) { return wasm.wfree(ptr, size); } static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } - static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; } static copy_and_free(ptr, size) { let slice = mem.u8(ptr, size).slice(); diff --git a/utils/wasm/svg.wasm b/utils/wasm/svg.wasm index 232079667dc75ad4a86750a9db535fc5405698d9..ce3a2716c5c1161f505852d5689e72b547f3deaf 100644 GIT binary patch literal 1069320 zcmeFa4V+xnecydwW_D+GW_D*+TCvg!ICqd>Wg#RCNJ0XnE6^JfM#k8|35k&n4j#$8 z$l@gl(h4kW>=1{zB%uvSWZ9`HF%7l-*lL1n9OIZYPD>I$EvZQ?KXwz+(1d;-_X%l8 z==b+O_s-niodrqAZFoM_YWLiG?z!jXfBxtHe$EYce&GFK5Cq{z%Wu6d2(Aml$?L+& zfM2@^_g@!Ha?2m?_17}OyRM5Tm9M`%uw=ha?z*l-CeJM4VOh7_`;?46%OEGaAgkYJ zkypvCxUA-vTn}`vxv`q|W$)iLNpIBFzO3qf`zWG}yRyXhc0XOGpZ>LdJhu1u@y}}4 zh5lLYT|B0?XmY=XPF_6eE9E`%xg)Q{U+WBsRi;#r%RKNEDWzn;W$3D&U8&^0aNl)< z`MtfXoXB^Z9tald2>;aBU3Zc6E8!nQ;-RkZVw7cFlE(Y@Yl1@66Z@`~vOY!olv$!X z>S4t?#v^*qlU$YNM#?S_*<{GHObOT*=Ac_@m88$&}RbB2cJZY`e|l~0NImkd|SjdDB`m8;P( zPy3X4Zu#6OYLthDqo~?=b5y=OYE+{#HB=)db0|X5mi;YnE|V3FMDweCjcDMKXlTyx zP_to>NvM)j8GXnbiTB(d&ItqcIc>R7V<7ng84S z8p@5DLuEBs?W+zoXu8^{oIVsSi=r#4tIJWfdj6WeB_q*Lb)Z}>SI-_Iu|n1ATdLJY zd1;lJ)Z0dNczNTJp|_L=7-U4TsA|=ghvr1{cxR{@Rkv?hKN#_JpnA?wwJ}7)XRQZX z*PI>Wgqg);BD_5^9Z(LiRyRtgbi2I`QMUC=!`Sixh#;Wz@ zMqfFaTOK}5FO(T#yq*%#P~V%VuU@Uzs)<<<)`{JRYzAH3C4d$xZe9K$jQf@ZOL$#E?#c!dVfptR{uZSB1eLG^> z6Gp`4a^IXG-nh80udlrJ(o4fQE|ubeQmGGMmioh6!iS=VqH-JtBYpGZ$uK=|;K`si z8Kh5s_;iZZ5A3~R&-;GzhIiSsFO`P6Id{D8`n@*>e^hFAvu?cMeLsHV-r$?Xym#OB-uK?H zC-_RK+9?;jci>&`x_;;0o$tEgrt9Od_O5r`c*D+H-u3RCAGjfosvjwZK^oS6G5S{N zTcvxWe_Q$!(x>>H`tzINL!r<4Lh0Gk-^8CSJyhELteEoU7e_VRf-pSwlPldN%i2pqPSo{z1FP6Sm z`W^fEdgPf z^S7fPX>Z)N^V%!7-|+6YJXX49&D%C_Sa!~q@#SN`6aIblufx9&&w9@<0qrC4zm6Y` zem(j|^kDqu_~YT%!&kz`!bhSng0gyT1rVMt9WFgwx~Ft+=@X@2Dt#gToPoF=eWW(Id^|$-@Lod2+|izyIOsV0@s%YE2E0*+fZ5+>+b2O?c&t6m&Ae3c+xV) zx*10-quI@P+%hVi3>VwWk3_02XuFW~5z3TYG!X^OKM$kz#UIzVEZCBUn@j5{_e{{H zOmYU7-}IMrxqQ}Nj=8>xXnT^lFg;(zTKx^`o`@<*y&lz6&(EDvRlk`hbJNaQ!;Fgy5B&Tx;c$2e8 z0bv^LNlxSP-%@&6mPM(zarta$FI>&#pYZfYNWa31Zzuh4VLQ2!^m+2HC1nDWb4b+& z6~2SZ|3s0NJL8MV$3mBUG5OgXtU&t0c5)phUW(eSQ`6P$5bw<)~Nm4E1 zL+ARg&K3CL1}38Qt!DZY?ZLhF4cK_k&FIU`w(Cs^1EWNQ&arg8pTXmB&iYo6wcPQ%Tn0nCMF@9L{ z**tVu1DiOM91NKe>iyu<(g2*<&PrE&X?LgthofJ4Z>wLU44gpoBrE3I=?xoo`)IPc zK3MaM2#$N;z@4stycIGFQ_7B$OUXu!soSloOR8MmVpk2W_S#j*)tz=#vFX~>2$|0# zey;X0Y+W^5x;pf$t^GD1hw}-!w>u=8%h*-y&5D)x6PvxcPj9ZaH#JF9raN|xFB-6% zl^Q#ID1&5jcj&72$T@4e;vWIFdRUt>{j(uSG^NyRND{fqMi4aApZyH~aBKR|`srJR z{3#t*X5)*8I|x_Afv}SiA4nRrMq&8jjaghBVn?RZN~h4N2&>K$Ltvt*aUlqqWKo_86z-6~=k+RmNE? zTO8+pb+SuS^}VVL`8ALhQ3FwBr)La5j8O12uoXJ(J%=lDu@YIe;u+%-5fXYQ#Z zm1Y=?o-%w||GXhO(&xrjM&E<~xw$K&qe{oSs6V`YNE{6wAAJjrt2a%$7GP^ zEo30Rw3_a$w9;->mxP%Fh4j*@klBQvOoWJA$XV_zd%Q(L%Og=5iv7SEKNBT&syPI+ z9ds4wn-xwU;=bQCbD7NbEs3|RiXTA0I>z44?exYQ@7j~xt7ENqo49CQYwcVW9}%dY4+V~_ zw?M1k4dx(l^_3C8GT?iuash%^D{Ou>oQfX)=R%dpuC)5a)f#DCTu7Jw&4ciu257^m z`U@}WCD-6-{aldGz}!zI7xK<3$)a2KxYc{y%01kll1^@Ktl{A)8%yhHumSZUGi?5T zsnyunNNeuY4FRcPMl;Je71;Z{KJng{eB&x~KB*W%&o1tD@(04OG8Lng(lvXR>E6$E)I}bq)SMS;#xWwea=xN?BcxD?Mc; zNKeWXn8HBMA1V2^4;*l-;zQg>pnq5?4KdXG6Kch4+{IqT;{G1iKw|U+U~C^hE)c|^Hw2Ac@aK zqlwl}8YE{rq)}#{>`Du+4pMdTD>VG-7k=ot&kc6KLIW9C)RbRrAk3*0s;mhX z0uP}Y;GGpn3)52b_ew1!n$^hhAki2JI5d|86l(gUP68rTTxG-E)Ci6S?#)Q^G%!yT z@UKdOvb4iK*S9=)p|m!XdWmM$d{p9p5#qq*q`^Cz2s9WEYn#0Sto`g6tY^&Lgu$Bm z59>=z$A$WYQE_3o?&h9`B+D&?lVwkZ?kt1@L2Ppct!ez_ID0kErS$dVt0O7Q zGEUf%Z2qcHMNAx$KSB2dO;BY?{7AGa-ja5)aAgt2FrSDa3-6|)CM@3;qg69I3NpFX z`d9`dIwZu_*pWOm=%mY?24o8HeJu(eE%){`>Z11Bmj}VxP{K+sT)=3Jwa`-yD`_hI ze1sxSdL%*#Cw(GH2KCC55n5GW`aj_8EoQpapD!4yY=vvXm#8>h&~DXT_Jq7K<{o8e zOHmbmH^S^a;g?!FHw15Mgji2XcWtP=L%J9xcN8XSCo6PcRxa@6s#i+~M@^flb|sU_ z4?5~tuE-^(P3=hbArRc<=D{P;WF`;G7J;U^|FBT`@UDoUlhTTYOJKT&qyC zYuS58G|>;(;y4nvn~$(KmIV(;S_M2@{#=xti5wEvC&1l_=)oviqV%CCS)=sfDET3! zhcf*76!-<2bV0cOz3Jo!^7R-5+=d^xm8#L?cekphvxT=}ni03d7MI3*Tc}&xxemF8 z-b}h0#o?8RK$_luw6Kk!8f3!*6`BH}aPX=*iL=-x8VQkcB--WDo zx5WKWde^OpY8lTa#ah<++WeK)43%Jy}bFWpW2* z5X94qTw`}~F*N3yc)hzuR?ln%l1deD3Fy+ubE@&|R{twO&oZyxb+*#*>APGVK;(0zb>iSfoPw-8!DkcNe+-U5TU5 z4R^`z);hY>PEtBJ;+7=iq_t>0T{WT1P*B1dhM=UvZ$> zep2V%dG1YDVxw!gd2RA4uAe2?M$Vdp%oK}Iwjq5@Zj5TSp@&s&LjQzIx1&vcb&aWx z39#lCiJYu+wN`(-Uao<17q^okw#hk;B( zARiUTM*%rfrMLDNFl)*Awh+LeE0AZGyY*L=So~#h=zK$;ZL9%i6GYk$a@3tmgfR0w zf*3-a-*#`>%8XzU$gYOTGc;lL zS7cYCytBRCn#kvKg-0<;8mjF&{%M`ar*+s}uU_%eWc=I9p%4 zj&pU@^Qov(gP<#>~Rw}I=slI>6n zSh0S$jqggX0N?8T7TLvi84wXCGF~yyUD1{yq3#xCoZ?)r(~MJG(BTxr9ZoUS;S{4C zPEqsR1xCSLHbfd}Fe%+F{V zXwr5;scb4)Y>Od_VjUNBrg|Q1qt;;=b%@ch=N7}BTU=mkZb<&(QSp*+>BAwPlQp3H2}|1&B|!L@P@Vi;JPB~HP1H0Pe$A# zC5u>j^V`VtgKk}6`k0BuUK^>QZZNyoq~*<$=*}?ZCH>Tge@BL=R*;rmFg{!km~Uph zS3XZrGiMsS>Tj0v1i$a9)~0cXbL;bKAWEf zVFXe$t66>p4>Q|Wf5G;J8(@{XD&1}%JxajEGlA)8zES@mac8(v^A}=D{I-`Zhuy$( zB7m3={OQ*uH!9hoAPOuj$-WIia)SmbtJ8JKP9@hQ?@_WNc{jb^Z&VS*o2Z&ygHcGN z1X{WkzcG2A%H5JM>?QG?$u1=a!sNY5?+cUNN*@T5_iu<8#fGq!+~9U5H`Uw-wrVC# ztPQhbLdHZiH>oOV!V~-4jb`C?*RP6S(k*KA3UsQuij)|2V@fJ$_wKzLCf~ltEV4l5 zrLc`bU+Q-sAtfs@AlT&?mk;Rj{aEgm?#5`Z^t~AEmF~iMq_mB(Ug`V1zro$){SEFt zxSy1dujz56H>{FQZ}{+(I){1fNu@}gm<68DWetw`9&gd_2$c+$M4#8XofC z-aXu79Z8>k{HY)vAZ+m$8iNj0DLk{iJc;TB+eJca3;Qm0{8*qD1F_0F|=>vKW-S(a|5*B#6H ze5A+v%va_na0(>HWjeyT45t~aLvOHt)2!=K?zU`QVpDyMb@`ixb$KLPmnUgK-mE2e zOLB{nJCj?Lupob2DGL%DvjzEqDGPG%F)T<{BHk1&L>8p2#MrMy0$Q{Zf84J`Pz^X} z$z`k07Nsq}4`j=4PqzGiJX?OZX3OuEZ28@sEx*10dzRnle}m;Wk3sZae#?)4`IV1v z`2{DkOafabHCunpS=L|UL@I9h^+$+Q@AbDd)5JZS%m2>K*;ql{H8fh_ZKGy^>}iTG zL=^4x!Eimy`1gd=JNc#7yEg>yMAm+{+yj{XtC-`xKPSKrk3L$h6?1kr@GW|;g1Hk~ z)s0AnJ3;1gS{j&$uEnxvd@^?jSd<{bnF6@6FAaxp%z z|H9bTz&+T7wTvch8TGl3aleB5pCx^!A|Y?RO&(cPRXZ zd+>NVc|0jDhm*X+m}&1{u^HhDRY&CF!B^+Gq0j@O6>m=0din`%}<8%7BJ zq0$X+QjEg|FhZ>I*m<^djcpaHysJu3sJf8h6BB{4I_al<4MPEzp~*iLH{>gI!|G9$ z9?>mX=@p})hzbTt|0{sT`d{C0&%px+4&lI$N@!6-l;}W>?yjY~Riu6-61_CFvnc7q zo4b7twy3X+z;{>CEJ#N^yGyopx2o={THoDDvAbB8{SfGGwMTcGzPt4|NOvdb?#Rk$ zkt;xap&!Cn`VUOL+%9v{V7pM&&DrJiZkDDnr{?tE2it8LH(UKMlQIl~m?D8TmezM; zp$3w0?OHM@Z08qJ;D0DR=mUnT=`a6T|NGMy-nSd<;PU45(;p;$8xRWv``b))H4V3n zw}#RKrJI>R2}QEDj~c;JaF6TnAg&gsaw_S8{p~Mi^yQXyhc9GF4Ru?x%UN5hT1!Kn zmc}fENUdZTm(o0IObyYiX$|E)+}4OP2`KO5P=>Ei0y;=6SmcJNqlH+QIXV@y%C)DW z#H{Z7q&l9DIPTSt60ip7zB|6Eiqm@)+(IaMgE@gXFt({thOTFP0a`JfmTb+{(wF=G!fl{+PMA z&$O3~jbY7;T^oe6fVx+yD~+~VZByz|=8T#utAH#u&4tS5y&@iETCb+m^D6zBt(N2O zk1Olt_h+_RUZp>oF>x9K*tCiLz_D_UgSslqLzm-N{3j}+ zRKN|ep#x$=3eE6QiBc$!N_vp?NScD7&u8fiM9#3RN1Zl{sFBem1eqmtucum$_$u=W<7aeqE^t8YJp2|GsuaD~5yxU&DH^;Zv zv`szkOJ7h43&zQmaZ{IxfKk4M5LAhGQ1OQH5A?pQL+r;3)TXkKva4ndo z$!-P#(al7$4rC^Es!`CNUbc`^i!9^OZmZMYMp(*02h8Nm0eaiLt$=Mann_<=(O=o) z=WuN35hWG#qf1ZUW9yc;D+sTD40+FEG{zKhTMY2t?RmsAS;DM7$rg($U^|lU8aTS{ zP$BxK8vqhqPncGIYw=k*qFKeSvzAHif_OdMfJTU|+y&l3AAnTH$O9mzMSe}Q@r=&2 z@n}8GZsUoDb$(3&CeA5IN{e1;Inrj*b$U{?(hh9Z13tY8G9%?N=XP@EiN zz})4!##1s1G4K@&BLa;SwnjvI?-+P5T6F$eTt{x?>6%{^e7+vvX*VXE-DpVm)1%_0 zolUpm_3l6B*iQdJbi?)vVf+M>X8lGKoh>S!Jw;j_Sf3VC$$bz$#j58~@rWKhqvA2e z^raK+*8Dsu-VyOph>4e~Nmv+s2E#R5zogDxEwv+$i@#bSg}Dsm?N@#ZEF8YBK(VF; ziM5)YF(^c=l@F;e)v!;);?t^53lk$!DvuY0fhbB0@GhGcCkFRkMu+l=b<6BZI`gYX ziV*@Jco8E;xUa>CjVmQaY?0DKg%~j(uRo@-Ygd4qQ`i&W<^yHPe|>IoH!RXy({1#O z4}{DIZ(9&L)7h6QKyLc5#nkh0iy0Ln<3erFLQG?VuP8lKXYIRm|r?%PChfV2OoS5nkx8ukq^EeUl}R*df_xW zr=T&XpaIash}~536N>z>$pI+P>KSVF4BslgBHQjjcsdL#^Q_D(SfA!mslw02e~Anf zC-gtE^V}lGM;u16DG|hA*v?IoIyI#1u`$Q7RZZzzr<86gkUdPAzGPDjk=P_SDBdpI z83FeUN%w>DYe=PxZWoKhHOv(rk}9@01+;XvTQ|p8erM8f@u`Dx6hdwlKu;xcTf0lB ztgTU^0<~+);F(=6nklVEzkDd!UkHA)jZ7zA)jr!{wx4KN*MH6j9=8tEzZI#5susgAxe_5ee#bW7qWyNX$jq(*Yu3veyIf zE8kIM6fS6JZ-(tAvMBz-ZXzGWZ@YhA7{FcTLqxy7p7cm zgwP0jv!k=j#RYtp&DL8kv zye=YiJQbl!uOFd{r2kE?A>z)PM*7)zBPn855f}7><_Dtrm=T3@#s>)X7#AvydsG_F z1Yr36u?cm4f5a?8siNl#l8}VbszuPZ`g4J%D;|Z@#iI^~Vfj9ihXx?ccpJTJb zOS4Hn_t=9T`#UD(*V*B>c@PF6;@IJX*@ln(xQ0yD(asMor>+=ek8(LkkEd+-u&w?j zcvQw^gCNWCj+=g-mcN%3orz2bSot@L%{!uz!gy zg`iM(KM`Ka?v^zR)nLbw;sU0MTay0I$|^#(DoeKNcq<<*Yyo0-+aqk6H`%IwDvK!J zrmnC}tg)^^gytGRcz4)iAf9}62Ey&HV`k~gE8&_L__MTG5`0&p@Ct=T}TGH z?b26XnY{8{qE@&43s5TuXmXKTF1c^QUSE6Mudnwoa}&*9VNkX^>tdykM2dNL6KYWV zIFi(F?%0NcM|^k|>AuLifn>6|bp;{`jOU_V#8Ee8O~1fhgv638fv%3bW-=#6l5GvO zYKe3G7$VoA0W{pWL#bZ88=P1~Ahn{s7O9GbZix$bxkbB@5ngAfSIhAtRxP?zx7`aa zy}S{KWYgxzu4F#7hi;92f#smPfU9A4me5bEUEB=Ht>I-U?iRL_r2;>}{*aNSZX1=! zkOa?Ky2oTTWC%rHPAF!-q6qG#1m;okQUdG{vX>GhhkM`(=`o|oBRBcuM%!=DD>f59};q3U)h!N<(+ChI+oK4!Rv$6NsbN)&w%XIu0`;VFwvN zN7JARTgGgT()OB=9SqF!97%0++;)ZIMKzFI800RNd9_K^%h}ZA!_Q>7FtI1rhO6^U z_6zffa_nSRKJN#gg_lB(%qFf@4-hONvF#!PP{@?~J3}dnBxS)L8 zo~j$P_J1L*8evVkPO907ku6 z67$sb+~Xp5kqa4x_%XkXVw7&!t3#B>{A%Tqy~TV(I)e~Mdl|DeOI=ppnZKRWSFiwN zj}f`FVQ%ndddzz_C!>;VUwfE{{OZFA4>N*?A*$8Y)CY8!%yuzJ405~OsDL%0jeG|~ zcLfFFy=@;ZA=r8Y4#R`p7mR3!b#@s-FA99VWpe6M9v$#ceGvZCr#u>F0#-Cacdsus zcKg&4_X=r!r=3Rb5GU4nPQRjbmz%#Vhzl>2Rn0x&C*9O=dQxR@urVs?IYcFrs~9~)pLA-nb4J^%RCKsZu};-NKr>`q zKc1}_d~t`fE*w2Ba=c%_%=$GS*#tBA|Nd_22s5VHx`j&+Fy$aR!Eqv{^?-HvV69&> zgOesuljdPP<>^U)b;PnC2jL1*;keUzhmhd;?pz6kWsjFECkz-pHdQS4(&G7&7A4!x zCM_;CV@+3gJ!`s_Ds^8cvTXBC0iqG71h~&|3d|}1j!FPL|NjVp$7lQ*{y_+UQm4&* zmkWSHx<6EO+nGSv8kNMSOiKZ)}uu2%-mz z0qe9al)^O786(ghPn)4$$S;1&XMx9Dw*8+EY+8KVXV>B3nZ^w-JJ0_8o;{ku?=EZq z>8&6A*!TWy-Qh!>cnwj=4xbP;JLW(R5lIW=sfim(dSGDedD4l#6~?C!KSCT`@&F-= zIy?5~ENvzqx3rRc$kHJBu%%m)k65}sxzEzoh>?141;U-u2?Ri;w}?lQ-YC9LdR=ml zrPn0jp*JV?7Xe7#LyFk3BN?X34y}*cn|I>I%68}#pxpXtdw3u`e2B+0CZTn|J-*LB zo+31~e#Ra>z@rYBVHLmDnbZ>o_>_SG2KvAMu%n}sbdnBXD?Q|B{ou)N8d0$bQ)Y^$ z0gc+eSB=s*?m%l?AUUbyR*X(zMSxBW@#koqMn6sh{(O`KboyyEeR3O@24RjfkL6gC z!15@Qo&3?i#gmVwigT=``K5OZF8l0%U3d7hwcoz-XMXXf&#pTpgx`1B#RLEGleb*_ zhdlVsPtN_9o4@mCJord>*`F-xyZh%a{XL0@`Q_nHup~OK^B}K@2dG;4>paLWc_3-_ zvfsV^-~8%=<$pmNd0mIJigM~*04iMywM2T5n-(a>lAKOzS|1D#w^)KS)Zb(EfQqfj zlRFh6kcBQo9&}=|1ZD71sDF~NZc1w=_%dV!`;*#?$bEr|hW;$A%P#!os}67a_Rp>3 z?C0heBazB|&3_&Vb3nfkT<;f5giR{f!HE_~l;7x`{QB@Gm?$Aqjw5=QU-NLk zYUyB-FsswHN_LTv1H35t7iXSZ`OLyU{4$Ces7A&MZ#{C_y?^-?SQ4dsVErKxbjtnt z-~EgK_J>#eHs$u4PDfT}@wk15MCKde#8Z*XxUa16bnmlb?J`yv~Uu`CGIjn1CoC7HU`t^J>@C!2 zf99h!N)CH0^t<=-Zl|+Wr?o|o>(hJu$V}u>=!5$Aq>v=LKEkzau_6C)t{;yIJtyv? zi#+~q&SC{&Z1WAh{|wi7XS>MrDuud($otWwZAQ`rWr(W6(_;|^_z1O;220UIbX4aV zkUkmWF%Ye2p^STKkvTTz7@`G17=q4z+qXIJDxj@4-OHZS{BDG6x|Y3x=^NC{-e7w! z7!Ks*Z1MbH<{K6fo4+BURsMf7g_tL9YV{WLnin3)s*ip3I%=g*J?&0)#d$Ckh#}e{ zg=X5K?9j;9vu8yW?|*%@oE+hyssPohq74ed!{Qmj!+bA15Ya8+f$eT5XtiYzaBlc z401pQ&%|%r-s}<`aoDGM{12B&|0wsqUI$08R7-7TJ(vdw^d?^kFkW`_3c zz;~Tr&AAO%x=^OmE3rshNDYr~TOGYX_x;oyu#X;mPs6!=H5Ah4>%#`d;8-1aXE(12 z#ANLdUwu!Dpws4mCd2Hz7&+ZJ?(`**;p{o=w_!7j?K~Fpo})m%)3voGe_qi&L8ErB z!LW@Ae2)Wntqy~_M&~(StL_e@|H)2Ww?V0dxYt!jE{w%7w~$_gm)UoU5CMG$42sya zO$MB{Zzn6+K|w%FA-e3Cw3GGOdKkNEHwMvU{BH;VY;H9{2yNmi4Hq1in4=HI9SMaK zy?3g7VYWH!d8qdnj&Di{it0{jHJj3EXG;BJ^;A=;R8tAC{5CeG)TWUsmuQqmcBbxu zb=MLO=x)C>;8^)SUi5Cpl(1C%w+Ua835Yj_idk*$eA=L0nr^_!d_C7tAD2_C)rA%U&2u_KC?GquKX` z)=x}Z(+ayRJ5I!I{bbK4ck|@Vo=@)O$sIkPO!mY|nmNcT(}{{gYp=|{6Oj{(oTzyG z`-u#Z?(m3|(~z8IxI0&Sg!{?WhJYa29Ui-cXg`r5T5HsBF5qZ*f6DWw}phjsA z4y2!?lpfvb(>*P}KY=w~(e9U5!&3QiUl$2t-DsT{fy=k|DY8C4YDt6zQl&k@o*`Uq zlwC4m^WWj`(Pu#TVh1Z#djok^5I^KJCZd1V&v?Kwr-&cWD($Ez=64y=W@q_tDSp8N z*@92fO2~ky_1eyze&dgDv9Zb0Tx`#NCv&lN!wX;axWMeAPdc-`yWursiU>T&_0vuZ z1Tse=7J9HnJB9_QCn7ERE&8q?K`dk-^TY5sVv&<&wkXWlZvhw3fV{rZAdWZ0Mk6<5 z&+TY?b(3YYg9KBL4kF+b9r%FlBN%~=_z^Zgfy|*u;?{yp^gqH$9=_VdCXP=*m_L_o ztfTOsZ+!QwLB^59jM8s*?>%>=USR)OAw|5FPnWvknXFooLPIlIw6a^g=XU^hKPo}U zwwN-A_D;`~-zhGaeOUquy>}{4=7d5muNyOtoPC~1UsZs&NmT?c0uKaL;8|eck#a5Y zfY8^I$?<)jecwsmJ#0a|%WdEQLT;Xo@^2?>P;e()II^v-Fy9T@*8$=bGT`Zb>63*F znEE+O_!xr~XBN)NZ`jNm63`z8aLZZGkZkd=xA4n{U;dBq3#`Nc#h-S1muQZ=%TsUn zQ<)@)%w=RznxX04(;LAX2EdF~GezCx=W}F5|L>-?^C*JXRPnqOAF161Y zZrBZi*{bK5tw#AosxSNM35J|q;}mtzw9a6f)){!M({`eBsA+foY4W!&a!M(8O?6srbOhb8C7B@7Mhm>;6!-Gl_e}1gVEwDQ~ zm_Qu6X5VP!d;m7KzQga(^E>v4uWE&4P5YG2J5bmn$pP8`c!c%ncL4Smb^sQHEQwd0Er7lm({1%>YYoK{0oVlGw5gS))vvX^ zoh^*V@D;k8aHT;iu}rdzS6o*kkMyI@LsaY#3x0%<2mL}KWD_#`R?B-?k+ob zq)rX&-D=>W&W^o4p9t;md_0SdQTaIhr%CHGMx*8J7x+|ZUY{sDMD$|A&YH94?4zs%*cPGv zY-nF)wa=Q``6U&9JPn{MoLl2KEJM<$mmjnQt&iQ__3Bp+=I*J-oG4;vvLVsmGoskYC1bRN#i7RJ3noHAnZ>iL^O6E-KgLlQnNvkUZXG_Qte85n;ms+9|L|H z%o$%%n631;i9!}vI>*cyTs`{|PkbZ>!_laXW!hi9ZI=eF-OQOV{W>JZn%(Z( z+rj=3bt1((uTWkR2?hPz##{dMU!1ZEhK&mQKWwKCr`^ohB!}IKXjFY*iZgJgKi#J& zH#|_b+5ONV;(?}wq7m>H*gp&7Eo_(CiJ+c+*l^l5v3`G0iZ<=xJ5&S#u0sw>QOg(* zI6lR$Fpp#0R9=lde}x92uWby{&2*CLecK8rKIRBw?Sr<@ogE0>XfgCwL4BN$TFiRQ zvD1a?$4{^m+QG&9u2yW(ccNO%`hj-BdN5pU&i7!bnDv9}0hU|uSRFyrltjIGntyTG zYshas&I{q|qrEou`%|J|A8Z_9N1guYh#M(&pgw2Uo>oiCNk~9O+D{VIQX=_~HdCCu zl8zU4DA~deCF9CdGTF2K1bU#8z;(u*PJz*vh+l=Wb$7l@9RC;x@-e=umd}g z3LG9e=1=QVOp?)C9`*ZUUF>8@JJvUuIEQF1lI6z6pgU8im7iqrs|6?bXFn_noKym{ zm^vv8(`#JEJuQJv3pAH`;Ukl#7{96|`@}vY+&zmCP1M3jjFY{_XM{hFm8=CX=vsWS z^~&P=fYdcUtkGJKTYJeo^7>DODa7o&>ZvgL=qub29y#l&Fz;r{dVU7D;Bwp92nqL{ z@%3V6nRCGBwi=v;O^J&4{kH5ZJbj&&(D~>#`{16?PKSt1wjXo-kL^e7b@zRmoPNY7 zZBSm|!mZpc&=F<}K#~PIPRbupM`muKVrjhr1ZBIbQB=8tR%{SD5})1yr7(&^Nc z6Z`XOmkv{zsdf#yib(B{KSr2S(D`?#>t|y)9DC}yWaP3tk48G^TsV-=@;bu^DD!AC zhwe^4EX`M2EG@qzMRnk(*m;jZi!Jxuf;whQUHT}P-OGaqajSILIk3qT6G6$8YK3nU z6%$qwqJPoO)jdeJUj*5ouf&FO9cS4ue-WPrRwB{eY)t)ypon8JFLkGr2$ukw9_G_% z=O`DZ(KBwF#uTgu1>Qb=JS+3;es#%ENT-lqE_~6UeMQ^a2sk(O z7|$Q_v0rO^?AMZMwzXs4v8%3H7o83;E_utlNoqb9lbV^<^b{m;FkNC3-4OcOD33<4 zx(&aobxz>nf2GID2d*j$VBx85ag^JWG;=B`pQ*KJYKME7fO_|71D3g;)V z*<%RIIK#blQ=@Nzy3I)k=rnW59!qL6HV0{498V!fJlMj6t9YOQB}oXchAC`}kvjDQbGZz*v3KAN5G5&kKne{PlYP!5O+ly@z?9U zT1n=AheyDbpW_4&rAHObN&3AoS)la!FmXy>;1JX|0;kA11D_(Xp<~=L&^QkoxpLoV zk#x>|u2)Qy1p^G*IU91PPmelHjB zvnx?6))LP5qqL|Pvs@eM;2xHj=H+sj@%fJSXM0B51nv%Z`^RS)&u#9G>-@-i_u{tS za(DdJC%kEZbLjs1>(~3z#%`6d`8_#crgc}CVTY9ylrwv`*-A8Px1}}R;qIjColf?i zl;h|muq@7=qjRQh(%D%$nJw@~?NB)H>&1*#>uO79qAg{d;E$zWOi`n}8N2Hw9)M`d z0SpVWfRF7h1PN?1<|M8<9VlycWo1mjw=#0L$&p;~WxPG@^*ft$S2?mTWGxMEg}m~y zWd#KFJJxuC7qh2Hycj}&hSuf9BL6*3JgmFT5V$Q6!K)yEZ)Mj(hO_8Age84aK}1qI zh707^sIpWKK!if9q?9Q;K{C&x;AG-3K^%szLjw^|9KRUt_yh&!uF|&g$2Kg=g!hfw zaI*mM-CW8cOvJXC7)hsYkuFj5FkQ4;1YVrbIK(4z=9#Rb>OFz~E1UoA9CpN;`KK>3 z=cB`hq6JGuH?8EeSd^%k0mPZ4F^>m5KDH`nR*Dmpj=;}w#5@}&J2?$W-9hJ9mGYE0& za6ENYFr}n6{}02LIUSD~n*$;==~sn`8%X7t9dJJi1FwnL@QpHt%Lmcvr(Wz!AIB*} z-~?l#1@*t5J}HDr4y5$o;$Y)Qcbe`r%#LOM+@_$PJ}wVn(pxCyRH_xH5r?H{o!w1j zP+;o%L{v}M(=G=z;1J;Yd2Y-*KnQni@CnFJ+|`m;2Y2cY*u-YnNIAw3IBXFZ0)-Xf zjnmblwmjFm0_6Cvbp>egUh4`lmNWZzkdC)qDH{SShOu_FfWGEY9ftX0sl6yb=*Mu= zYtr$-^h5^xC|R!;QohmEEB`lsCW`hQ?<-~oKjo4RaCt$K zB?N4hrOa|}4PS{9Z7T8Lly>^nzx`S;VaIQC-)yH(aK9u7RslfaVfy*v{bxEiY2C*% z$0AqphF?M#cs$nk;)q2AsOhka)2II{L4UtiYVF#wmp;Zo8?ZB!J|M@UrmR%uW2Ca$5T z$$6xQewU(e<>FV6kCLmnc=+pFyp4;0MkC49%F)GTTv)U5o@6a`UeZoBl5ob{CX#PZ zg2UVtACTxg(3eP;k#cBYvN;_|V$9uyOHKdDPNkd73}BtF4NNbW-TUXSQYwSPh}>zu zy9A06XcMIeE^NEC;HPFALd!$TXy#-#a%=6;ORI%T_ifTQ?Lu9CbW>7N`jJfut1EJ) zH38rfo!l`?FFT|3y%}tV!T5r?!EhAMnLjcz8q9;8d7%2`8*PC6-mkfR8VutYYF*-R z|K0@cFjEsO#)rt`nwSjsI+CA0gFfX)*!<@)S07|Jk>mxiK^R8qCF~4c75v?5u&sct zOM;hHdt|KZjaOD1NV+(ANzIAwiKSGt7C0U@;B()9MV%9LG@(5I*p%*2sOsAw*HO^%!L4xPbs!!DXmm19#TEhFwDOBxNA8!(5EZ3*549%ZAi}9Ay zJKKZhB@+`90dLkD6X}~fGd;k&E86KZ|KC>wNhATTXk>--Y3?(kT7mSWPZsYXx<`ul z5Z%X%_h85)#rs2@oAk{YhP)Z<2@iYuQ>eK>~F?&|C#uj3Kd5Tzk;$J`h`$n>{^>+@#l;zyZL*Lfzt%6+RjB z31W~h2dAsT>1ZZ^w^iEy$|w;5FNBNuzGT_35B2rF z^O=_N%4h}S$+BWm2;=UZtY{%wa8y`_YG$qTjYkt?0MVufW+3s4*5b!D%-xSff!)3p zHOvW?hB8va*XuLxG?ezcs0U>QnLT=g z;1a!zjFi~>))hR(eWy~96BInRg5g~%GP~fZk26K0A}_Ag^o|f~IMSJ7mL#LK9z4#p zX7s>B-$#nme5i9n1$9ogcZP&WpnE@^gqk2IZ``3$dH9E_`xb3#;uG=mA8@DDn}21cOzH;VU9b#ADjUSG@*IIwyX zq8sUhn|zxOY@!cH*taL8`l15f3rGdGWQKudP|?2gE7gwqZZH>L?Wewfhf;zHGw49#4&6a%3*NrjOl+wPv z=~sgG*2W^BAtDSKq(OQhe7P0~B0k5(?HnwwWMMfIdm?&p-tA z+)lBn>$p4(MB*Mr1+v^j8h|V9aHYaJhGuzbpfpn&04q$n%le&0SLXA|j$_eCbzRz^ zRvVj5byb+xlh)}0b$X!C=>gwqQGsD7>om>xDzPs_qrG?tU+%w^%dx$CIJmGTiX5l^ z5J1m0cl8QNCB4=xPB8JT7!lr_)RZALBKe;1=ngdUga>zMQqii8B%0rUp)=Y1WwGYZ z9DEA;VO$zvsVJM@M==TzRzF2H2YpO5pMa?No_rG-RXxIbC30zvsbO33Ga7tiN`udh zTO-eo(@56fH`L&>W)0476ng1o&Edf#(4%_LxV@+UY0meJYp#V#$LK7w?e=A1vM@58hwAM;<&_ya)4N z1`wG%8K>Xx+@u$v4Fq_DxsX7(P_yRMBCTB3?LdI+H^E|W#YpX-c*b<&^d5bdJx+0F z3vqC4*_-)0Mn#_vAqczDFT-{qi>Cn%sR<0Wm%1)S*ef5>fSAAiE^^ zTQteM1==%(^6m>Wg|dE5CZWSjX8ln^TO?9TZmRG0>tuavAZZBqn6fzKb1X0#NFb=E z56Zz7%ZRYVfb+Q!xT%?YB-;{)_}ZI5!Fp{cR>XN&jGbZ?GFn$5+s z0O%rpX4XDSq=V?g%*dTd9E(52670>)3c3pbW_Fby9VqfS=GX|dJEHsyEn(v@t=_xj`g9_al103*CoO?DV>8Q0wANh^`IAGvM5c9 z6DO#cT?2j;p*cmS&LM9P2<1#N9A!AIdA8!q2;|aTP`(h>lemj~!W-Bk4(;77zC*Ri zY@o4pa|kjE957jI61u<^g#jB|I{`I&=6%mI?& zPD@XB&GDqG&6O3T!tDH32<|?F1%hc1%TFK7uIFbst^5(;57xA%$0P3`!2wLJ)sd3mj9XacNNO?IIv;;% zJDF=KpCXZ@ZbmWustKV_q943r4aihgzf3qij6;vDHS!oHr_&34^^j!H%UF24Lf!%a zHlg0LaN79$B3V4iS zm63X1P{tY17^lTh!4U-{H)-H4#ooo%S>83gU=VgMhm@y&^=$=X)<|X(0Q< zP8s1Kf1u&QLAZc5%}s`b%o>mku-IOE1b8PAR7Bjz|bK1gRV3shxAUe{E{*;L}M7@#(h(kMN6VLLS^cjkI92XM3j zXQR0uo`4Ky<`GIs=3lk$WVhgdFf1&{26RURrGs%xszZ zs4ufy5Jb<`h|8vTXak1Rwqz1~*8@{ZrRQgS0?0|AOFxVx(($lD_+PoNAf`b0|E72k z;s5L6J%snY}(UDF79vA2BmG8mmz93&3Pf8Xtg zLKV`di}wuT$>KeOI8wZSynAyzgZMOqc(J#GlJjrqVb4Ky44ByF3I@z*GG}MzgPYZk zh2Dvf6Q>9E-zv)j-a*I-hS}~9)Q3WYLjlJ?b^qz?h&U}PygW+pmyy4u`9d(%TD@-* z$YsWufwbH)YG4AAn-2R2l4u2vz^Z_dS z%xBr-lAO2yWD}pR5B1Txv-u?2+1aA=!5fg0pJw57NDHLogWZK>tMKorx1-vz3jg2Y zJ*)69i}&B{+J^9zS;(JFu1<(5?|w3n2sD&A0VMaJM2y2hWQw&3VGW`~Xp&G8LWkqxvDO`T;lSAI?${@H zhAIIaw05Z7%j~zg+plgRTc&rn5;k?x*FfKkgKe6_p3b|KaLB&#)=DGSWmYusUMYa? zU@&Lq9=Mh1KC{1LYh|CIyj{^&7Ekt_KXikYYl8jxTW3kG57z|HiM$%0aUiS@Ge5JC zn?k>*I1H@YNU-8E8o!B11SRVVMaVc_L3S7L_Q2ZZc<4|tVk0sNhSA-OKZxbRp6Rp< z6N#A=9}wy@OeFM(wPX=NnF^VS(Wq$`3`n)*k1EeFgRggY z=4hZZM+!hF&W-%O^h4~%o8i6Q?%fnJXQLtjy~wK(Q!GxEF!M!_*xTue-$Eo?)G|yPu=$ZVSzYV$Qif{ zSk*KZO+tO$1?3PPSrC{fvE6v3C$Q9KN&`OCqE95#4!*w%$an>!hfmc=Ek0GVuHjRa zD^hqnUQ54%n8qK!2C%dsSziFhczFtWW-0fjOzcG2CHYnp@1hq=4ZKQls-IoR;e_rxU(UXZz-{w|Dm`2G4lAJf*u zB_Q0A4!#Wu!@xO&!>8$(=bGFj96rf?CJZWaJ3Ugohc!Q5yoW|VQoKLZxuHQ}?`SPO zhnCNo(ejySu${ub<-aK2)ADzU_q6=S#d})*gW~<~c5Y};Epv2L#sG1@tYw0yBJ>G` zq(Lm!AsFS6-x4!Wr?i}8G!Y>=)_}D*lb%?gQw=A~fvh+a1Z1NaYg`HE}hW-f^JTr(5wsd8qK^Krq(gzw?GYN`^ zzu;^NEP`M5SgyM6mYS?Lo?t3ima6k^hOe`m45H}W?Ac9yM)TOaDS6OXeV=w#a^Q>R ziX93P3AN{hAhgUa>KiLdG?T9am3x>_N33gLP9%qb7h@{6q@+oJ11gNK{&ww*#T>Q+ z=8ut2N1R@CK_vZ>%q^_3P^WTlNlS!}#p*l?&jXG3D{KRvR6@Mmn{Wtk3zPC>8r$QlD$gPTphQ?KYlacA>|F zwW!B@TU=szXC4gLd|h=D41|?}D?)#?Mzm8QN?*8O#=yF9%{erp^trQC3@CKFfMt>_ zpwKP#%>~M$%5JG=29-sX-BJRA)z~fN*$FjvOZjP{#%`%>&{UZfgDhxhHbciU5Kk3+ z$tmFM#w_^xr(%oMw0JCB4k9sr`}`mztjUxT^dO;!Z9GO@ad(KwN~)O(fjGS%Jni#Q z4xr>zU}&MqE#aLMbdM>?SCD2-GekUp^J}bJtyN2Qw91TFIK4Y5u~Z~7(g+S$O*5SU z+Y}S3?sS~cA_nTPZ?BZTxCgVHtP#FmS%fd@zNeS10jtGcwbSNzIPCn2y1gjdt)+9Z zN>Gl4P!?AH)$aTbWx1B#o)3jEu=JuTRYpD%D2ZZzT^LW_p%n+6RHd2RlX`bO3nwD;+VO`@iYjPysSMh8zYx+?7!k2jWA5 zhP%|*&hYT%9_DyDp#l{~Z{FZrnjJxV??(JA@(S$WCN zpEaco#W>+bfca?H^R|nFWU8Q8+RZ8Yv9Y|+(m6CZ^DVcY5 zAf4V-xlqlCDIRO)Wu#?YVO}=&Yi3Pv>O{Vh!YRX;naR!o+sy)Jk#(ph7Iube0?P)O zkg#wI=tDR8W8T0Wvgu6{qa>rN(-+O;VguQnyj|&o zo0E4aePDC)LrU-8oLrN!ueWuJhyQF#@=hLyzpy3wVWl76lKhC$k8Me=r8v@?yQ*6} zdU$K{qpIzpt;vrmeQ;~?E~O7_O<=BaM!UD>#RWaY)8S+%Li@W39C?qcCfAF$c$rVK zY2NRG(A~-MVjw-}mhzIB#K5eSeGgg^^WHrP7D@y$qsm?ymmJus%?qd!&^uXP8kL;a z$wHQ*e-cnTSptEVY_qKEO^`+{RZ~)$IdZ{v{cz+0s!q0X0bvJMytZ#n8G!~JD2TNd zr0YR36DTC5aiyt@Q-vYQ70QkUbOD4miH5R>1IrkKO;}vK6(O_C+ln+3Knv2okEu=h z9%a6fiavGEH^>A~y^w{{0yRXu>%2gS8Axk94~hq8<@ne0=5L}gVo%Q4gNF)0%>lJ@ z3RK>nLFFBG5JluT2*|c`T=Rp3%9S}(P8LwEe+{5q-vx@{wFin+k_=VeJq0N5%z*O4 z8Bl&C1Io2;D4^W<8bGb{} zf9>Uiief6!Y|CeN7bv^2CpuR2bVr{dOM4JU7@{*cwj~@~biuVfn$WSw90WxXCD)6T-Ya zF-oNW!Ff#+-Zu)7f?49FB&<(emO;LUn`J54Q|*?r+aI@kbR!!ddphpQy&QMh{-UyZ zR~DnxJ*ui z+_g%srBFA;ZB6xc>*&2I6=rrS@9dAMnmjX25k86V1mH@pt}0j}+Pt6pZP>?Z!Co)F z)?PSRnU)A+Ff6DsMtZFy6&zD2<}^T)7F=1PHEuK@tY!n|B!JA@3GYOXVqUO5waV%b zucNW%^F4bicY(#6xmahrxj}=}5V-By74&?CS+#sFEpo4D!mcq|AHXLom zy@=+_vB-uhiKsgkIMXa+!E-+9$AD?i2Wv7m9nVsB$?=RuxYKJan5%3ojIA@4g|vB$ zW0^Z+Ec0d^3kW;U#*&SsrVSVRwhHvgAB>L)P`ZlXIY!yp`p}DjeRB$S^>P-94m>-q z!#{<@y`~D4DORkFr)$&kI6so(g<~X@Ir3(ctur}h+cyk#$|;}Ya9xp*5@y|;j4t*z z)V?dgT^6=zJBkke7-INaeQZeA@rlF4^UFcPSCY%3^QE+A(SFO=4-M6jGu($A<;2o9 zQgfapRT3vJ$^}bhX&AXg|Ln%XoJEn>&r%^eOOM&NJz$-MkU~^6C0`No`AV1gtbq7D zC*srb{>Lg)XZM46oP)G}e-->e8^(+^*l6eGqcv*K9qkY3SfgVfF5gCgsiFG^$y|m@ zAe}$SXs$Q}!%(nzcNpSuT`4G^vMC%6lsP$5wxrjTc@8(@c&4iwS+Ggzc5$?G)&z3S z(-Uqu=ueRsjO7fRh2f^wC6bcr(CoQli0L}cD|2VMbN1jq?3ba=vQZ7;hlmcYYzh0M zK%;KNKqRd7k?dxI=?0=4`X5DZlSQw?OS)m|;x<{Bx(PS7k+h9Eq^iQBqLUT#k zsY~>x%@lUOT6$rJA8M~0>h@2+{M9@-z=G62$bBbL6zjs@{axYS5jk4CA0u+Kc#q)v z-QqnapKlfK|EP15>HvZZjRS)S>!$PyE5uiey;y-bT)d}OpD*6itIrhg>D8x-_w?%F z;yt~3uy}ue=O$f8uhywo2>Ak=!d?McPwGpjd*yd1qr^NoyU3XxZfBBI`fbrRcV^m9 za*o0y&*3iQ@P$(PRZ$IyL>@OMhw}q~j64%rvUyawItwoS_bUJIyX8a5KMo?1mz9rI zrmp=|nUFI(1|FcHuDk;V&I~93h`UVPA*bZi5e9E?%A1h|YvN>xEyWXA1U?Xen^49CVY z_WY!N$nG z!W(!|mr#}gakSTZT9V8!evg9KPZf%ti1#vBjtOe*-7xu9s`S42SmIOND_o+bpw!+C z$ik0pSogsX9kf_)>X6L9CJ8!5P=*59sN*W?U@|QHmsyfNrisXuH-@Y}h=7~S(K)z= zvFTJLo-m$m4VjqH;E-GxNhz7b?OFUTRaJw?D2&PQ1+%~f28}^#6wRM|Q|qj4ENV8C z>_x>Lq=$oOEjVx)EBcGJoXN}@bBK`Een$W&a>InyvnXM5D=kG+RR&cuUCf@Ne$P}H zIH-sa^u@L(tW~-K9@CT*#VHr2oi8O^gz>W*&a1m1z&uXf?kSuyi3;nLTvpO~L3_FJ z2MFD!2&fT!YKGPrTJ6xFSce8xv{@zAp+UFl(4d&<0gXTs=`&!tjtoMfXM&g!CRbl9 zq&tfpuxG+h*5(RHw$iDk0(W0KSr@IRD@5u`DI#*kFp6ooQVi6u98;F|vPs?cq*76O zdcv=#l^AF=t2zS(!SB0&-(gu61NL0;9^(Ja;{7)|H&i%gu|CU!17V{d0t@o-ZR1|_ zM=mdQp*PtIOgz?d+|jCm30zzY&XZgX4ItUVSyjXwwE7`D@-=CP8;!9E4~{;?DG5_Ld(77737^8Y=0-oB&_5F0=HwS2P3%_8&{HjW~BYe*dq}((xrTJMJ5l z=Z=o!ILmt8b)0#kmU(;fuIroL^3RnG&XrE5)!BKyK`iVs5cd~A{2BH13H>?DrjH_w zdvw(|qpq5tAS1ogV5}gj0*pn_u7EU^4Z3+p#SH}AszJBYVQKhXoalCVDs*4`4Bb8O zSdTsvCp#T4rt~=nZ@J)?^x(zoR_HZKuU`RO{yX)`)mzH}gHRnBLb78fqR@R|Vp*fl zhvg@LJ<5!JH(TAaxExXXbb|Fh(OK{3Wa}N_@8N$atapUJ2aERzfA<&fS^o!%_b+$X z{{-uwgY~>5Kanp=TeUU@eYI{H{=B|1EbWfro5emchHn(_8N*Y>d&clY@&5Cj8-O&X z9rbhEx=pS14V;WgKaJ=s7G-|f04@$CS_>iFY)nd#Vz#@GyQ;owXX3_OW9KX&DLkB4hWeZnAil9I2$B_C4cpbZT-nj3$(X~Y zY9z_)@;sQlyb%h&#Q&Uw#hKHYQ_4lHU#wlFjrl8>-Wfgwjfm2gzalX2 zRDXpReUZPSJKD$22oM16m}#0^ttP8LlIs<8*TdKEnAW$w1A-2{^_L@fL|1K>wfu>g zM@=$AvK8eQwPrEti@+danaFLJi4JmSFLo6TgL%(ZrC*!=uUqHl>}sVt-mr6!h)X5< zM9CtFJiq{JY#J$qY!Ul^YHodLG7aFuOq!TEtt>K%3H4zTH9wld-G0o*@G}Q&S<-D; z)U%H(nxx~k%>oYntQX{52vZF*qyeuF|6yod}~vlhPY@D?*hOEjHLDHM3{7% zE!^C^duk?Ko`#S=i*%{Fr%RWo3L$4omx3IhwW3ct`$BvOy$GKhlAzxnm&IzT{|VoV zHX+kYpo6^CQ_9qvy@e=a8sn;Wp z&0U)OxVxZpeIw=0=68e{y?{E-W(3Lm$hgq0NX{j5y=Ev#9C$F7Tjy?ILToY@Ij5q_AR7-W2m*5z3=Nh78DbnbeFsIgbW5v$ zx0QnosJM1Ok$n@-%Gm>6A7Hb&Ep$z2g&R&yg3n372Q!#R;VQSo^3&oc-~s4(_U^0? z=sM+_B+!@Lg}bGe-68^{K0}rCy0+gb-d;V}4S`bH7Sv~RlmP-~1~q5<6WqQ&JBvdOF4GCMIx~!%L})D7cG*=4i8_xg*Jty`mh1IJ4}J_U)S$92cPDgbR&5Z z-?v-f32)u4z<=r>Pj!^tO;)$`%#wS*8iUmCWjJMb4uG^?#PaWO1=K{>R7n09(cW_! zP1ECdxLsC{bVGV|t-D;eCEYr)Q7`#Zw`7`D)q>VJiP&_-5d&5lK+BecmL@SVDl2K> z?NSe9amj*Mj!y8U2+k|`4te=0-@|TO1jSayM>e%ermyQ$7PV~{KdjvI6M(00Yl-c^ zQz~lyH-N5cS}19o*%-ym^Alx4im9J0UvdrsA@+kGX=Nq`W=T~(**o{#su-{(E=xf|1!4d*)!O23{g}!JIlJlLQ_^-)7<`h}{f@jL$Tx=| zZ_oqg90h@Yp!yJGTbK73V_297jdFAw%coU0b9cA@hUVhR(p=OR&PDy1Fb@C_mox>u@DL~%H*KTNUW$w-e2qrBrPdPE9Xnk zSRk*IpV7KsEa3p1$`F=h>Uid z9yIWKEmTUQVxQ2C=lTwh04C?8V-1u-=2V88ROMU5t!{Cf-Tgb=diT9M_ga~R3pb0p z9Z1nYCH+HI5l7K{enuQWTY4*Z^i~@dxJa@P8O8unzn0!%U?|5`!wSR>*p zh+bA)1ue)y>N_>qgiXs9tz%HcI8qMsMrRq1MFvCwYgs+f@c`};!IW4ilDHd|zx)=4 zVJt0?89Tztm9qhk$ivTGKScK6jKJu4ktMuqN8>O+u45ITlXm z(#`HIIht$(3#9b}o~pYFS4L`1DeNOA_{N>KPdT@?F$lmYaO(<8Vsk%Zh?=1-?0f)g zntBp{qG>}`Hp?GMFR2wdn1;I?b;Pe|Xm2wjP^)|L&EPPx3pShV2JvRwFARd}&EpD` zVnIVuh6<0u0u2v7fZlgR2zo0NPyU8Ow3SF&UZx?ZO8S2r0-3r`K93|1hN z!RiqZ%Uupy!QbfjDBIYO1k4YsA7sk)E+E9BmJgYGpjZh|th$!@FYsjS>>@bK`m6|A zkQC|twTxo6l)0tbyE*TIWbxi@VbEM9@YJ#RWF}yuxW=yB!fKm^g@bO4te(wX7&CI# zG00UwT>_c3nuDo8S(hJ)S%6zKmEh1=d0UGR0F)?R129*MBSa@;F^{v;CMR~kc~uu3vryJU6BtUuv33H)Zmb(gIaw6|4@4j z8)9_Fpf%}7k}>0zh)iPE>qC4cQ-uLMzEd}H_A956>HQm`L&RZPqB_0ziAM2G%5AU2 zkp6Z!F=YOGud%9rUwJCj(~r2KX7OV!MO#xfkpVqG`avZdq7MgEpDjGV-xLQX_X@3u zHKDOOxL511a+kN|J`;BKV}l6em4DdBnwt}w&Du1Gb(61|`_z0LXpWdG zA@iH{6LTV7ZfoV4pn_YJKRhe63w4$MY@5AsOcKcx9G)MoR>JyF?>+xwT=Gs29e*|u zJ8lhUozbQiq6Glh!xmjh2C~!>I2-g~lcA{iq}8`9IIvCHA2{)Af#CVvIaXC5d{HVZ zH*$#Q?2ar6-eImq+SHb4+fb?b(ChdxJyV1Yc-QzA*W8V=PM(m5`kW6cHg^>lFh6xm z@v4~nMU*DLr1)uya*v_Tovt?+5bKV>Fg(fbsx6TY;Y>M2Ra{rzb@+*A%S4M}YzFwT zP(R1cFP+;B0Bn7`hw?{0RBs$<_=%aih%#e;D#ZX z49Ic0Q;_RJ#7;{qgh*)LBbYPUA2Z8_6=!-RNNR_-xR_>9aq*Vamt({T7vxRTdNWQb zfWi+Z>{B8q;H5!nNHO-FA0qupj1BNfMJ|zX!ZHZT;4XDzT7m04<9g31;FT55kN7Bf=XK(A2i4#luQ2L~>1i5gt$TcSD_ zc30H6faO*8s|<4cg_B5`BEx*!%3=YYZ)^mP{^O6n|Cjwun|G?Aor7F={3j>3Q0wv2+RojEXCAp8W{T5%TP3mm*QFa<`Om&E=&+eVcu zcoyXD&Q7rt}m@o`S>qphhvSAKV4=qQV8jd&qs!|W_=&ritCNHCwiMtC%g<#!AgD^DFsd zkn5Pao0u)8*q^~CcT;g}9`EIDDnGweJY<)JGxd<+eqN|}ls+}=EGArO2w1DXF2G{- z1j$?4VZ%ZV=*jMyMX|@6fvdDbB;!lq+lr5VZwad_!fIC+oURUVf-Z!600Up$M>$$< z#-G(|!29=uqvpsGH<$fr`5EB-Q2F`q2Ee;I0Pku8p4sv(2&{Uy9Zjh~t_pFHbBc9V z^nQw1mU@rQsMtW3lyTYhSMuKq?U5tGK*5|FiXJDS$7|-Y-z@il5qzrrjJNSu%g>D9 ze=R>Vf}bxxf2?@OHiQvu2qVb1p(E}u3$3#ceQ=DYN2b?1!qfJlD_k1rk3uGmaa6ei z3`dn`Y#MAx!tqaQU$S03p|nsG*#T4zkXPObF*PQCz++Z@U3d(3+2yWTLQwWL3PI@t zNZMSy1q>!UJ;;$c9dcx%XtlZJ4~$$YVGG-CHQtV!6);hP|on;3NmtR0#^; zwE`BEQ$Zo$v8G%`9J(f3uI>_V}49CVprdlSvCzPE%bP%Xii-8wFN) z+X5!})v#{BdgW-a>J+dMV6{~h@6>8)XWcUM1<5(b;?YuhazK(MVbOOZZHYrg$6*|T z71|r>)nZ_s9Rk*fM3&~tu`G}yetl->*CRxwIfYK6tc{SB5{nX(m@h3OITM+nFJl;< z6&98k&Wb`o|G|;{0<)rh8uFu^R^XtY9Seg}48Y`$2Q>{W6oA6K9&;<@ujF}uN`^9? zwSkck9T*IEgTqNJa>Me<$wFGmZw7I}!M{W;7mN#TQgiUT6MoV`mMy3{g5Joe!1&g{lO|Keq`!h zfspdHwBQ9aT-l#4|9+a4ZKD&UmF-q;a=4L}RY26;SfC+7hIf3wLJ?X0djX63Lc9?= zhY!e0SGpFl9l>l~_CShhE5AEVPq7}iT))(+J!yvJXGoViBFrCnAcZ?=m6ynurS4vf z36rnVt#rG?199TZRD-px8pi314_Px1$%%&1*x&1x^zS3S^6jqCf6%r1`%Ih2*FwwF zDy5^!e+^A-g&Vm^zy-~7l6{sSW%)pVm@TWRW=UQKSf(Aj8xv+`E<6p5-7Mn{w*nvk z^(}K8jnyfA&6l^vqlF-?7KDI#HDd-ypanhq}? zJ~-W;tY1p4ty-h9+ zen-;s*x>|Nn8+gd0U#0E!dh7WIEag6^1;ube1?$AP!0Spq{4tQL-HnqQd`CYAa@oc zBu=rzFv&{^%<-T`+55>Op8F!SrbtOS$vIvFN?3Nyzu~ctmjb|xLGrGAzzxHsgl!?i zU*r6Mtc}ZRYcPVtW8b&|7{HJ+)c~}u4{9<&LQr$!x)3VoCkR{0qkNd4JOd-{I=010 zWfX$j1jYK4!>eq9`~gMb@E++aM}9Y&yE-C2GRpKw-F*4za=ebCb$MdYN7jR@Y*aa2 z08QL=uu?nsPq=cO-H`?0kuUv5l&#|v?Fe|8ogBSKbr@Y`bQ747qnkzz8Pzli9!K{n z`y|*g>KC*ydJvGx$nOap9##J8566|u57gdQefX*V}n5pPgVmS{g*|EfYuyEy> zzmKtZ3Tqy=N!XBb!h!}T(^8O6z(KtVDH z{ZgyH#kAP+f!Q>mjU#YaOHE^Q>!XOHkna(y7&uNdd{M(GfdPX1eO-~5$AN=>N2u_| z~+Ii){cN9Lc+Yi(O?i8`3nRF=w+1c70rh{L+F~2nnbMXHZ z&U1!F*{h#mgK#~acvwE4^wr7pgrO7aD|$CJb&ikKrjGe~&ENmN?q97HZOf~vE@TIV zZsuX~Kd-Eq2+5uDZ|=<(ght9|b>6G2NPi?LKb+ zKMk^K-5ylg&|$ZOA0k)gVB`?tBZDEX_d{fA6p3Bl0Q}7C;vsSX>Q^^J)&DgPQQh9r zUEg^VLzA-jqM%9?%o(n;A4Hylf`WSXlfR|I5uevBSCfOUg0;T+FU8swySRcMq=H_k z;CJDx7puUwq=AItyKonp!4A$57m4)n-1t~rsV4P$J;LuS z?%BwmJ^UOjMN8Vc%i212uG{v$0=++G?=i>lpJy+B_E-LhEk7-k;Y@z`M)q^|ngAHP z%Nq9cCJSm=#oj+@@3jj{cR~E<@h5pic4R^=QZrQT>yO&kWEIGC=MQ$%B8k2VzX?^; z+gh|UAiof1Nieb8dS}s97S9PPJ`BsK6vq{MnBB7An?3&l(>oB*WQ8?eVw7rx0e(yA zCc>A!>L9X~jVt0Ab*94$LInos!E|^Q{!Oj+tK|@pWNbCNANFD%4qvlWaTj2W@!W>T9W7^H7orf{B*}=HmA3 z#ao``nMv_GOnNE!d<}OH=QJ2H_;0+(x9RG9jnhTn5Z*U2tn6? z2!^E2;Uq{Mfk8MbxCeHq8-%=#w9Jxa3#exhnL$PtKp}Mwi;TV0c_LAFp^E8_Q?Qfp znZEWuYXQ#m-4I@w-r)`BCF=uXLauRQcIy9*1+TgD_JK7QU+?B zW3I;RAZkrgN_WhSH<7JJ0Rtct*_TY?Wy<(|jQP|&a<>!zmSR#gkNN~{jbY_l7_V&B z6!*cwgv5T}$nf`U;OfzMkI@09uN`-rTC&A+DQVQCQXRI}QP=>&#TrMe{yH~EjlLy( zYHEpD{Cc;b4ZIpl-M3J;04L4su=Z_w%L%DlSdsb{X2I+Af$2z(KVjN5dOSYLq!0zU z)MTQEt7gv}oYE*64<R+pk&I*lzcLJa1<7R&th@%JAv4WH!b0u^{9k%4QddX zG_qUoz&!HkWGcO6S_!#~<5&+3C#`Q?P@rL$*~K60$3NM7HU5$O!Xx?~;n)8pYkOnM8{6YIJRpd1kQc?Mq?K7c@wFO618 zL#G%}12c%B%GVvDeXF`vk&V9Lw|d&t3Etckb$=N$HC5TmBB8~1=mWzFZy_wiuN(=C zF&UsIXv(-7h_J+(WM4~I*kw?*jXx^^+*TZH8#dC!?=z66uRKD2=9Bh_8_GPCga{)r z3#c>#h4_~MZ^JpBAdFa#Fn5LNj&jXlBrP2{*D7wQIoFPI4zg>@XvDf9(2*TrYzX6i zf4T%T=Rd>*yAHsNe7$a9oHS&dEMX4Y{NBXGVW9!M_>it`e40cu*9#GG$TYBd3=`E| z$uLoZVe&}bOWK2VPgV1qkWg#m|yRO1P`r|bdOt`xIe1~4IV z#CUVD%pm;sj9?C@OYURwVa(Pb-BS#brr5d8-$BGy zSMo?pQgux`{s>#~w0Kcl86;o}kt7vyQg=&&hj-HShOQ&ssIcCg)0jy1m&SNQ@&@pAAQPqyz3?v+}#zJ6>Me-Z{Clb`34qD@u=SC-U}wk2;5KkqpL8P=ixD3X`H01^`B0ri`{9q*#D;0rrn+D+IfqxI98lMT!?cC)I#j>^1RTs?GD{v=d-1gJoO#-d^4r{zJoXD6Of1{QC&JX zX}L^V(5mjH+>$^cP~%!`BMOntbXNoI;$9;Ti7o{RfUu+#%|*U5%7BGUE97fv$RdR) zF&0n=>dX70B69(uWMPSmB0M?xkZA@i@90HLDYKq(Q>v?ZAyUimuWPd!Fl%5+QK5n! znOQiJ8DJN%rFbu-v=6=G)~oL`Nyi&-`GTK6atm1|A*VRo%Y@l7i10cG4<)Qb&R&z0 z07G~Z6jP7mChG9_V%kdS2)~kt+y6|+A}_W;hHYkcJf>aA#H%64_?ljKG%C0wQYq8* zaJU|+&h`F_>9VJ6H8W^46sz`=)!w6~^**1-vr5V7B#k#jSIbQ-PwN^}P1p1A23HtP zCUf};!wI@_@nr-VhsWvUVEN#f1QZ?=B#i;VLNqv5s{Yo0;pf` zOXgCFnqXVgfi*z}_m!dkusO?l^;|7m*ZUov#>2zm*dJ`e?GrIkfcR0(b1&B5^XSF6 zJ)o~~ANvO%;-Sv0j~jEw<4Gi!L?_orbj7BeH{uoa)>Z_|4Efpn0)U!b#V-7>M0*K7 zfBz3YGWGx~^E7-Sn1RO=)*%pU?Y${J)d(o>WB3R5f!JU9@|S*KZf`cvuim4yf`sC* zG`bf)j<8`(Cu|Nds`XpPP^gh{T~Ps;6z|V}3@rIMiy7hf3XDkk7zzoEy57E&;Ie(F z??cTh{6f^Gz%$oWFUI*%^Zu;z5I?0i{HnTtPrAhW`NjNEru@o4xwzE*c^uYK(Bf=oDfdMSbPk>xL0(qk-6h#>F1d zeek@Yarse!%(8@WAqv?Jo0r+V&7ix)sgPYxz6uUl;xb&@n5ODxlLd=2dsCQ?@PbrM z*pq&yJjle)0-V4>zN|@7rGypS%g$wdXfzRiAYk%(Lln_rR60wzK;s~EBAI6tqO4PA z(0qT28t92(5b}ZR@uc4ZCZSg?2PV-gnA?b6jp~!sCp5L;{&*H>U10G5Nlr>P>QiQC ztzv*8J~Hx3d$Lf9#`!W07HOUSU}9~heunTqHSA5)U6#&D#pP;j-ff*&9k-yvwsh$<~2&K zptH6KP)+_E@lzJ2Yqq!7*K|^_vIX!U+(kF*y&&ao#_m{RGDZ3YHkrD3 z7ks*|y{j!?pdG$J<$WGj57mpe+ld~^bPc!2rsT>HXl-6B6A&u_OjqhRfH5K34qV-% z1?sr>oYV{RB{N9yK3{N;vnESWEDdY*Jtlw-r8a+9CHep>i-P`~>lP1d_4a(}?TxGr zhPUw1A@~YJ9LWnvXA+LM(SZ@*ytFVFsNY0N$e(Q@rL4k%Rb=B9E$7pdEAA$xsbpT2 zNH3U49vMAV^xLLNQ>OKNP1(d?valfXx-NCHtoQk3;T3uVllA|~i*bpwRr~5^YcM&? zR6ZARHfp9OikW&f8iKVz`mmp=_h_O}0J0=Qzp=Ua-8j1{+d6o-Jew{axS2;diX9X1 zl2cvwYQ?i&B43KK^OS-6*~wBFtl8Kf^jv%g3)i}R22~ejuzF*O&~{!X%09vZ_-V<8 zLP)^1jrEFI3zy*Q#&FZVe}?nBDpjPZe?H8!7)g4Se?G)>UC&qhXD@38%tdmh=E6$} z7%~C)FXxSuhiVZjj3Km%JfZWxL+bVEiU|-n48L!cI2YN&6fcmEFgwLFDpc`&l4o{W z6wk+bCYxaKe2nJ_FL^Y0wS`2g9EHpZj)-G}?>%^MDuv%-UxvGyw^I2%8`tuhRnt*w zLhQMx6fkRu!QZoDD^O+NLKbk1VXh@a-W{#>CE(5y=;T$b?1jN?DH5s(lA1sH z^vS^3K@}f3RVss@y-WvW`6wJ}=)EGMh6;{Q;IKQ+am~&V^C*AW`{Um40i1P}`}@~w z?fl&cDJCPlT^nA0Ykx*B-zl=lP77@af&FA9gKfhzTV(WUa$ke9>%Qfgm7iWB#7vC? zyVn8hHQS@`zjtNvK6?W#=*=~QH!?V=@Q#c-nvb>nYv_+=&iaGSr)kR} zI^`kiE~Pt{0MVh|%#?a#xah8-H;Z5%m0{j(v@M~-C`lYiLK}K$2w;5jJ})%IZgb3r zZiT-&B%-LmY)Dpb@?P;qm|dE0kpR@oJg8o zD?v=O!54M+4=R1p>kG(>7S|JIW#y~s(Q&yaiZrsxHuzUIrX7JXvleIb1m8i=+NMOt zuC#e;e5Z@u%;tob?%K_y!j0w8<1idBkqB_`cyr>otl3PYV+>15dQ=0O!yY&DfcO$I zQrO_>%Est!UVa9OZnEbrwKViGd!*1-(e2d7I6KXg!9IJ{j=-P@A)$)xZE>rTQ(^(Q zUFKn~VHon7)SUIZ=KEdq{jT|b*L=TgzTY+9?;0Vi^gEBx9P}GN=KZc&zpcwP>#~73 zbi1~=+qFTrd7F2;mUlawho9DZhnPo=Kz=2hsYWur!fDehd^VFx{w4tY(Z?0m$ZuqP z|HU8w$}iv}23a)mKWB+Rj3-J8h$lX&D?ITCS1B?s>3s@!k<7%C@WCLBo*mpuS(w?( zjPW_Q*ZNzj2tkrFOV5kZYOP&Y_|YL<;Zp~7g-^|MMc+-t24)ypik~q;`^H8lPr8A0 zUd!(IF1*8m@mmKaO4U(;#&;Kqh5i5IRA_40_YEq&?h@jvDlm@8iv2O(p-Dbc z{ASHB6(F|olwv&SW8!$tgN2bdh7C{uaCoRP3=-ZO#q*8|WgAjTH*MdF8F!(6ez%)N zYzCvDKsu^SX&BW4^;xuHULgqfLhP*}n#133>x23BCy^Mn;#`X7#*?-J3(#74u$txJ z#c0q1s0^lj2smt?778)fN7M zH1`E#IZv8j-8`+B7ayk;e0kHdpm4ZJXD2D_GTrOo7@S8gW=Rn@BZOv4ie#@IEGfeB zp0a~c#;uD2xyTETp0Jl%l)U*#TR*Lcw2sJhH@!)9`!TTt5SnQ0rbZO048b)KN;;ntjSl@7s?#gHhwuQgah(* z$yg6~WXqjUSAjQZB;+C|I|jLPl_3ou28e=VY696vOsQfoVG<&5zqv)MB)FuH8s%G6 z-vk?fI$ViRtO}d<`kb#pN!*XY0Ug$9yP^g? zuwLkVHl@QcG@9TuKt=)^N}y{}7<=-D6Nt)TCOAK)ar1^nr08CthGUOna$aZ$4fLJ# z%~L<6=ouEEl*EG`7)?S|zSb&pt2^;2JdVE37GrGTIi*hcJH@*!Et=EX)Wkr|D&kcJl4shN(fsXWf)x|F}sczL)l zb(odvyrW}9N0ok@(WolYrU{;;%F)=gQp;2Lg&_wIK9$lkL3E|#GRDd&c!Q*Z)RuVY zio4n3y;C}z}5)=f-w4s2{`@mm} zqvlrn?zKE^xFwQyHOI-Gusl{z_@Szv1WA|;rVEtCVAQ&|Hm$Mb@10*vfX|>dfU?$# zLm@{@*=ISCvRB}8v2HEw4Nvb69Qs~4~KEtM4p)8|gwpNM)xz|<>4Ort4(x zORV?eCmi)45B?R<7YDz=iHYve50~$f=O zl~kkc6;}?pCQrOJn5cnH+LGc1=mH}X$A=FX`!(cnHHklUMBj;OKpY0wa_zKnx9G;N z2#LTw?ck*f*$0(+WW*4G#a%YUZWtnXLAZ-D1d!L79#YO=eS&9WA6gGH?EoNCFa|g| ztu5_UCg3lnMU0>$m>YWv) z{W7&66o=}e>9SLDNJn9iV4RWw1fiJ(=%`juL}<*^*aREEN%*CpG>8vHhb+ z6akQ>8!7}zQ)wDf493LqrH`d!{mQcRAr2mr4=FfsHIMYTXO% z2^bf828w>bPihHYLZef)*OFto&29kSo)O;jD#kdd0fl`-1dfbaRE|L^#Lg5|^i@DP&Z- zuHqT5gfdbU&p7s!v8wDCKZ!g4kfbOuJkI^WaDR;Z`EY-b`!jr@Z|1qzqJ=teicR!~ zC1BYI^Mrx{%SMiU?H4a|q2i4WspuDT0casraIlHWC4_CbX8YnZtV;yp&LQ9()o& ztb_=uV=O!Ox4#kf#aD|Rjm5mdrg~YzF2#tww%Vu|Nz`dg6E?&3J(w`kCA3uPOL(L8 zQWcS^QI|U@kOHZACSP($-^c+rlWg-Pn<$WS%j$Xf=BU0AqfjGO59=Kg5-7XIUWhUV zUyu$Yhxm_GXca(~4@Z8-BJQbWwCV`eX=aCq){ zGgwi^s^0WS?Hq3Zalcu6DoZK?aYs08V)x~1bN zyfDomH)vkotQxbRO3Gw0@MZxjbDT!#foSTbxXVDsT{l?bv^D`?!(cvJ&b^TSZJ(GF|OIqlT47lRX5_Jh?pCeq3KZA~E;d{dtB54(iP zukUN~?2-oLRviAP4lHJu6v7nE)O!!%n$l5>U0Mlm>SC7^>8wsJcTxbm2r@nNdWB8$%c@K?K)JYv6_)40}y27Ev%eq8s~Ql!LLZl{qT)l!6N|d-6kz zwjMJwpi*7Le0qJb~g zN41=N{EtXZAvKM##q3!gEE!Dp{O?k%uqze6#DgzB3zHdD%^!RqPL?02yzi#wn%)@96zJS$sP77yd~8U{7W^CRno+F|#9_#6#Ijul+v%>NRYR0YF_^nh6RsA%H4 zPgXE5$gK7=^khTyaTX!T2RgRjH6P>%fp1s#C3MHQ_a)=M9sip#exk&oSxq1P_X3^` z*+fG=(!bP56C0_Gtj@@~-{yzyJ7FV#-Hz1N#=m%@J^waS&31Law?K-TkOCaZQDJbF z>SAIs)PZL=<&>#pKmKKpGP?38!&B~4p-j{C^L)BKd!cEqW!loB#v`n^{PSM|Zl(FK z14ft+Qn4DuD*BNLxeoZDjstg9!R+JA`0rc?we+9MTxDdi`AYUt-%(gK_<7<}&wk$W zsub;gFouYTbV>5KVRWA;BYrWF;p6!o1v4r*RVsiZCfUhS0VZIQ9WNDNBPQ9gQUOR~ z)0m_oB59B@h zh9LKSsFun=uuGTS-MfJI@`BuVb?(CXC2?a!%0nd(De9FGDSHe9k+S89w-!8J_d=XK zf;;#H!I%QZf6B2#^Y>ral1XVm%Ul$*D&RHz`?@G&VX6`1O`$aAhHDmLT>ASWG2WR~ z2W_dt6FIbRPRMKk^ltu}saz1gljO1^=e_3V?r zT+2M0?IFAb57C%RN5VlSzDWi-4^Cito4HhsQ|3U#!ys}(N!z6O4N|g-t=MHZMRj%w zk=g66?kydiW|qw>lEYLET!k?VisXu7S(qOG9=Wi#@*e0YLfLa-RNURRC2Bc*ms_GH zPi*>vO;c`4{*C^V)f@#cu6BRH)#MH-a+?@e)JU&?(=E(~W^LrU)2!8s{ zhIx}-TY2lwF6Y^p{=$yAK=F(97a8biZKbx3U%0LBF34m#H5Uetk;%p(GEq+8#bojp zbtt#TIK6Jt<1}0SVYk{8Sj*lDpC}N+YJj8c5_apjJ7SQ@tH5B=O7=~2<4cn2@c&{Y zAe;hEeNJcd$psMvttXg>tmW+LUWOu&8;5WWFHLfju<1=g6h+9m1gvux29_yRUhDWq zVE^EWf}~&~la@bO1jYg<))`TxWW$axBTq?&MX@1THBE{x;&z!qztWI1kbmiIL!t}j z=jYjpOPqxi7U?di^v06Cy5FB-4mp&Z-44i0v3~vJVeOi2Wh4eCR>V~Fx>WRvYsph) zwu4k4ok|rnoZJaui54j9q>?cFXKAU#5Q7cQacvwZ>2n`Rw2kF9IQHlTY;g09(yLds z>=@C5;+~4spw>04O_ch}J*MXNa}9ZhtV9A8xWKt(c*rzlDy(FcHuguN?U#b1NhpaL z_GzNLY)sDT%D3kcf-fhQHjbxPVr;o?pA}tYFATcIKuo?_V)8~TB*dg$c6TX4T;-DT zMoW5_^>=pl^NfS4q*;0#{6Fw-{iB4E;|mC(Kk!3Jqbu^1c{ewK_BMxKmZ1S!)^Ns%E!I(jmqQE~WKWVT%&^ zfI@_U?9V;`UOvc*FK0HhtJzx6J}R|0zS?&%r2eu^cdt3=Hw zH9n8}WJ%qh;j(FIjL(I!o@A_|=Kv8qNxs}%OjxXZ|%fM*w66^`UIOf$3rD6*c zkf_a;cmff2%M8{_&CM0X{Ewwedb3QLn=SZ~z-DK1JG4#EQB4q8iOkE@QukRtl+(<>L^M%=mbuX228+EE9nES#h@S6aOeOE6w>Hfu zx!4h9!U+laPe|7T*;uT;xPJxadeuer6Z|WymMew#&O_XUgv7QqiezL`nAc&__V&Bklqm2gL=170J^R z&*!3@F1>=)+@t)~A=u8iS5FK@pXwW6EUtuxRn@Vgh$8L#=y!AjLx&X{u#G9&mjwsv zSmqP7E@G_ExL}Zzt}Df=xgmLHaX4uT;N279;C=7X<=*{`qL{G#)qw@m5d;xOwMXcJ@Ci4vzcz zlMl~jU*3ARTs*QPROpuKg5E0?01pCRUY4;^n9cX>7O$Be=BvBdUqMDxJGhf>D=QKO zZW+tNZMOpXW@3U}>&4vN?2doYAd-l3do< zMj&E?;Z)356(}dXRAVgSTNY7%sniqt2~bxQt5-aa<*inHYtII$YAH*J+}q#g+p2Qv z?SD`b$Hbon>;-)is1fsH@nDET!ou)!Ycaf1bnY%6--1w9TV9e^pK&#Rnk+|CXwd>e zr%c3Lk0cy;TPIRAlB5meWqm#7X~B4_gj;yrmO5`JjtWJhI)Kp0#so0|0rlGh!9%3y zA5eG&OI*dfyIaKvgWSHSyOr?)4I0GA0mEe4NKIhu{75vx)ac26`!+q5et%atk`Esx zV_*kaP191NIr}baf*w^D`P8jZb~8)D(#LGE#B{Dm2R2w-ca*VSVv0tTT}>RP|BfY- za5OBACo(4Kx08jxN+ET=3?CLYg5I)XBCS#$Fc^)-jjbw}D!-uD>I{b(O1W;UvLr1b z86zL+3)nSL_Q^H`hK2RBaOi3$**JrdeE|4cpi{kH@#IYulGYxpo?qyo0b>-31l9Rd zIirvbC%V_(k8&-F4Fk9pF$pf9t1$_TN_|Wvo=NEEViKS@Yj{=#2~a%8A^<{FwEb^E z5@9T#@som4Sbbs?Rbv!NdIgPI7fFi(23U|8;|-jnT5t{qPx2$rJE|q#K}9+5fc&cB z9YDde3y=g<_530eyHKmJ3&p#_Q!u_#n>4{vv6b|kA3&6hL!yub422T;M8Zg*6!ILm zvP7f~BHAKdS8fxNz|nkV_%S zS{j35=3wETMDcmh2b$|4+d(eb5<0LN?V7A zhaA8IZ?g2$#+w31f;R<@bff+1kk)0X!&Y^ftO72!RLqEq0zfRHc&)LQr7;)=wuG7h>EIid&^CSyer ze3>z6zyBgPWxpYo+irUu>7kLZ9?6ho%2)ei;!Q$uafgu1oG*xr2Ms6kaWyqw|m<+3u049R6o-jSe;R)UP_4rB~Vcng(LNKk`i-FTrwYNZ!fNf8z`mLKT= zKxWxiVMt?pGITI_1;A(A;?KU0*l7oVJRH=`YV=HU*4()>$x9YbO|ts1({8aa^4-n_7PArX zJr^7bW!j+7B?5eeQ*zQE{N$an-HF@~dn)M{0Y2QCxV7Zgw2Rko26`RU69X#6u41$< zE*tSwEyxd*A0ALJn1H*1Q=3yuei>E?7n-+-vBfSLJXK+Fo?l7(z%(!XxEZRJVD)0~ z_MRa=(#t&nF1_|^7Jm$dD2N~lsu_;tTo@wzq<;>CVGw}`!@$|$)!b8LTSb=MUV(N@`9K)T$cT{E2$+7^>Dzj1Ii=gw-ny*W{VIX+pWpJm$I}J}; z6pss0iwCAl52o~_>|d@&Sb}nO%X84|bR-~bvzlL^fEs)1h3&>>kG1RVktpZPWA+QO7uL1z zp0<)M!>ed0n2+p*o>N9)S(PB8teseRMt70pBAT$jZ-wDrTA5QAch5w=zQK&6T})R_ z5uptwtfryeBxq>4$%2nJl<_K`uY)nSWTDAfH`ar0#Yp4F)lqC#Zv}d!IM#-eNTk= z9BmEtLt;XaNJ$C<9+8Uy)-8@v!xP4Tpp79L7zH^}p!0h;A;UxiXfv6wcuy8+6VvE~ z(8fePTjgc^o0BHf7F9JtVwBLzeZ;!m27H9H$l(b;#C)CmXu;E23kw5eN65I=xobm! z7sZEW1Gb{%Vf#sevj8u%V z3)>b0322{(SO>K4>`B`&O9@)=R;NF(@3yF*KurtA5E<|vSlKk`&=g0MWYlgkn2*maRX67EuQ;|s}F^l8&?s})mNU!Sle2KL=vtFA?d3KNym&f zRmMmy4=L$pe-zyTU3Ss)EJ1^382OG7h=}I^!@4$8SZ+u%WJ^iIeea)gM(0 zZ8|hrArpneWZ>4|rD^A36as#L7!nN=B6R+tW@np15&Ei)@3}an26WQ=OnRvFP!U237Zl;J zB%h;Be$|kq%h@<%KS288yHBLsU-`XjmbiTOb1(kLmp=XUPyMGqV+RDfv_>$z1LDK* zO=!hya@tHJC1%(MLVTa8Zx*U2QyW$+6;2`7LESb+04wg1E)|An8g7)LcioG`7hFdqm|vNMGUy~BVb}I z7#y`bB{?#8mDGY(&U9KOro*VTfZlZ+KPT6txyLCCyr&g-Ps6ne-lLSB#(S82=@Eu{ zMFThyUETo589<(ke_Da}fI2i`*-|m@Xt$NK7lc-sz1-~C%Z-4}Hb=vBJw{;=<$*s7 zAf=kU#YkJE{8e5z8xP1Yc88OCJo~a|HFkC5wzoks`9hD@ko8zZ@WEl^^#-~lwx>eP z9`Jy@U=1Gdr1H`h)hOnFK6bAnsFz189U1FdM&O7nmnMG%^)V)!Z@J$P=6^k6I`SILMD6ye#`#wft=XhUco>mGdvGbFEgrp zCRr~dlwZR^WCPN{oYgF~JM;}8Y5dwEK&5QZ6#-UeHY`>Dp?HlOeX{26F&^p?eRgwO zrd#L+@k08P_9YM;snA0s{_-|wQGwYi!G|TICfGNUuR*Amks&754m-zU?fiPx1@#P? zr8gF1zL3+BP}@vm%^GkDma)8Ew!&j<(D>q*JQSWr6_FrIgR@no)+JyKmIg)OOm1l; z!JHNhy$6>s5s{)E4EEwnv#Bxo_b^XHeVJ)Jhy|cMiIj`R0$8)suVf_PP}KUjmShOD z_PT!1+Chw<$>V(=ENO>@51jQur$-M9mcS?@9cO*XsgF%CycmMjZZQI(t+VmNmdi%%oS|cbGw@E!OS6@%7%Ii8 zIwy=>ZJt&+tcriaDpE2Si_gMIKCXv#5_x_Ar24Bx&?taxPH+ z%^+~k?m*-|S}TckNN9Ew*E3vi=6aG9v6SnpwYmNb*JE7Q>OI%%xPFZ5I<7~!uIGA| zE79@UdB%>VaT&LdQgl7nLtL-odXTGPAm_Q>!1Yy{x{>Rj^ZXXBKge|>*B|EkCa(XD z>n(1qA6Lv_2kMXQfYhTqzdm^W?qBYb{+cX;N(tIe*l5G& zf}vkm1%#H8aLfY`K-qDe>E!|x*>0V?+<>!&#;=B2P0NB3LapuoChCEYl6mD!HI4n< zOFHa|k{7FK0<*>9k6j`y6xyM|@?lpRkl1oeCGbC48)!BO$}b6BEZZ*KppF!Ujsb_m zuEGt2XOU^}VxOf*bg>0>0mLo7Cp`VaKIs3r(_vk^l z%83WsfC?H^9|W?o(0n|nRM1cDu{=dg@R-pTu!L7$ZAVrKvX}ag?yNDF)&Dd%J{5O} z_G~m)BrEt|G+tfNs;#K6m>65Z2xY2wbg|sS#^%Mj|12UczxsxDfp1w04|pIIox_5I zrE^2S&rouv<-7j~pD=_+K2K~)JZ&c@vUg9ZPmi&-2uhOptFMK`lZ`&JN7}qb|2Eb7 zY{O32I-vVwXo?d3+#af@IID=ms;72rG`E~bOqc@Gh$U+SLw?y#W*}GE$&9=(ScXK= z_>t6Ee8Xr8bWsn&QXCQfIA^Qb#a1IHa>}`&sZffzLq1bb-VduMmRGdFv}LgwCQ4Yz zNF#TfxxtpW+nzE5fpYyrm3%J>NTj_qY)MJn5+C}o?WwfRNXbhnWI=|swB1W}31?QR zLY?GhI1{;5h7x?rItj6oCXhMOnCMe}&6T?K1wXezMI*t!HGtjV`?Z1H>;{2-pw|CG zf!%HUM1KbmHzQofjJs_C@Y?|V#eu%{?*r)Wwoml8Ul8&IQuDC69V2=`== z?sWD)&W%^%icA6}0E@G~;%hr%M0qy;zd!$_kN?DvJn_H(EnX(Al;K&{H(#)C5aMa=J7L{20{L9sE_PPoX<;K$W4Hn6%;?{S{4 zu}mwvJ}*K`AXdRn*-RBajli$xv5Kex9HAs_%3bE)o%JbAtpL?94MB~U$({pjjr^A| z$Su+1OtHB7`KqQ)9l5;sTkw0ef!eQvD|&yZB`VEYymt?O#~$Jk(p%&Cnqx~eD!hV6 zYDzG8UK&1*B<+ zH}+lxjO!|Fuih@GoQ)023gOi2H-*>4UhU9p!a0TIC&TMEhu5d#{@r?gQY(ST*zo!$ zy&h0DlDNOi?I1t;hJ?_Sss0t2&P4ww`T3t_IAMNLOdC z&x_DYbIe@75HrzbIV`y$%v|f=9WUYD_RW>UAdB0vxpGL?ogAy9>n@Jf(G^AgRnRHJ z76La(B$(^!6P^>S@SI>JWUi&=fzBROPPoa$u+Bc^WBFrh@>=^;u8itiQ%AL=J!N;( zZj5yph*SX;3L1fa39#_N6~wn7vMnA44bxE^6y}!Kl}RH)jc!Vsa>q^UGDY}ZM;-xM zU|rEG%qF$;6Fv(Ha~u@rPEeR9a?2w0a4FqjdvMb$%vPf!*-b_FDwll88#o|g1z84I;QPV6E<0Zu~wS3Up+4fiYjk3CDVog!df@BLzsgEpUC*!{A-4yhB~D0Y<+vDsfhlkoaj5~O zbhAXe#u@~EGY1+5YFLZPmYQo6CaXhXNEenp`JqosIHXZlbJ6sYT9ix6*Tj}c*e!h0 zBK9l7D@<*}D}7|Ds_=S)A(bJRXT@g%4_vB)0-+a9LfG!uIDOVwq_Q|7842DBdN3>O z2kQfh+D@-pJJb5KO?!RXLnadzRCOL7RVlpBNNQPV;Z#MGxgk1zNiFOc-NLfGg&m45 zGb*e^>`W`emI9-`c~KkGXw=5iJ5V9XlS$jy(-F^Wx zY5?mis#cZa`~|LLGBBe?=R_OW|7-sKd<724`*V`)c&*51pzuXz_C;Np*)v>)sxml4!W__?e6@biJ+!o+#Wxnbd~VB_aAh5~nMe4YxkZay() z|6dx&i2(b$PoqVZNir;$##}O#rr>PiL0nA1xguM)@WDq}!~3tyT>0UOi7irf1;+65{_k=yZWZu_r2 zGJD`#Qsnf`f(&>QPqziUjI$c8m;Yyu)+ehT=En_Zm0aK6e_8rg(bb|RfQD7SomOU} zcc2QOC))-A9Wb7CB*&l-P9Has6=$!Z>F5V>_CtT@lO6fHtP^xx#3dUhpz7_tS1JV& zN74826FVJMFglCi`9k*Hl7icRf#GKd#4Z_-^q(W4!+&DzK~+J^N2`Ob)1f2P>Hnpu z{Ol)(DnCi(e-bMHc~vek*I;W8$zIfT5`NQ~x)Hvdwx*?99S%*O6ReQ@5{9&PxayC4 z;`Ryl?FlH2?60LEVws}TX##zLw+H0t!ACa}A8BliBX>Qf50yXJn7bji{M#6GTcUp_ zra^{RQ-u&sAJH?8USlw*NXAr9k&H^3=!Lhg(rw<6e7YnxQ`Az3 zKz!n0J)PyC2MGt`*J*}pdCcA5D2?0=;w@IeRgM>tyGjM&*G%*gO)wMxGrA5q1=h6} z7wZNXvu+W_WVisp02b+tzc;*?Hgh4&uh~5vkR)FNC?njMWSb zu-6w9*jvz=c{?;azZZ!K$`vzsC&o340mOgX3e&qj#P9HgnUjk{ug9>IboO=sHj#@; zc}Q==@CcmpwoepQ|0`<=|3mZ+6vx|Us}IkP{d2j#whq4eF03!nH2-^bYk!-g8}Gp9 zwl#e0T@<+L`rEW*rmE0h^h7ncrQ7sb^Ix!8nwP`1`kLaRCI;!7Q9D~p+G5Q-PX(QydI$IMaU$YL*MF!lrbKRicbcJ?Jw7->#Hcn!&mB5&XO+0gU1M4twqX z!~DX0xQOb))ur2#|F-1l!YNwW1{*43lP=lOh0E3FaSt9`@iMKjs+ifLMLL^1aZBaM zT5T6WJ=d2^3tygS^kM8X2`=c|OWPQDX|dXf>hoS&K04VjHx{;)xv_|mExWNgqM?!- zt5bGkH4qB;`IU)?b?D%zZF*O(ovTUpvK!>()?)1&1#ENRL2L!US|TPb>{>V(V=uzV z)CmouO`K{y5mTwrB>pURw z?rmejed3)G{jxPH`;jr6)yd{*?!hWclBCU{O>nS@SKgo4+2T+$O@P8Lnr87db#@-s zcfTpGJx}`=Xp`FoX?}s{v|xegaI8E)L0(Hd!ZWT0I_jOms>#cc`A4qLK8CJkztqFW z3&kjkV3KHd=^{oNnmNDKbEV^fYb+@YvXco7i*AyEB^E{h3eZ?}#*kUM$g~!6;9Gn? zlcS-QYS8XU;;~b8kZnpwHy#eJ|0Y*Nj+pkpwn8F-ZLagnw?|R5_3@dPPx;^I#aut9~q~28_WPl`)&xU47Ar2(8-(1d9=I`*XrWX}_)M_TtWlAC$Tv z9<;c#t!W|=Cl+>=D*M8j=w9By9qydguNjk`@zL9}gs-8!c1_!7Vo$s!e2VxXu~*|_ zZ@>sOHFZ8fXi}PV+@GKoP~j0)an%gB^NG&!(wg%G1o*qsOxn|FI~)SegFLU{5OAKd z7x@B@tLpOa{^q3*egL)${Mh#^*{UptqV?Yi+WQLM=47J$nVnU8E7jiT z3QcH*$k3X7<)z=_?D0M;re%puAe1C_!20OhlxNs9NB(;6ReD>YD;{e|nM6=6_d20@ zV#4d4f&8M#Ey>*n!5!mPY>ECiN&JZ|(X+aCi&*pIX+7g}KdLMG;FG%IzB!^R7Q_>} zBEn5Wz+!?F1v02h)vafs@R1i>B8tWF0BBy5MV;BzTkaS0?lAW+3HCpy3py z-^@z5y!LhbUxK>b$Uf<((KWOH^Tkj7&M!Rmi-&*pb1cB{R+ayqDViuB`2DnS>sfO* zDeGX0CTnE>S6-9d`I8ISIWSZS8|Q{9k^i10VL5~v*)ORA77S{+PA6M9x5JAm`VWP! zetzq_rbF@htxx_MRS~7GA4sd+D!%0F%zD_u@T&!Vfw+QhJZY514-r;JC`59|zE*&$ z3M4cji~8*2^Yim3S<4WQD1FDOgo0v-Vi*8LcxR>Lt1p+{=u7V(E`29m>CO4bnwUkR z{LU43GsWGuJ^5Rf-||~fA-`qgMSjb+-29fD*7@yxT->r1HkqCbr3Sg<$L(&379F(6FzuQaJ*cC+ zIg7M^O@)npe%aOZy>5Tf6P#;8Ytnwg0t9P_rf%pD+nt13OPpcYcwaWVWEj|T{@U?2wifKAA=U5Zcz)sw& z=hDp^K;E!!ooT;agL2~-rV7L|MJ|NOJR_>;y-_<5qf(ePgzH(92nLL31)hSNaK zAoRM%&JWxZMlZ>ncMZJklKbZ2``1@n6LXxcJ<~=+TdU#lF9Mqif z{swh%VJD>N#6ztfq;q$`Ty-iu+-PoYwX3&6QKS-nub)PFGF}KdI}L8@Ks)d7t5q*1_$;2ZGoRn1%B4wn7me{{2JqDGsqTZY_N(p z6Fl26Go+x`1|nz+Cgy1r_s@U^!9yQG_8>G^N#aPEx%@wOjXAF)g*8n{4e#sERG=hp zJX0R4Tx+SG!nkj{zNwCP$^g+(Hg8iT$&|YTTjnnOBg^`I7x%A0AQw%o8Z?EX1_#og zl|xNY9;=*Wz2&Cda8qwpQ!8m|Cr$05DMwSQK)Ir+&Y-CkYUN7(SuxZU<*~}+qMZA- zyK=axTh-JGn!1~&?xm?KX{rO_6-`YKnwn56SLn~gP*ar0D%Y}f34m7&H?>7gP0-YC zn!1OkIHsjPjpo6mDoSxYNg^zySlZj2zxI@O+Cv}_Z}VCsqUX`@SSr;&@MrY87iv`R z4X{w1XlzS9T67#i|JoT~6r1xJIw7BoO` z0OiQq-bZwJyZ;Fs%GXFg(fTar5})oy?TDPmfKe!ecw#Q1uj~Ei5cIFcpT%jT=6PT7 z`ssC;9C~w%BgX_$eT4IiFOG&U*4YYkN?IP!# zB6Ti#_0s}?Nwz@$so;1c^Nr$?QuQjTq`0w}wtKo`nm;)w@DZ5qkj2so>Ae}d4d1&4 z_NQM$b@f|gc*2_iSBS-Ntu4`q#U;>c=EK#v1CAeQJG1{5U9xve#WbGm`48B-x#Ed0 zc|6EK;)?U|4n*UEF5I|~0o7)kYL7ly-^A{5NsY4GHFqJ*WWjQLh;JHjHH&@n5hk^a zg?+{Yi0WXpqQ)RjTRd&ePS88HP{-TTZo+f79&Z3F;7ftL`69_;7 zXl>|xuT=9GGT@>$yIn=CYjd#dqB(NT`6!oKcBC;!jMo>Hh8ISlI2RbJNXWy4b)+)0 zBR)^ozk#~oYPv5;`+R<;1MfQkm)H1j|_qQ%}x=(@P#DJW>+12DkI>BO=<7{!AHg( zNb$;9Xg%Gup!g zmYX$a5gvBl&AIkoe!`|u7-{={6h2l1=#P)ZZ)Xo{B4h`R@wE@kZ{s=ABl`v|6q6gN z_rQ}s5{EVIX{^n1Oq^n!vZKVd`!x|QycuL~@{slLL`BnQFxw||RTz|?>7Rve1kH0* zTZ=envrw7~1(SRsc?#5A^-!1vFwABFvbR|P82J>m_Q^KcCjnW8h3!)SgvnkuwaNrz z3YO~EXG7@K89PvfDH+qSy-Zo!A7h9;rbK?t(v%=G9I`#H&-O_0F{LmNrljTC`%+xr z`OfVW@8Bh0G z3Wvjy%FMdIpzG{Wp@-O|kVF87x=&B6)5z9+Qdi2b^Ii6^B3+}x)4(OJFOEr)Bt=sT z5Ep}8O*Lt1JRpB)%24(qO$lSFtV_KNU1o3za2#LSFt<1bw;)bVJ5X9iIyMV%Gte4x z91uvpZ$++CX?^4z&Y{hhmbL=iiteo{XQdWd!w>WkuQx;y(~WVqHzg;oLHle~S5xw| zMd@V_^e5zqp|?UyXQwcw~^qm}p_ggX`DR~m}F7@U*-v4)?_zc9dBOth=r5WPHhYm5+=`;;vl zkyumyx;M>?vJLH>);m`ds%{oBnIT;G@lRgnWrHw!RHiln$}0@kXiy5 zqu%f5R^64XQwK+>Z&(owM4ixx@NwgGR7iy5LimH+n%J;v-l8L7B}c#*roL=uPUf)g z&<|MT*4?%}bQ5Uja8`V2Cs+s%g1K9wmt=&Th36yn^b5``mzR%Q88c^i%QP?rw??1S zmw(1Rcb<3G=v^;W z%7vjiU*;W)O-dZY?(^Yy=Xi&TAu<9#hTpx!y9vF+N?Pzvr4c$r@r!iFrsOQ3%%0#! zJ=A`z&7n@<1|w4fo{I(Lk5k^2?Z2S>5ami3v9SCjlsA~Hh2^->(ke5$u>29qiTPSs zj@B~xGQD|IGOx~qiOgQ?i<`*1GHcN4Gzg-tstw98>BxxEp-o>|^OB6;4t(<8JhY*<_3_QDKL|>)e}t;nv5}TU9tl;X3ywUwGSN>04D;rEtBw*%xkqEPa~_ z#gJHTFo?a$#TvW-JOc&l{w9~`B3Q16_;i1RtLP%I-3Z<3e!aU~7vMzV{M24w=T@o+ zU?HYbt7OJqp(2Br6U4}S2Tp8st0{im+O`fQjQke2!S}Ah;5NBy{X>oZZ+7eaLzRHR zE$({%&~P`oTiuQRVGNJXTiu)egCPDE$5_*uO^Kt?=a?EB?wxL0{nF&66KhE2&knWVMY=6YPaDcR;?0I)F!Kmq`6$pKIS0Go0E)BwQd8~{}S zuq6jT!`%#M-jajnPC&EEKP-2*@i0MW{PUFC%9rEC^9r|(YFfo}(`B@AP4V1zvvgoh z@!WB@)4QvS=dQbhu3wcugLsh$r2NMyBfZvLYvtcD4Srwy?bE3qp(B6!j%l6_-2Qla z!(%7h4JXp^eJuK2`9Gv9_qy?Yzi!_~cR#8M{_jWKwU4FOxoaN{H9UF(est}LG~P$_ z%U8Z)jkxP{`NVfjpCBxW4eBmg^m6NWhL@N9`eP^hWA?MbAEWq7?eq2Y`T7&-#6BF- z^!f6=ZsPB`&w^GIxoNt-udlSiDd5x!joxOa#@2`V_X?)w`@x;)H--n+xzvGqLVEm!uzsm;@>)T0X&C0xfAC?_w4Xb) zPX;;78c&@4czk!iIy}U&OCI70RIy^5ELz&o+_J%F_x{5Va@p`8{SZlqIy}be8yMr{ zV2qP2D+){9^Si zzY_z?!Vj;NNV%7QN|dsrBqJmqN-`$jAw$4t41{>;zngZ+G+)))+2ijgc!21Z-s9D% zc#7@GIdw(G47wiHI zi0SaPhz;Y0Fer{7hQ!~vhX4u@j=;{e0|88+=W`F4#$gPdW_TFlnO1*jV1EC#_c`}< zs#LZmhv{x7s&no+`|QWsYp?ZRYp=a`6g>(?t+=%k`|C}hG!WcK&l=Hlqtl3&DI0j& zY@Pkxr`dyL=;_urn|>73jA$HQX2n+S=rnG}6F5P7n#M$oZ(2x&u|kOCO58uISeMbz-HXuTw}hP5U%i5Q}PRxa4aYsYnIc=+o7wA>ukC2fHLvmx^}Ou07q_ zYDJrJp=fqjQPG!lioRr^Xw5!aPlr^~G(+w$xz>%yp6WVN4{LW?ZGXCTu@z%bgko@k ztC+2wVzv$xQ^|@6shDG>7?$Na+c&uuVUc( zMXQ+ed|t(v%-BCTW!7~5!`9@ia-mZftz6!zdFAL-MgW;{zLdXQM;ysjSqad5eBkZw z{4G5_@b>cjEi5?jmV>qRj1_MTnt`|5^0#bFH}G~Qf4dU--Ct)sKq2R0#9sef*Ab|l zJ0YB_mMU5USROu%s}0?;o-H>ouvT2X5Ln*5)H(;S{6+$NqplOqm((=jS_GCaUuqKq zSkCZ1VEK*2`yMO{@|#{*n}cN&G+oA*SZT*n+Z4d^xeS0y&S7_%OkK$CvX{BtRREUP zK2a$l~3C{@zmKU`NE@(457Qy0Rd1lE?#0=;ltjS;pxGvM65G-HV zM)p|*3xMTKucD2w#UQw_Z7enj0^I77=`(J|e&PGz7TOH)Q^@R_l3+n0tIJqd|8g>3n7~xUxg~p`4Tx3it=(flp@YMi-1k5ngfi*J& zuqMY0A(e3Q2V!w53-0z}&VY;- z#hf`Z$}wjKccI!SGXWm%&h)_DRRQj@@F$16y*M<$-9&MPH>*iG)gu7Yg zLZ>cTxx7>J$_efc4}inFa_A^?upc@e$ltPi^1$17;Lwa{B5lO4Bwo;Z4`jv z8}hd+3&8L-`P-=iFx=%o=n{=!l)KtXl#c;A_QBl?DGwKfy9bt9=YXsF;O>R2^BSY> zx#8}+mfD1^_))iZ+}i=}UdSeNySE46u7|m}96DU&TMR4RveY&e`@09)wDlaS^;JwW zEDi2@hxelczTumf+AwQE1bhGm1h^~Uz)0`7z~9(rE*0+Hu;eBR?&j_6hr0{Hqzl@Y z{SNR2;O;fAqK(TsZS41df0Np{5ZpDm)ftVAxK@NAfJOTx`Fl}l%8r&tD9=L0qu@Ky~m#+oxS~WUwcS{HEZdn-ahEz*}yJ1#{ zn1epJ3$#23-0g*y0q!meEpxb=L(4+At0)F}cNON{19!ok=YYGtm@^=wMKNcNjB?Cb z2zR%f6Ylncya0C>#i2Re%|YH0;O-WKyT(xPMS#1DV!s^j=Gbo#?)u7S+!nmMi*j2I zcXMvb;cjmgU%RE&>)p*N7dmy(%H^G!SFRZDek6yEMR51S`P(A6dnA8b1b6Sx-xk5$ z`|`I%aQEK)Z4unPCx2T6cki~b)AvU%xsSA$C?5lK?1Q^T{R<=y7lgYXUTU2KuIhuk z7qZSvg}X+A9) zae74-;gNfH1C}3vyZ0@%Vb%n}T~I)Py8;e9aQBUE=2GGAy-RMQ;BMZ|ez?0JOuC?b zxkR{o&#P$TvQ8WO;qEu7jSInDgIiq#al6}Yzks{ko^QCj{TyS`%3cWW+RJ~Ea5osb zM2hyoU7+PT;BGIp3~+Z*Xqm&^99kB_-3)>cz}@ZVguA_%Ga#cyF=vj9a?JS};qLYx z92(&6qBt~%yEzVBGTb$W>cHLY9W!YAfEkp--H<8^X6W|r`pTPh>v(q;MU>}+yIBL`sE4<0%_ zW7!e6ENSwuImvqdACiNIIPg6@;h;aQTxzj~vehDQRxb_{MD@^YdjreaN3_ako@GMB zVYBBPC1}q^o;|EZL9E^3Ns9;k(AJmpq;sVS@}touJ5nlQlZXHCo$tkuN>s^=YDV`qmtk`Hg{GPQQ;cV{rx9@+3Pw)UO)aMGQ+>RceoE_0V`{ z{Y_`}&~6q{vU;f5|4yriuGG8b-RpMzcUnC(rFRRg9@?XK3#=X@D15=yLs#itnawlv zbwXC2o<3}~E3F<{Nh=Dz z(&`}{vRv>=tA{3NOTjCx9%8SCf>*StCw==!*Xp5VG^%GAj<23p4=txr1+TPvXhr|x z9siY94{?NM(O0i$^-!ZALmJgnxAq5Y^^h&x_%=qnRu5@~L+d`jqKNeswt7g5bz0x; zR}a0PXIedEtAak{Y{Ag`c&61uwkqg*Tvf^6%QLMWvehH^+ro&}T|Cq3A+3^V9hBh} zwcex4-K|5qlw0rCrQSNAOQUt0F3r~Mx-4(qsmoOB4#dq{`4XszE7Y$ZQi<*FeWZO) z&+4H&++9A=!AII3)T#}w9=g-L*FU`fk@k1!p;iyw?%wAge$ONA@6Y?}h)kC5stA}i<(0l#rA(4&ML)K02@oTf7Q@(oWfU^}}5G!9jbh}@1 zV-$0um|s0~k1e|CSv_>S`=Gni*Dj%P-{EfaKg!hqJKekekBWP*yVu?2f7IOj-FLb7 z`5!~>+fX@o`yY|J!+pTf*7oh4)kD_Y2mH#O@1r95>Y;DouO7O? z9kHKx_|-!P+&viqVhHfTi~tD)_>PPKWeD({838H~;NFY?HTUh1<^vgN9)L98=YNd5 z`}lDcmGQru?z>63H~&52K14Qq^4|^jJ(QtUdp>>L-A@Is%zqENgVb(!{=4eFm#Xi| ze#3a(3y18dM$g*zZSFSvg^k56HkN+E&i;~5DZCfo&3jL^S0DCK<|_^oVDhx3?W`WU z?UD8YciYE84mO2wTi+DI0hP6oO=T~0n`%MU`I!_R7Po(qxWq z^q^aLf$JOs!zL{tvO%$g-wbzZZ+9lUmfD1O(}Z`QYOgv>JdB@aTy=q)5EgzFfyT2W#Ux%g%k1 z+PJQ;jZe4UH@JFe>0PY0ghD~eJ}nplz2aHEQ%9F`44l%Sxbrf?77XIpld z=*i_KM~0Et_}PY7ufndVRnWf{=nT1O!Uk3stp zpL({?B&6b)K;k_2W9_a`6eT;#Ql}9^vZ~WOO&u!2|+H|}0)oda&fFmS3fxY1qUI``p5CxKIh8!umK69R5*9mc08v3}6C zE^reDabqjU@>T~o+TfF+9*hyO(vGFJDd5KTVb>0AY8SQX-RCetOwKH1g4oO41R2B{ z?0ehJRMfd}8667g9zn2muc)wax)+%p7(zsxuI9<^tEb4+73e;1of?cP+IE2XM0;IMv>A z*ljT(eb8;Wz)cv0fLnrO1_FBMhiO{CO1CVvO##+!J?yrIHf=3x(}8oS8>`Dg>c(C! zqHchITQh}|K|t>hWpPQL>+t5KHq1tYqV3R(K7hwbnYv3tGcS3=n@Q0&T+qIx5burhDpVR;L(L` zspkLA8?g(wPta1o= z$0Jbij*o>L4FZx)4+ON1UuaC)%SFZ{l_=`Rr>(#)2zW;a0^YGO1PrM>1pL+v0$xlJ zgAg!G8Zaf@=LH0A6+pmCx*%XL+zJqIQMi>uz#MJ~0^ZsW0W;6!9sLjx9994Uw{}6m zUK|!6;G#Gzhk!W_69oL{{SfeuLI}8}3j+26p8x?D#b!AK%(0mu;JXGP;7k_;yrTyf z1qiq(Sj!<`4%P$#ce#tZAfT_jF?|ODF3N2=1kAZj5OB93U~d&)J9N9!nwnKAX^VT&G?{s(CFCZYdi$TDhoi^@tJAE5>o}-O- zo?}c}*$Y8Hd$||{+*#bl^8f+&WDxLDiWr1|!T2K_u@3?Qw+bNOTe=`%FWd?ca8bCG zL%-z#NAO0$#N=2>9kM2zX}?HVY7N zQEZk&z#N+i0={(+0`3@qfW}aOwEzL{?3f034wwcx1PrPCMDW|#LcFt`j<0-%w!%d4 zqG+oa0$$yLfLRp-bX&BFIdsdbDCoA27&O044Lgjk%5GN?{1l!}5F!+ACkdnpx6256 z3Af7$3<$BT3Hg$NKVD*Jtt@Vi9EooTUz+AI`;V;)s^YR9TNDS;1d5AY0S&^-m zxVY~-UiV<=DL*5>Xs=FXu?abbo|@(ykRw3f-b%6LVy)Htoq4@SyDEIWRXB9tb|9qda-!YgyD;D_bpXJ$y4ULQ**ID*~C44r!JJ}Cq6;ZKQEBiMOX20CB ze@C8u*b&LHzt*x3TY~!RcXhJ2ZGN-bzfIX+Hkf_WvcEacek7|CRl3Hq4||IG?BCVN zzLKR>?cb{G-!hne!?M3A&%Tj;#5dn!*@sO@efIynlYKc$sqC*(_LmQ4&k0?;eS4mL zJ^P5K`z`zB*%M`RYbX1p`}tmFf5l+-Wy}7?Jo~WEmC-)6>{oPW^R1oi8sl>N@Z z>#=<~lFh*v&TdXV#mPM7SwA>0rwC~CN*RmxWXB&=W}JgMPI zZ4L$JkT+Hi`M0jNjpN=p^Y7*|hn+jlUE+vf*Jw5Uf#$U|<{${2IJZ42rB@#uArdQ2 zHz@eYj=X6Pr+-r7D0KFR8%e824z*$(9A&S#Esc<6!!^k=)iG)fp19`rC?Y3*HmOCs zq&;_s2vpM7Lxg+1TvFQ=(A2Q}_#{@X9!ew5t+k4~*yo{>0VgF)UXBiOTnjlIqABz9 z&vJmc&aZN{IY&c>`K-m6TSSDp`gH_5ahapk#Id@G!|PhZ$-a0W8q1b$v0?b=O`Hf< zawW3N%CN%hedey-$^OBGv;UgU-VM)jTv|)#)Wo#W3K~`c^{oC9&!PS*06K7D9TZO= z%*x@n+EDLnL;Vm-N7M%Y*{jL=p*(AmtsrAx`&XTDpnE;tW3<)0sybxZT$`?h&%I+Tyyz`Nm%4}XN>-#h|2ydJ8OxhIx8kvli@o9F| zj&3miWe~u(oCFG8NUn20Atg*9qQ{IrHhH$g)HFcE>G5Fl?=MU~ZpoFY=kgLAYuTo3 z99=!)b2?-L%>HyUc^p`q7RtKFcTR|yDB$vkcP4!55vY{uBkPPDv_VQ7jC8(D0Ns}WHsU|H~bFP6)IVl z2I}i4XG}19VpYP5unu5XYg?2#D&ivF=G?M5SDtH))6O9`iJTgvGdXW~wxwnu%_Q4u znQYU^h2ygf7T?ndGUWpmB-oH^EN^64)d(cgY4jTowkIS}e6S~j>Q74V7%iXgJ1a=E>Fh~rE&*g`SE_QQSuHaiQO{5(on=a6 zsO3aQ&RKS@euyeb(&>ciq1LF*ytlB_5q+gkIJ|Ps4b9T9dis5w7?iHks2Jt6Zi;09 z97!LUpD)`Pbp9dlh8#5XWKw@J)U1a3Go;Sbv3wcXRaxKVod0SfLK3e%M%~->)2s#M zKuR44Ym^zcp`bcRz3|YhmssPct}n*A#*Yr?_bM<0w3CFGF{gH z4Wr65M;KMgyL(i5f=YGJR3lm)qM0f{lzM8xyfl}F#F?Ojapv3ziiAT^-6SHPE+3lX z=vw31W$KtA6cPPU)4=3l%f_5bG%i{RbS;U;#kM>XA!12yc-Y06^cFvQ!5#Wz8GOr^ z%MdV^OB!+z;jFV^NdHN(ady2%I-Eb-DqGh`;GuyYv?7vBK_pobkrluv*jHrM&KsAc zJ5@rBFI}vGK9v4<%90kQ7dQ7MC>M+|$WHH_8^&CGWYyFQT-K)OjK+ieWmX8Rv)mzJS zDk-OjKE`RDoP?YlD~TWJ-x0TLx?N_>Edxh!YXgT2w1pPwZS&O@OnUZTJriw-qFwx`ro(CoT)-%UWKhS1 zE2ArJm3$}VLoA}=`4AH%q-?N}x~4p+1tId?oSbGj@83u7fGi1evJzJo`Y)-Js})=jSpzc|@hFW;8EL?K!hK$o8txTbTU>0>3j zkn5ucIJh}h@`r}UY6T}^+&DTU#?TS7z+9KyG)?WfruCaR)I&W?8*usTjM;)$C#bU5 zt};BvlUt-0eJ|_ErUHD|-ObjwY_c#DA1(R5o>w0$$GpEdl>Asp8PV-JK)JBnp%49e zHK*v(>161eMibPJ`j{i51O1dh$P9fb0at^S?bLDU$SA{g)&N$Na}|Ybba**D3U=^Z zWwNslT!>qVI72x$L=b@mn5Nqh5*s?J2<&e#K~x1MG-S1uWe9NujJSd$+yMws09kLQ zOig_ygDUoLgSx9h!E$LyRMAtG56!es%1Ck#5z1sDh@ea~G?dNt9PjKan`OdTzf$_S z1yoiphtTvM7if47NhDYWrJvX_LFyZ;N3}$(BoZrR>d*u~V`#w81ePM*sxmzQ7*!?e z)*r3WfCD5COPO|IsI?OtT85XU_!ExSrM(_9!-Hm5^3dyV1J0raRp8y2=Gw6um69rrpkhn zB{z*4_pFZsfN1HnKlMx`9Tv1+!^|H2@iov!9(%296|tgI1sk&mT0<(7f1_TQysK^J zg0r}ZhPTS`zJ%I9hpba;r`e&y&|Kot+=%a+#H|o0<6#EMKy$_hwXRO(HC*7)T+R*s zAJVA{e3*6WU}1e|PI-5Csvic|jWPf_ypH_n;&nJ2!qVFGjUN|8;n%)0-Jdw>^iGH%hgF`gxmJMX2Np%Z{ zWKTVMxbQ{CGwW zvaOJ?PHUA0S2m(Ov5g`u1Dv|Awc0Ib$c(ww+E-^xsD!h`gldow8cZeaL{oFCt{WYO z&a2!+^M5X1J34HuBsue200p4uct-QE6NHoCaHygTty|&nK0dAL3q5Pg4`Ar1)T)JX zZl*;hyzALGm+)5R;1&5ict4>lVE(uaHKi&t13I6`7CBBSGQ8-h z^0r8hR{4;Of7Mw=pTr7RFR9leNp3xt=cpsv)N>}MAPkS8kS7%apu5kI1IRcbySkTf zr7j6qHVGHW0p!0&?_pi&dn$>gk)blgh4qy3@Mx}PIhNF0z5HWSr&Z%7;cE_g5oRN*c!!r{2>oh;dvV01N~ddv>BbT!OGLmNh=g;B8I|bJgdJ zLuFCbg?UHy2k$t?>w(Aq6wg~}- zO1w{O6<7*7LqJebp&&qHWPK``g~(ihspMHPbHUG>WP$*1ktd^sPj^n84)Kic1-Jx( zC#CZ1H5Q~U^ZukF3krgMlc8G>7&~_afoP5(&?N{0?`Ihb`tL-E%>YEj6QyfMIVH3C zaQ5ITDHy$hu7*}lWTxtIw5_;a!^WGcD|CMZG$7~oBBtt5$q;PShjq2CWBWTZGfdRX zt3y-v^KwZ_3M85LO3cKcm4fGklR-^CMW1SHR9$%|RnH|88K7BLs2+vl36cWrFjsx~ zPlz>k(n45;35BE)MNG)i2AY$Zq)9(nmzRw|vNEUwrE_+etcG-i<%Ci+xtR0> zj|-Qg{*{8h6iy&Zyc)&_*r~mUR0KwuVms| zLZp1t^ppFi9&E4O?~Z=zS~l}z@UQ)pF}$EkHHAb*_%RWihObr!r~~_mu8jMLJ{E}1 ziwW9`rsbgUy zD5~griiDBQ=JN{T=#}68+9zu}VLL)~^w={aF5dL-zxKt5#);M9^gr=qCW@4BDlIGF z*tMfciU!j?#FrLhxcnI2I-ic;Ka&4Q!8b~Xdk87L|KI+?ul(3&|Kj-*UoubL*#4uK zO!K8(Yy>x^jwgCx|Bv$IF=9`?Z^7EG`fCI#NPgHYG*9-jInSp7ub~Z ztz5$!Yh2_-tC@GyRWFU+u{ZjDa_Vufx@DvIZCWw^0Ne7;UN>4>qw8FY5QbKbkq#zw zHO9DL1uR!~0DsL1v2mq2ZPwmolM;#ff{&MMhFU|qyw6gP%MWF=ka(TbXlI&K;Eabj z3P**&1 YmNtId>sE&Rvo`MiQ%?#;!sQPW4a}bzI#fDdLg!i_SayRa;u@Y zMk$l@Mhr$(5jJEJ=Q@P8ItoEHuDAtF*x^XzgSU@Pj5O9_xTU{{BN~&E9W8H^u~DN; zQsU2)!uFr2b4OANPgHnhPpx>R9P!1gCi)1hK4N*A79CNAcqCUq$de++Z3a9m!KmKt zDz-q3*jF14FkO5EZa`B7%^)l+4k%HT+*NEG0BO(30m!6&4lsWg9FVI5uYcho;{e7^ z7Y8tU5g?l6EfiREazjeKd;})Wwee#n39aYplEi54JIUNT9C?n&DPkzetitEWwZi8J z#=_??Lg8~pwZy>Q(i0*J;=mw>dA4N`Au|lYYdB@hs;h*8sARH1EE^*mYEY1Ud?g!f zbV@c1iG6IsvYZCl;OB|FY{>Ei)>vc&n=xzhr<%@4&ViEXcg7HJ=bC>9uWXNIG*Jhu z#*#l&r0z#fHG+t0OcF*85GIVAvY6LKj<8c0IkFkT$N{(bkprtT-fZM3pU%iZBj+Qh zKGImPbYYyAdxj8>Y);PhL#XD5kiHcStQJGr5DN8B%1{qKgfs)r6AerA0$9y7F#Qlx zo{S`BaT!MPsd5uI?I}^sWmGe)i5BxTbD|mWRh&l^eIvzr8t^yC4Ozv369`^ohL&(6 z9LIzx4QFJB-{gW)5By@ukCYPuu^tD(`hL_~Vd}K>fQ!@Gkwcn(Ac!N;e^HW@67$fH zaUY4;-nWE&V!X)9B#zQH&Bo%2`^LzZ8o-XF!m{pr)j)~QY<^F3Mj{FqlLN|Y zNs1t4e_oXf4God^=mHd#vQ-^Txo7ppC{it%Lu#y6ZDYligqCPFBWv9pZ#oTQ=Fr@g zH8o7ijE2c?$v?xrgVK$O%dBCUfLo+tz4Gm~HcYi-PP8#)S22jxv!K(kZXdOql1wW6 ze=t$=f6^{#41Z}Gl-C1$q7pyL=`eSq9U7en(3n99H7!Has8##&LHA%*NK{9esT^qK-$#PGoSmSjYfZ$R&e!N>`55swe+NLOqzLtmJwlFFFyZPT4oHrNFj-AGG*$RiW_=~s3IvZ zFB5%i;I5)Q>`PKCRX;o-Jb2t2vzAnxV(ijr{-O+55;kQjhRMc|6mZE_U8k*DYi=lu==8q zZMY^1|9uDkRNMMck6vUy%fCrKC|Yg!bgR->Gm`GqXK7FD(yI)rM{QPO0^D5*hPaf9qP{3L07=Byr9^<`# zrM`Js<{9JW44LWiF@C2w6Q1I_zl^(Izh6#N@24uW%@Vy;o}qZWMlx*mKRLf%Nq{!x z5`1s%qg&eaf>7t#M4hDjNW&E&W+`Bz6b;3Q3MtxRKkG@ZIygfN$p0CndShe7a_A|e z^SLyvKI3Y_!O}`n%*3xGZA}Qf>XsyGul`hP$k+L0dKVcBcCKV&hwSJha$=f&teiw8 z^mT;w2*WY+7PpX7<&++~v=p_+m1Q~o3;zo@O9Z>DKa#HhUSgB^v0AP>1`2k`+_j^t zVZ7u%h7se*%Dkj)oVvvaJ61Az>LFDSv=Fv1dCGxPp${@1j3S`#-(E( zXdTu_MgLIo75oJJ!%C!8E`od*K=iM?xb*WYy27U~o1IEm>sGBgj>SPmxTCk5e@!y^ zj~QHCpMU_m9%pc>WR01|CJFZHtgFH4Dv8?odXWn;G_In0aet)U#AM_jmE-&c41QIv z!6%iT%E63_Ru2E!(keH)sj<%2O;yUPhg-qO_D`dFa!IJSp`gq*)zS?scym~cG7I0- z73xvf93N2BT>GOo2>d|&^%!wTQZEAG0@$99tV5sI><~V{KUC~&>^*ug*Lt2lR-bMD zwpak6^oRAG(eIE{J^MT{4bS=e=qUH6?LPe%Oo2-ZJ=2vFj&kKB(MRrH=KSv_=Ez}Z zNp<)?>?fIfvG+Cq_H_99l7IV5_=&vYlauvXMyJnh-kvBbL-4m}$p8jcrr8>6iZyd_F}|XqUe5wP&K{$1o=&X&uZU7^G?t$BH{v zZLL6RlEK$&?HbzmA;!O!aRJ$z2U`gJRI6crU_L%LEp=5#x?on^2==iQ(60Od>tUt- zq<&o0)S9XAYP#-7x-Mug#Dp&vfKS@07QBE9lemMS=@imy(!R*K>pHQHZlttS2cgiC2;f81J47>8-U6;Hb1Cm(dHAEXOj*5>HZ?P#y& zlj!E!NA@R2_v_jC4?QSNE&nc!9i;2*RbsxgFBgME#?&yL^4 zHTJ|A;Dj1*CF2C{eT}V1aYDpq=i&tW*!Lg3w;(4(o)aR^36bZ7$a6xq-B4ceUd{)# zj1Pw3gCTLIh9IH2Nf%nHxE1$#cd1cn!@=~!vtvVXz<3OG8Eo;e<7mrWlr0u1L zcP7Lj%c=#k1Bw&Z1cK@hW8FZlzXjLE_DVongH9j75%nX7^hOhnuIY{Vo>w^7WG*-P zLsYClM5vB$QQnpy#%W1t15`nDH%KOQ=!I0)a83T2;Lp<9Yo9dFQTj`IOmyLIGtZd1 zjJOs0Q*+Jx+BOy6q-%4#)W>d?S{6>ODf-_nvwBAj=;{TpZC*}T*W|U0w6@SYwZ^hA zK?%r2P@)-vrtuQ9B8iC*Mq*ZqC8km!rfp;+g)~YK^?z1vS53_O+m6(fb_-I|yz@4a zBs6QXA=ClnC0(WY+*Enkpsr0TR3n%3!>TlLep#o&6ELSQ7;WPdV^V=2h+52SEis@s zb5JXAKV)5CDxIoSiGPDFC$fR0E6`KJvVzHjzq({z>m-Sh#pTw7ACD7$JWkk@UODJpxGQ@A4p3M5iThBA)(BoZ>z zBvPJ%RoI#y73ijlnvTp-)9YTiG)=f5H$dAN1(CEtC6y6H(9ndQ7e$Ii(~uX`Uv^*i z4Fu8hgi3)ls(c8W3tcX06uIh$^v6r1APO=-!PP#HCD%Xdm$4ePmxq0wHmD>({sQ_kHj*doZb+O7E%=5?ZgaxW=t1VC1xR8P0A z66(Q1kBHwW?o&f{bYoa-UX_c!>?(Uez%UGvhzvCxRNQx=A>SpQ1vKnxh=`>mrYzN}j!98O>bbB932LC+ocAXCj)8dFvSoT4Fh&%ML2AF>DG zVZ)it16q2d>2kZ3hGI(5^C_y1wLL7W*( zIMwb`sJ8XjB%ci5M~m3ztOo8x<7x$b&Il2)1YwKs(C{W9lk-8l?)RuTWOI!e$H9ihzk$ zl_JINAka3ai(l=UDb5iOyls)@N}_<0BZ}N7g(B0eDjw-nksFs*ccc6 z5C+tglWc3VbD01!mem4KLMI|~Qt|Pqrr|2ASjMEXFCO4bSy&yYz)J-}^u8STFU{1b z8};1KJK?y-VpGXCG z%CKx)ksCEpMp6OF&>x}E zhE@M+PL78T(}V}8n>;JJx8`I`f!x&1_kN$)*^ zms1REDgu)}WnwyAV;qGrK8CG9ea9i3EuP2FWZ}{z1Nx&ilfCjx;Cql57KZwJ+(OF| zf?JPEeR3nFq&oeb%dcp#$S||H}@e^ zU*_1=Hh^Xm#FIW@e#}Xv_?9SmrYG(0II`~2=szcJ8P#O>mP0I;p$c>d6}0X^$ZwAj z@&=rkR~WZ}!8@rchOE`Nj6lMngD9(HJ|^5U$#JUoJYEN-c`a^sBkEB0dISAKcE)qMY7hq7)6%FNs+zhQL5RGD_ zbXAAv@j&S(J@2cSR}d$hxkHEdL=ydOVsG@fcI61(J<&I$4LCnH?dS?AhV=MPK1)A} zZYhCvFG(92op%!GY4>yk-VP*2-fk?ou6BDzyPd5JriMo*FfZKjAv(9lE(CRk37813 zC13nR$9&j^m|5W5-XOaThPtsQvB+(iB7#5b7~DbVycns)U?UTJWMXhC)WQA``&p!j zTn>o01=ON%s;NbsaMt=SGs1l9$v9}prF||+r7zj%;#PjZoKmnTRWMb`>?9(Zf#dIZ z|C|j>1XLSt7?E7iqu>OT-SezSL+J=D9~hStRht7CP9IX{V{VAA8wezW8&M@GM{!AC z4yD{6v8ru!5cV* zAQ6Oc?sCr~>HFOC%cL2Pa11ozxNp?#K~^s*9`nhA5UpaG=FO%xCg1pqK`!Legr)*S zwgsjPY#}?72F%gmDMEsQB0NKsM;gmCILCzgvI%J!p_lvj*NWr0JRi2dqD#SFCd&i0i<@6n4S?7J)~}@o06F}Dqtk6xxdZd) z2Ijcjn0f+BLF=?4V$9&8amPLw+OR#AfwN z6Ie1FtRqx|Q54I`RK@dfK#92*16&g?qZVdw2%%d73HSFo%B|$LMh8V4WX0j>-Xe&1@ z;jc@ls-vL2dZ)OfSPC$YzEzmNS-W)Q8_`jim&DcUkLqqF5~CUaP*pg@If7K$O9@MX zgdr$pq*bzhW2QBNUkFb^uIV1nEHN--deJpe`0pMc8!Xe>Q0ZekqI}B)*AR7N`!u?VcqX(tgD=CU(6Ikc@2qZ>xNH{ zVB%D6f^O=tO1pm2wH|k_wo0l>98z){Rd8#=l6q*PYpZKExmM^C?m}PC zCOxAw!drTQG_^OOy+^$W8hijW5gNe(wK}U zxLeD$7?X4>cDT!;7rq|PW+4kNV)rIKPNWU4h>*3&*cUX(%~kW_l24ix*B55}P-4A} z=KLxTJCj1qpOfY#I3vrM$TET<=FeI*WH}{nZNGm05V2=hhlmIND2qfmg(me?uqZWe z>nr#o%aIwB?Dlx)RxxfN?NgoGlfYoF_jwurCE8d)3SZ@_pbUk2sC}Q+mG+soCPqRv zoS%2z>OO%Z6C)Oqq(o9=;S-Mq*Evs#<**O3SUS8ha%kuSMS_HH=R4n?>C}%Yubywe z&hPLob5Ys1FXpY#+*Q`h=li~WuJi4)d=LnJnp=eoQ=3!VKICs{^i#M;(ib3hlFsCw z@l?MUdhtL%^>l4 zxwi1-hF@*3D}3R8wY|RYg%1$?Jg~T&{+;bA=lg;dd`6g_>j|#%0ll2;jXtOQ>D}ht zaBFvakH-4ltRv?6y4_mw%axi&(Oqu6za9d1u2to)z6&GAP5awv9GNFc9pD>?5B&oV zur&G4ciJPyt|3a}kkSJHj_79(7-$F z{CRO`c2hJiY82WO_^K2FU1U)R8WuhG0fI$u)P|zxzjL~wOmUu{I@{A>?8i&B+NxzW@G)~0NitT8CTc{u*QRPi%(z9P)reTLh&SUA zzDEA5>AzLc^U_Jw82ihLtzl{s(V1|b;vKpbn&}jZPQ#dm*170G`m)0qZ@3XQ- z_cv}(ZtR8ykJ>hSqu-)W@3GAYi>t>M3stX1_4beWzQqEPy?QTWJze8nD zd%VV5jy&+yrn${ins}NZN7f=ZLg;qS6M%WUOEJh&=k^Z?hJ$-uE4-_#JZQd_OHg5-Ieh|guQ+=&6?x; z8Wu4(%K~J48=3C^0T1PjsN)(S%zrhm?k?_iFxB;=S7kMNE&aT=yBa8-oRwAuIx#zS zjpR)fy?nJ>6>g*G=kxoQufAtGPjQ0Q4bwWcTLTob*pTQZ)2cyk+tXW%Vy5nD>0qV> zEWBI1qnN6)1Wc0t@h7!l>ur9q+F$?s&waYeudsiGEE^L+Z|jI4hP@X-Sn$`5rV9%c z$-5pp9ztq*E`xfR64698C}wV~%zBMvAI<@UYSml@mqs7d+wZiwLl&s=*klgEL=w-o z%6hA%XwgHY&c?h14c>*6Z7E1-t1h%&jErqH815ZOYXb5Rr|h8R^9N0^n$_fXMa%po zn-S47j54Nsm`1%MnV}o;m^ZGHA3e!E@v51cV|}X?hH+FfL6M1OL4vF{1`h-sY+(5m zxVo+DOpenjLY)mlGvuQ$+pIjOg9giaL%*p}=F)@ zA+E$aG@eX69i$87_H3af(*G!FdueG#dky1W6OJ49>yz>3>lYK%d1aEF;sH(Opp@ zXS7fwn!HCHYfofvz#UTZ1mE0_r+oZKz=t?5c=~Dci8sQ&YNKHJX`a z^hiw5pHICa@wF@5r43u=x{E{x2Keni7!jwddN5d7=7?mv7`&t=*+UsFJQTCmvL0Hr zA-hD?tTQo+LQWnkh-vJ>J&m`BqB9XGX``KZ{`4XgRv!mQ`<1-Dy}uvxn0$`bfoK7=XT138ItsV z>^o|9uPwB&-4S{C;TCJ_y8q{zpOPS{D8NpuT0467aknz$8byz{r;oSRyR3XYSnJkw zULS9*a~vJ!R{KZu-?8tL*Gz4{=3Rf^8rt`G^K8;y{rGXf=#*RIbT>s(GF*jmzUFvq zjU2cj)l1mMy}j;n-f_!D*lS5inT|(moPMYbUd`)OYXfh%tmWBieKQ?O;Kv&KG37S+ ztd5qfcq`3{Un6g8*Jmmu|BOO9?Sh0|ZEj8Xk|#8&lias#wOTgqTZY%Mi=q&%EA#e- zewwzsY1-bX7OM?v+A7COyMq>1d6mA=YEH4z+Fb>87t>crcM+bXg`L)(ZvI*f-5{`t z1G!ha>ErQ@j_2}bn?I)tHuP<CtlG}4%;)3 z#u~(J=rq0qH3=870jFTnC5*k5NG68c02aKWN4H(kj|IDm>BWKw_Jx#?u;67`Vb$vg ztQEwgAeMxTIwnc~-xspo3v`!O!_EwzS_!{p8+3g&0xn?_fSG8*uUf?Kgpy&mJ2OF% zl#806*N03t)r@sq5N*1@t<5shzJNH^4R3 zD2nutE_k!3V*f)gfgP(Q!lvZ7;G4huhKR5g&BCq>fBIX$`|1Dn$)EnUKa0L~bgPC` zlAbc%wg8Y$J?oM`!x^hep2^i~ai1Hx-ggx@!qW^mgB5 z9bu66xf5Om<7|^Lq4uDe``to-_>H{DRd0(QfB+fnP4xgMOGcbAcW%Ys!;IY~tJV&o z1tAMN|4qFkLj|SIB610X{Ja7zBJJTG&f~!P|4-lYN)C0@122k1rUKu+3e76JH6*y^eJ`xw9tx8>*`GcdI+_EpU zJBs^**N(0=ZrAX6f?*^UJ)x_aVPaJbU}Jhh(=(_YF;2$(*Mal_s85eK1Q-BVo|;tGkA@ol>RqsX<-L%YmieD!UlZF$RN zla;l|0D3DY+J{IGz1TtK7JnL}wo$~i{}VjJ+Ja6VV)k;hN2n=Xx3eda4SW&O@0nZH zfdM8$Xg?cF-N;_R1lbVN?U3Wkjdt4*McUnQd1D3jkoCh7I=x=jU<*>3=sjkRNUlD^ zXG$@ZeP(*6?|nDPV6K~=UKg1(onB}npJaw~+@G50^TajT32`&w3EitkWU7`iQj#&! z;?na8AEV@XDo948rTTJEe2Pdf_sCgAD)G2D61D)o4n65=Pci{w(;q{Oq&Ly_YXJ|6 zOehMgqc83c@~1^Oq3yxKrb?f(84U}^LK_pUYK||{dd?03sdPK()&Ebrk`=rwxwkR1 zu!4m`xp)ZdE}dA-dbQdm9^hf)YNQf;>{TPoEi&@+CiZqToQ`Ik(`HyY^A8X@lzz-_ zC1zLAUfX#w3#jaPFV$*eO+y&od=0f|j9Crd$@Z=pXETk|vfAWuAyZe^d(W$NY>o~x zRc@=U&c)qbIzFR=Xs{?EFgze$Qn}lhtN`+qRqyT!^J6h=V=cJHKC^MH?7rD802vmy zAeSfI=qzgiYw4P-toSF>3N|JvZbczT%Uc0fYc#%DtzgWYUj{&284GK5B_I}I#mTP} z0mnfd)HC?H-P~V4imqsW3Qz*lYmEEJimf3fB7I<5r(gzVbDq4%*rc!l>k08H$&Hl0 zhrDeHax?SZBl7nZNl@9Kh0keH(Q|42Y_CRtqozaL@otcHkAg}fH~EFOyCw?%g=Z6< zA`?)AFmrossYl%@MPA%o{f{tu`ya93fou^l`%4_4O;!K|6gs+Liv77* z)AcF(r>WV)3dz=rlm8Q@`uP4GN3V+1AOE-ga!224zckf5{x-X%OTz@Pbcm=7;>)SL zN>+|dxFFmGZeR`$t2O!T;ffucBIHLcz%@EKdaR7N=(lvdcFEOb=b!oMpZ~^BefkeS``6g{vPG5PU-TvTWG6vl2_ET9 z@Wapik9iI(B_@ZT=}q8^c*%;WSb|UXC9ooVf~qC>bZ-J*gioM#owf9rdlOg@Po1$M zz+EKxd|v_;5fThpf@gXYSP?#fD5cXZBYH&|TLfkmhSZ2lT0L6 z`VR1_>e5NWK!rv%X_Y^kNcWBfcWp*i4-Z~VzcZdm)NN5VP+Yb=wi8y8#+Xr5>x`G@k$sYp~LyTW>m0%9mSRD4mTWY6~L_c1(=~bet~mI5LBJ`g`_)vA)LZTVfXdMF4Qb`K}#-vqlMkH<~LYI zKJ^$P)H*%ozsYtl!AWmN8(7S|TXa(Jw~j;-pl$PcD* zSz}F=@76_9w)t$Lb(xA}qR(FyrR5b1f_edJccnO=6c3$RKy}rK;1CpL#-9q_AedWB zsS#>XxRvzpdwBRi>z7XhPvE=&0_%gbJP)Mi6d6pn5Pru#@q|VY{-i|n#P?3fr%=%$ z#jJ32{`q4(H(vvuxIGbL-#iywII}1Ln)^?7Q*!=e-&~f{bCjINquIXCLwPD@z_X0y z36jq(B0ShwnLC?m$7t4yy=@#vCHIyoLcC?h&A4Ph@yM8-S@VMO&x~>8$sbWdk+cii+I33no>z#p9 zKHdUgq{t=J8--ncKt)jV%Yoq3-0&lseQm5-=;L|w`*%Dbug3iVA%HCpcP@HH*-cW%~A`a9Za-D}5E z83Sn1ruXisozd~q&ge?Axk`BElN@{C=i+?x=#icAE2{DV!?iOMZ zvc-rkAyy{iAjBd%i3KPo#3FNso;v_b2h96&WTa%Js7!>O{wO>95xiHNs%G)v@KaHT z(AL7|UwC)C{h`u>1aO}|;Ul<7>1Nxl^s(Q4Cc4hG(vRzUsI{5rTW4EsE)Rndr@1m_ znKLiR|Jk~TD={BTW|!z~=BG>Pmf6-uYR*P)@gXMFt#4Zw>-twDobj(phgzFR`z%k0 z;SeXZws3_xT3dO(Z;rT#Qo42)Rw#+jnE)?Ys!LqbTIDrN_g^`^I37itYHG&{9rcAV zK=1E~X51#X5t~RS(QjhkBDax0;kU^FZ8|sjKLx56|L^sMu=nMw>4Lejnu1e?>IzR; zA)#TOpQ$zrv*oOhG#`Z1dO4=?RP!GdB+ajP`RGFKZua5Qr7PkCyAlT?B{FFxmWr*U zuHx@stvttINBoI1@eS>ojuztXD(#^(%u{w$!W~;lPku#0ZYJK1F{5}rH_OQZjO6Xn zsarLUIV<6_sPxHxJy~Ly9JE6vUuUga|c5qT;mL?H& zCi{sW9bCQ*RVHA#DxvMvV1r~y>~x1q)&z@&0m6wbE?`5EfN(-BTEPnr)qxmDoITMN z;$Enl)0}r(YvSqfjTRxGv~>b5Q*GC!d7BOCX-1_T<^U^js?YVKdt8-&mhCn!W#z72 zG?nFA_^5tJff_UMRIBdUS)IvYeeCgH(yoNmVrN7snJT0OX;~%~*(ELc%cfMu318h4 z{V(BOiu_-P`zh|9(me+WGS4yQTIyi-jd=@QwHb+3OaJ`2AAY>z=XSnyl-uh^2@fo3 zO}Nvjz3W=0B|KXwK9O^4-K39Cv|Y5|1qIp;GlTA#R)fI}tG}$H*rZHqoPvxW+e{8= z;-fl8^boEj&Jq&y#rqHuOBg&W#emw7t1}ef$yp+G;8+_F6%7a*2n+}t81mBdXPj(^*z$Z4nYOVRoa)q2oiLYIG_F_OCL~MP$hi3ptXns6=n$$5CnM?73ZW3h z>qaX?u~inv*?`|{&pwEzSRP|=tF!jlV8GO|yl|ie4h@d2@gR}?3q?ir#Ou1OaH^?9xq=vt$bm2)yncEoSDws5-;BsZR?Bz;m2r3}%sFRMGgG##6uq~C+Abj$?NR#+9DxSAy*-55qP^%=1=wvKv$AsSHo=Q@JIF=<~qfg z77t<*AUJefqanh2x*4|@629qftpnf_*(_a2E8)N@`xqaFGe=Pmb{^VAjg2rY=bPwx^&eF@n>SaB6Af5k*#C|_; z=ujJc{28Q^1_zb^)AEwR$hl`}sw|JwTs2UjRGBry%*uIjwKLknEg|CqEGEEqiqp~| ziDWUew6Y0+70`EuNg(s~>Rg$+oXa{hHQG)l@Jhz9#v)qrsMugr^=wvXX|+ytmHx3= z8=_qmW>gP1e-iVTw2XQK2KeVpCa52f3F>{RO@iKUWRu=8FBACI_KE403DW<$OhEPq zwYmIt$b^!7C+zg-Wr8Y*DyL4!goc)>7zsp2^oUKMX8f;+r~H7Ynj7=82T1xtMaxnE zpJ3Rnw3|#6`2I4T($!zqzh7h|rr}NAZ(GGPm+eZ7_Zye+OFP8_`S-(a&?7zedm1H< zJEYvRxBBZTu4>_N(|BGpsAO5|@D@hHX{ErjvL7e)8LChw22%AG5)Cx&VKRoe#0oEM zD014`3Hk1MbdsB8HX5nbkdDuc-LNeqSz#SdCrj+YtU6(cQ?IB`6IY-yk3KyIZ)@iX$_uQ`fF?vx2?3r{)_#k z^S7egYW};-T|!%e)~=+KI@|m!u>cHuLj5N4tD`vwKpp)=*3sdcPVf3oq<4Gzkh-du zZk6f9&8b`4<|gL$v^}eObIkfyR4(XRoewbFfCYyzbFLq~7>Y}zUkt^+f+(*v*v?`o z{W6a(;*~`BMZDrft~Br=RsR;;psNc}HJ;xy5k)=*_4O5REfdv%~zOLXf%z(kJ@tfzxI5VqRus$Dt| zQSNmhXC?RRz!p`ueM5)Qxe;vwA!WymX(VQZAm_=qA?h!X)qgF4aq7>FZX z&DeXsnsH@OGqfGy1QqLR3X_x#LIsD|44XcnHD$yix}5s)RK`Gu&U?;R1$P%!u%L3c za@Y;9X;1V8R&Oa%%(j(nBU5?6*y{2h&@$~LUQX6VYuBzV@lXH7Yl#D9q95-*$A)Oe zw#lU=yRK<&rodMWR4nGKslckM&&w!)rQX`t)Bvjn`r%fFv5>Jf7u_Z$V$Ch7xjfL@ zZh7viV>Rtosd#f8yU<`pp0+mB)+!e{&H6;|bD8MXR@Nv$3h=VFSErgy>8-F_kHRC+ zj7Sqsw`Ec-XIn`1*7HTG{?WG(sl>7^%%1I0Y!J>|Nd^)6+WW$}+Uqq=VS5QhAlR#~ zse8{?Q~O8gVohaq(o{BS7mAc$ps1-|?{2EWre3tyA`+zbRxf&pTCU)(H z@Ip1+q?rKSHVh_^R+hP4HVLZ>fN8$=u?hV#jUVC`W3%%=7g`qG7ZfM zUx#H@2kc}wVUST!3b24E*+d&p|3Rk2-30rGI#Tn8iZGTvBv>B|mwP>^SsNj!U|ig<1UK7z0Y=^GqR*bq>LZcr1s@sB*_33Fihy@kWV~zM=8h?`LouQDFSS zevrmkB$Wdu6A2454ojgXQnp0Yu}2(_+hVJFc8a!1AxL=twWAvZVQGN~JdxrY8uuw( zUrN-uY(sqbfZ!^uZio1iMOt|W#&zcf@Y;5Cxj!X9(~&!qCHL!CZ0oX&B-WR>FuE`T zQtJG`8U%X3?pkQ*qPx@?VwNRignAK1=oy&1&)2}*Sv)X@iU(#%p;>id1i*nX0#G4f z1XQ}w)%17=Bk%x>fYL-&#-n36#6aT%BjLG$k+7rz z5Dbm>@^t>egX|lR-GLtQ28fxI93hFiX3oJ2mtKa1P*8mVv+3OjJ zcqLC4GZ^x8jSJO}Q<0BopIvAyD@JQ1=xr7kpVQ&NW~`FL>6st=BCZhWYJPOf;>_j2 zGK&NQQatp~oa)v|Ipw zUbV@kiOXS6^bsy{U<4oFkdd4RfqD2He1ISJ6hD#^T13{7bCYVp8r0-3n3^OO+32q_ zxh=I=I?|y!x9Zb=(raoZ)C~UQ-YW|!{61Ye6VHRB^c3G}|#*Yj=^El%l^ zw<>bUUd)SE@Faf3A!xS5&cAqx={k)xw-z}_Kb=Nrh7AO!{gau_Z}-lY`^{99ChD0wRg_RE{egII^lM_(<$I!E)fIyOimuH)fD*UH&$?Kxex8SPgZ%Kg z+VS6l4&3tTLn-sTa!9LFhrC=|06Ly|tHjXxWh888yIqMGVK^EsZI zB;F?^Gn5`hcAOT20hCV3SwuRPH z$zfbNMQ+Ae1bB$?rgFy1erJrC{WeyHas6*PmnOGHyUk7t#%0unt*D!vVXxo+0!Z8F zYF+-9n)knW$3?BkaluT)(nK_{MPiw`9lTw+q-M*sT$izT_(sHMZ!>Tg^th4mBJ{YC zMhe_WG^5qm3~Y`Frfi^*3!6c39L-=SS!tR@l`%7CfUr(8aMJ*)dz;ZZU(MK1+>DhA zHG`>dnxP}>&(#d3hf_j~I0#eTuyOXs9c;#i^VN)X#myL7s2NC(YI?s^IIU?AYcUQN z5W46`0q?Z=O9p{pn+r|viG?aEdb26P0KJ)!Z3+85C<@1(!tpnO!fv688-)!dQUAE* z0&>bJ++|Vt(bP9AU&{<9s((YDMPZg3+lx`n0e75$vYq47OjiR@jt;ov12>GLvvoFa zgeMoDqQEh3NfyxHIe=5T{YSnAeNCzMNf=OUkA$ffNEmo-og3*AlrXH9Fjbl|QY0wx z2{NCYuA(WQ@J&H4Bg(0MN!y)SQ>$`Dxsj2K%&k59Zq|W9~COy;FBv_$Z0oR(}!P&F*&3W_LUCyP51x zubfj5qb#BH#Xsts>11^!G1~{rQ&jvQKj`d$@I(DpkI#z}O>@CDUri1MiV;&z#pMCVVY@k>i z%wgheh%EWnCrShF&D;*}3GrI=J>g&ryr*DUA{=1oV{#Zq>i;nxnnQyc9C={vGDnGy zrW6w>w5n=u%heXoMYx=@(X5nj?On7MLK9ELivuCRXboncTB*ayk{jDqj!cv+wE1vC z7mc&&8ITE>>spKvq7AN_Mhe)Fq!TzgCemcNB0Mypq}BFbynhE)S`VL^A>qdEl=)S=@IiSL+Y=fXOM9#7`ls|b$b^HrjP zC5c_+w(p5H6XA;;s6gLMv+hl@#Gkv4)14>`&@7B(`9X=g)+?)N~a$=(W9gy1W z!bm&;5@&mBJ}0bt)tnKyta2maedT)2@48yHGcF^N@HMaUF&X(yUhixW`r=40%ALkI zQJ`{4tWS{>fb+eoMb8Csik^S&KzYSO@q_j6FKZX-;~e@~*%bAf22zNV(8-yXGWq@gPv-m)J-QW|* z{-^JsE45>a7}GK_`C=(ozqR;dN;z?_z8G$C&@9VD^d2T8{VLMq8^PtAC84@4<-wDO z_((w|n3T_pfrzAzIphfoi}<&4Q}OmZXkOA-DXlu3ezc@LCqOp5c-d02+(dR3GLaZD znjl&IA`2^O`O_D9N^Gt|^xK_95-;#n98csnyB~%e-0+s<22NDe3oXJ&a-dj5p6eaZfbluceR?chkom>3@y`Lh;m&{)PH z1KY;GqI~lQW`UBef1nLSkjtzIY5r*mx?zE`B|JnM;)Ws3?*_r8oLDaEbIjuGRwAF) zb2nvo8@O9*caA$}cP;KV*a^w}4DS#W7wZMPEijqtX zr5{haj@ziDkMag*OXs+aO8T&WG;bR>R?@FRD#0?cd7_ieQ=QwBo!ir$+vhsB&v$NL zpmdW>+RiclC~HWdaC}zr=%CmabVca=k**kU61F@(4+gG@4@3w>*XDxsGm)tsk z>&My#|KlZ|bAkfdx{bRznv=ZX$dZIW&4i2}#%#?ZBT(yQG^&3ofj1>7m<*THngN1h zFo=1LD>%47EBThem7Tpv#r6#6Wn{!?jsw;GXkG@-`>jk72W5c|_T{py2#IifIejtn&iKpW78Lj#G5}a4+C68Es(o{uqJVpa7Kmsp zveoe8uH@oyM^kMy^N{bhB(_hB*J-q>clf%_Z}V(=2NEp_0>G9fi3^8RH$nhScG?e4 z)?sg9Dgi+w^Wc)A;aA-ZK`Ck|1geETLJ9Z=VWK9 z!`B8EziA(HICX0e;y-(}hXO*Wz7)ti*l8UW5&dc%)uER-Tev!|H*np^b)Q>K_p$OP(cX%%(>QlVW?cWv2`AG-<^sN6x)02> zoH#jqFku@n#Zq749XWASua;Fl_MqU^gjNnQ4bGRd=6!g9AmipwXvx}013;OjtNV0y zODC_~b6x3bBg~rFF`FhF7*Oda|CsF~Vf6G2D*MdW2u1!F$HHm`g!zHUC!2t@-5tZK z8s9Ot`R(%%kP503)I0R`%}m2*eGPp0GON*Ow8E5A=Cj3$RZj(>fMy8{pm`<_6MSE~ zY76Ar-JghIhM5hp=67?IWQs+iNR;X>dy;NPSW^#MFc4?u3kPN8XU!QIizie*hntAe zln-i34nJk0K|r~JA@G@r0eFOJSR1o)XbywAxqtXpdJj7AffT;K)2mzd$G7STtNzMY z+cBM|=QQSiGfv6DOTh0In^M?uaJ^`iQ5PI{vmyfeaUAa#8AzagPDkhp2q<_*?pM0>rMiX2-S@S8Rv68ZE%3&#J zEdv1{673Cnpm3O|&DhS(-(`l4OyC1$MUX2RNZLQ>rgMV<^iyUYqm+VRM<5zFGA8C$ zh=DmkJ?-fGvk#6viRpdo!5Kic5{Ec6KDB#1I%^54PA0*l;v3Q?j3ckqS=%4daB5VZctBjckN`Bl%$ zeSu#cJK}kMt;pUbzZ&}7Xb6IrmJAK*7~)ne|zkg_T4$X5h0xA2In z!sQ4TIOTpp^QTaY#6J0a((<7u5%n2h;^vs_A+A~mZEucRX{>!U(4l6ia=@5*wQt5w znNi624!hfIFr=kukC(05JqDCL!FSj-Q5ryh>r4eChe&>mb*cWKSKy{n_ z>UAKa+hn(H+T*QMwo!kzHGI-DY!_?`Ypro2?W*Q~C?QmE0i9v3umB^*LdA3r!sP~? zL@P#-7)5;5kvNF2SmKKVieV@{^WrPc#aCV8i`X?2U!xASRmZof_%%uz_2O$n;)|_K zB)*70V-x$t~M9Kyd`e2`y?kkv|8)H}PIYAG+f z5T)}!_%Lo`Y#6^rZcI@;V>)MVEv{7{(UkwSoC}BUHT^@Dg6UV?jY-)e($bG}&?6t| z7OkO|x@Excf4F1ys?Em`f11vCnCt!@=H2t;a2E4cU5Iw5q(6g9nKZAiviMi}E0fb&uV>1Hzg}O#s<S>XXpx_j7_|3ht@o$hvEjqb0nJDCMTZsk0STI zlGHvZnuH?1Fc*dAJTzL>{UzI!#4z?zsfmIrLon;1fOvxo0x^$AY(l224GTE(sNI}4 zt%mDClZjor)r|avqc^{q3bapg26Y<7^J`R~!|L%|fwEM)TY=)?y_NvMeg!%_pgiE`)4?5|S!RAX5HB=CM&Jf5JouPcR3vCz;rJUU@$E|FQS(L3SPY zo!`0V-aB*WK4$K`A9n`ma{vqmFA*d`5TYm(hY~?jBt=SAr5szdm9nbVHDK8q3`FY> znSdqjS{t)$hJ;ewvK&KR){?blRk)U;V#Npz+q6Sxl``#BDy)>Yf+WlqH&J44mH%L3 zW|hzP*L}`?%pJ^tv}~zX1c7sIpL4qV_v_!gf8EVU%WL)q9fQmL>9hRvHkKSc4ff$* zA_Ple=H#lq^gs2KylN%?Yia$aQlzPR4MOR^GaFK*dn|gDnOqA{9E<)8RCrnVriFhA zt5&l&{4M^AnbFnkkMLUZ_MWxc|LbmvYX4pQn5P7Q@A6ZM^R@pNoF9vbJLir4MI0Ji z!#9N?MxX7)&%nYI# z>LM$q8EEICksp=@Q+GvBjT9J!mgWH@BeF8|GGY@L6xY1#Lf(f$OI^=})faNf%}Wa( z>Lb_C9Gm2ka%qS^l@%Nyg4Rc=Fsmq)ZndFQDEw?I%D2;GvA*Y5d0r-4Qq6zp_Bq?S zFb*x4Br2XgIr!`|#iR53+`h8eFbQX-!E)b`y##$6@f26f+*7cASjtL79!FICBf--q z?4W!CBNUNnLiNS+@?$axA!#xa6+~{|UHMq$f|op&1~KE)AQrqFT9(>)PXb7D8#cp( zkKbkQcQ1<+e}S^La4YyRZYADe+zMJC+5e!TfF_b|BpbqQp9^sfwfr7}=vt6w839u7 zd3{`k--p~ z$mmh98Z^`_k1SLhzrUaaaEvCds4! z7~6lzV$=kRzkK@hcaMFdBW>(U}bOc!}4mfzT(&ObQ{eg4zsH?Z!)x;DU)I4FaBiw z(F-HLlsmu5y@(%`l+9Q-5cWL28nbHAHmlUHSK`Ok(?k3wf%8!I ziw|JMq*?rUnz{uty+0K3-@rdEI?QIQ54(r0{Lzl%_LH4dKQG>8r5Epdw8O6pAG(x& z{Fy86<5$vjlUnzFHl5vY>E_G!ZuG#@s^DKf?H+z6eZ)Qdbg1F!E9ruJ_)5Be^Fx{- zutwY?y8OYTohut||7N=1Eo^ys*H4Fsi!VQOC28Ad-G9{Qh28e~$LaHr(~C{;M4u-& zXl}Z0VNo^MTFu039C$$oH9tOCHK4y1q&J*g`hXiE`cE`=@{~vs(}z1_Z+) zn?wV`0io^X)Ua5f{gG$VkGV&lw$h7tf%bjwkt^v+Z!bTlmOTh7o9T+%x8xfa(R)%7#0zOPKa->9&Vy&t|%3TbOvb z&%?COV4}T!nSo-9CZ2N6qd? zeJdL6y}e-eaLnG#bg%0hS9|D(j)yBA%oPKZ_EyxiAG>r#Kz7(`Z6*6k>4Bu)4`OZC zAVOFLqS!QeMWE3s-?E_H*cr$@07jkhSni=ZV5Cns1mj-8SlR~0(q>w6TSwUsBoFucruG_)l?`5{ z69LA(9>%=}xpcZi+1e~V%kbEWOy)J@whZj#=S(kYyg2{*Yx`mQbU;zWfXx87e$ejKxJPSU=k zF0(-H6IT$L+Bdh^LCnO)Z?R)XN>}e7W*RRikJ#QfMq55GY8wGW~> z?Y~RtB!8>p<~oh!gYryp~(!rBt1m(Veb)nMpoyUC7qNKIEb z{Q!h@=)>3`Iu>_S&O3e8@0EYkE{K)B>)JJz_GnPVuyL5KD_gAj&h`Y34-LYnC? ztUVB_nbR(%nK?C6d6%6hAAhj(nOl07U0l+pCtXrk7w_&Puw7!**AvLF<5bUwjGhMm zVd=u1S~Ij;c^XW|#Z6YkB4U~w(8rF7a7prWu2--aX?lG>hnWI>4>!YjIDtgz)#3&K z-9B|A-452{(kAGo+pP^++_Bqp>UL*K&wRH#n~>91n7lmXp|=#_2xM{D+>hE~mttO(M!THcWiXGMmSy}v6CtWX~J%Yz=rq1;ZwmtNK@-X&I#Re#6FT|U4A^>VWUdJ0_ogn`(bC{%)>2+Nr zAm*eWRzekTQ45;!!&rC|n;2D#G{J-r8FCwVSGI>m689K~Or%Me&zpc~$T%cs?xx&y z2l-JpE@DwMb9c)f)=(yc1_e>19gV|khfpH{f9NcjyH$F44?S#dU~t+gtJq*&qP17v-i0?Gko`-VtkKTTJjV`gDd}Ho%%TH1|F? z#-Y%`2LBupQ`pKJYvbl+Ja4g;Cw763iB8%gD%XRK37Wna2r+bJ?N$v!*@`sTVYKE4 zAq>r2mo8{#9%S{(m2XNzuJS*?lLv5j_yB!--AOP>~qZ8xY8j`fW@CvDzyqOtgD5tBMWc#~O$cf$P`=+h^rj#@ zA@gvVW)VC+nkff^gYRwtj9^GrH{lAvnBSlWJKBdPrklNB^oZ%^CTj+_6Vp5_`Hq%M zOwVs z5Fz8nN8>Jb$KAr<)6MkJj~ zUH6XdjBLc?WZNyfq+>l5Z%+|Eq<@_xaqk;6PuLS+M;o!R#jbg%mJA)! z3LuUGJNr9ytV3#=gcOPI4&FUwq96zgwJi8>20oWw0mqs9*+B_#tqQ54PK=a0Z?<}I^HJhu@O1q zbVqAvyaO0(y^3}mt-XdBb96H~ie^Jp-{uawn>Sdde~Z~;<2^Rws5>T!?o3A9A{+6T zJK=71@9!W&P8lDaB9HhE_fRK!zx(K*T|pN8jy59aL!EFZdX1t{dU(PeaYr|jBknfq z(`b*4n7D)Ly7z4l%0|4y9dkFkTRPTL@wOw1NdG#?E$;n;=1H;(tRswS+z; zVC~2zeHt}%9FvWBE3hAR2RqgwHLU}%L6~glTL#gwybE+JchZCIU@tnBY5E}G9C61w z*0`FH$p{WQwC4sP49#5EMx+_Xu=W^WYQ|v&10H9~yYY9~`El*KfXoOnVb!`!YG8bx zo{kRo^w2KG;?Nd*{SbAMHenk+jVhG0Kfm2ieigYGoPnGiAPXtn?ju(x+^&$)5^nd9 z_7QIPGV2*`l|c}0=a^^EeFk^B3-U}mDSH$5j&RyxNx^v}$w1{N*_A{6{z%d9fMo0N-PU1Coq1>U z45y>85p}nx0fWB$kgDe}oc_LRw+~f+e^GrHIIBLh>H}T)YHsgVA4bKOFRS{}*6L@h z`umFN12I_jr>*)xYrdM3-Ri?g`*LlQjN%5Uka8lWE?*?i z8T*!1+GIQ5PogtrEc{#022PYDsnhu^+GFry%xyXuvt@JCce6RO*G-=eHITf^jO&%O zZ}wuJ+VWEbVxI_jl25Vd8qPIcX0)+IiUL0>p}^$?+CtRF5Jc zJHQkRroNPx9+)i8wr@J42PPiIzLS17o%Wc{U|Ke}gBQ*2TFQaDlFWCZ^EuPI9W46} zmxd85`z9Gb`HFB1sjqTVcSC)B^JYENXOn?_VA?}JbUf?>llI~sH`ON%kfZ2xIQx=a z4zq@Mw;(bI1)`Yhw>+Mzt8}4N&h&18?3=0R0dniqR1c7YQ&Uv~vdHM^%Zx~TBDe1u z^vQCQ(DNNc9izu)yZKmZ2Akm{~qX|U^F*;yMg3k-$2?NSTV2YGyIF}k0jli zGriAQQ_7j<7KyH(NOXTGBs%;w65j02)QsmdHTxi34W(7Jy{Iv^>|6NK!1|!es1|PhFtYpt=x70zp zESeX~{>$W^kPWlsR$fl_nO$s@1t=^Yl^2_KK}olyO4stdjPO>+)$mg0G2aO!PGLw$ zEZ5wD(5C~${3kc*tW8|P?5kIBlct%hA(2=;m5-<782Z;CotZ4%)cRzjOrL^h-G|=6 zL}EN^g{HuK?v2T_9wjAwN@;`^CIS-&u7Cv&GgfA_I;5sa7^g2x7L?rVAUarjwj(-P z`AkQFjuuVN08Yq3vfva58KYg&W16ls2w`aEx)9QgpOYvcR5Kh^LNhhZ+mK@3KbE`f zyrzAN5$}*E)S!#CciBasCe_zP&CX$#Ui@4iq3yDBesZT5vxOt-ZQV0$5VM@OK-eyK zNV`uLil>b9fPs86o++L}f?J-lF|Ep2@i4Q+^Uyg*`P0$DY3{aLzzzT9zH#?yrTCVO z8n(1MXcc=YpQnZIQe_0|7y)K!3zjjlqZ(u}#tznTU&5#HXki^|8b6t`&UXL7@$hNk zyXZgGQ6&(+&6dC z!#!BaWzXe4b;2z3t~=mUCs3X~p|#IaX1^HCbLkjS@wQF)rH0d@GgvH%hb^J(F`2Xm`Wz)>U~$GZd*i+f<& zss~K7m$#0!mnuB$Tc$z8k_^DYC$Q{XZ6=NZ!gP+=JG~N9Y2mxKm^ob|C*9x}jOUKQ zE-mJg9NFty%zabh{T6e{a=0O3Dx( z?J+VS#=gEb#7o=y%ilaCfpTSLs`wc_dg5Hp!|s%i}r z8= zfeG|OWetZE_}zl}Lu(F)6!_i4`9p0FpZ<|O{3CmKATazRdst@EkL=-}>41b`_V6bQ z+j5va{1e5~VfOGRil@Wu;YW(6!|dS)i>Jfv;roiG!|dS?7f*-T!>7AZg6>^6-G7(L z;0MPZ4(a~8?Dr3>Jsi^gcL~N1k3AgH{cjAe9~OH!r2Fp{xF1$~IHddU7R(=7dpM-~ z?;g${YJ2!oKeC5^WDozy9wyUfFcsuS_VBj$@aGHLa+p2*x#H9=`efv=ZdGp?BP!rPlwsVpK=My97tnM*o7sD*=2LjS&kAt9iJ|91V-j`;BEUJ zQjXd2odB#TC{#lJx1S~!{caFkq9KhjA7tWv4u@7yw<7b=2 zn1f7c&+#jDtr91dlhjO}bzJ0GKkPS=CeJ#~^Q_w>SI6Bv>o$4TG;y(HyJAOVTwnTF zeA|Wc6J%UpjnAf|`y=K|I2nlvngu0lt9{lHSV4RJP;C3wkJ_QgCGxEE0$1WLz4P|+ zXY$RiL*n+G&+8=m^AD5ZRb_5GS)?{jh|H?zSg2lQf|Ui@BTOeJb6{`uSoGymHhKmy z>@EJq9Bh|W#Zx6s;psG^(QNb%-ebZ+HFFkogQEYJgFYH8hL43=oz}-{`;FC`^Tb7rDUJJdbUKa0@tsWn2O?hxx@~dT%RkkSrP|Hzfel<)bAHd?D;c#DE_?? z`*QO8N{I|Mo?k7oC+2AOYoMh;dnw0_s>RWpXfCaNp!B2wcv?^W1B#w1^<$>{i~iXu z$#?3YcIM6QeBP5&e40fz7uLrcQE6ggWTIIcjmIZ|RR>dF7Wnm(0Kk=lvY*v;`eb}b z4YQ*^hc&RV3HLgU^Mk5bsa)=Z&$DxT`(KxqnoU(S_#x-J_kGB24z8Vl(O^M&Qeu=! zZt4u=U2@aHbvl-l%{u;Yi|tVvfpO;ACX#yjbU+%rnu46VE3vR3e!>@Oc&MsweQNkV zfg*aP_Nbg4uC&SeBDr^LPxWy7^-{CWuKsKB8f*5sIC>B1#~eVEy=4bu1=_a~PR%;x zPe)^z50$U!I6}QI{K5_#Q}k;kO|sE1I`WiA6_Pg+ecQKBF=SWM<4YxtYh2;@4L)WD zfPZ!LNWJ}^SM>Z7qPn&Ck))K3p=)#xr7k#~Zc}2aZ00e94C7vYKW?$G+|szJ9m+M_@KE6OXpzTTGo7=u{;MVYuU)-;er1u zyrg=k9*4#TUdq4rujv?=5@%Tx_wqclHr`x4}@JE z6qfuzLjFJqo=R}64I~EzuZU21IN*){%#q4d|6*61Klk+? zV{x_M^t zvPXxC^~fI4zp8@o?{Be~*vpXFgAK$m&O)33Q34q zu5ZALl33h+7wUr0f~cl#Xvp}X5H8?=_oT~&L2h&LV$=t9>iE3ti5Ke_@cb=^7s#MF zrT<;z_UXL(D6{iZLCH;}r%E4)s-DyXSwr9=;XwkQ;Cy?^nj9qW?;!PQe>W<2#AHKm z!PU)iQC)6OnTFwau$K%=l7kaiE4`vnhXhFoN&(he9C~Wz1&Z!?ph7bJ0g~)D?NH$$$n<823VTqF4YG9Q0e({M*j0c_lePa`YRL&*D#-y|qGVN-RzSr{ z_O0l#^oX54MpvlDQ|TOUrDMsghM6}XWRe$a-aMG$XH&J;EQ8Su1iFY3!r~EE zGY%H!5;I6A8D;&LDXK$5CX)?Zx&1h&JaS`_8A2FR1`&>I6vd3)-)iapJiDfs9DmK? z6AKuw*ZghSz_PR5tcRQ}m@gLP1 zy$2xG<$LI>{D$X#@touvI?09Yhn&? zUGkTl4{Yw?}lIynVJj3(ncgOG7#vsF54yb8m$G5R%{*|Lo~ z{s4r}DG?`O-l}OaN@k#*%;ZIs&SWF!Q^F#*iCt^bw%I9smXqbvS)7ckS`90lJYI=Q zCEOssAJ6tDN%rNx`V$CA&oCdeuRiliB)ieyWo2Uvh?Ix~HUp|!{qX>EtRPlm;giV+ zn&mxtX1{B2qOZ)V!wEC<7>_Cu{Fh6~QC&^X$!9Y|Ygtzet-ZQpXdToQLu*af-zz1D z+$4ONfV-o~VI)X^NhmV5oGk&n!4`)Fm3_ zGaR4cWd!0PmGQ#iV7!1eC#_YJZI#3bbl1R5v$p|s9u0+dXRW7=w zZ+6$yW{4(Xgv={;z{T1mOjfj5Q+v6L)6g=$@QA1+jRY^PUXRjC4qFQT3}h~{G^d5+ ztUh{wkO{XcfGi0jOzRg?xM1%UmK$(TEKGTyIWj$M8T9ZJpeYng=XvEaq90q`1!W2XM`0+$oU zaJO@J)b38{jpJ+v#APkH11^%VMZ}CSr0EB^4`O!)M;j7A$}@;EGt7oQpK2#Y{vvkk zm>K-FJC-nU>{9)V%nY6~vfg!sJi3CnL~&Q}BC&=#;HrK=@S5d$F=qTgd{^++wG{3H zbaCWyv9JI!i&Q@Ns0N(H6D6z|GHyApYHIFO!|t3y&RPT?vDDW5M-h|{-dXcSN*Kn zXr7WwaZ=2JKm;(8gKZ!VQWB8V!l}og1c^kvGC4ntUn%>XM%F+7ylztz4=;zpF+0_e zPsMe$>^{#ULEd<&6J!tC;4J4Xi{?h%2~XPYz{yx{vRmb>R?)Sh2iKL2Hb}@uvksAs zX6t*|Xkzra5=&_r$Lq?*F=Qgv%lD%j<{Iu&L>JwdJsDpW7I1&B=*kGaq$@=Hd%E7t zF}J$jdJ90GDKVz zi;gp_Vo``-hIq_qU{Ui&?f$$BNQAQYM=Nl?Sd;^*_>Z+{W5%PhF=5rNmzo<#gt~Jc zRSVnjsOlf!(e0gq8H{79H6EqTWq4G*zNgiYuZk9HyOoE$aa?mp)-%alSsM!DM#b|O zQs>bo4b>oTsCfEe~nx}p@!5H&;!%YcOQ`}4hjaDL@2m&23X0emWL@?WyPLTv? znSp>#nULRG^IihY1?dR^^OaShps+XJXBIOVHHpv5 z7zlUALE>M1_7%jqX&GKJJ_|a+s3m9tsTk00dc=58pSE)v1~}F zZb9%6b?^GpM7xbL-w2d>O@@(c1vr=_cwGA|fWFiKrlAVP@3jI9V3FEqNk>x8>p83%vdT?~!4tDD$#~u9q3rR)845UJxet zhJjnwz(IgMKswa;4eXg4!J3Nm{qvUZhq2=5-s!}Qx@*Kk^z)4%``#=ihqDoE##VAr z!c4TEb1?^b_j0j?YGtfT(MoIK-~7OFu{f-ci`DCUTJ`3f$mZ`;LdKvsl0U=P5A~!J zafr_oqcz29BZ2v#Y^ zW|MGB?#G^APZEK!25E6|IMMXILX?6_l&rW0bU2m}=;{6`7qUTq`Yf-=QFFCpQG{2a zSTx_@hhmSj6W%Ybr}Np$11*dcH-A2RhNVvN1~vsWtVucCH}%#yf#W`@4WB_$zU&s; zUoakEvQ?39i3;<2%!0!UGGhSEUp2N4;b)8lLWed*)z%dU%fi(-Tp=1RqXSTnno-j? zYhj)kVMPw`eh?Ftuk{t);4E+oR?V>!wV@|kh{+D*5)K$hKo7UMhJ=HRp$mTUEk_x9 z!c}D{OlPkI7t-HlRnrg%p>|efq7qwIF9=e9XD_JsM)tGo?vOf!z_`7UH`ickF6HW+bX%1%NtB|Cb5s+T5eA@5v=%jDQ%rgcga55<&>I<^{ zf``b9x&};T0bMWrW`Ec9n0%AHNrW)HO}}N zv6i!P(#|4*YeBk}h=vKr`&(n;4adA>;0Z|HB5f^Q%t|0`CLUlq@obMznofJW+8kuZ zRF0x-)AGKjxoI0MSfH>!$|k6gMn0NlGYHrh2q(EBEs`u0hW0Q+70`M%B=9l>lSqdG zZgM)pG+i@6{vy1R5sjcUqWDG>%JjLBJ5ri(G_>m4BKNGKIVQSuKAoVHzdHrdCaAdu zVRU^t{2U`btb$9{m^s7UX;fA0`&vw+8c$!0K{CCS7pK4sYkcL5NznF$&p;k~2QfB6 z7)GdqU)Ur4!7mfa7W^{7YpxbXSj6Jp5d4xP72tqReZy4)6hd?g!PZ<)TV1VO!?q^H zfnMS-Nh=e{6T;ebmA@d2s0k9&qK>C}qwFwaD^3k*hGT_)<-T+I1ff~kkocakaCNVsZMl7%n?yK)6*w;((Q@2F?EHDh6m z%}RV}ID5nwk|MC7f(w}Q^?+UDL_b$vU^m!2On(E@0CxLgx;4dgTSKtBo0zVu-wk$0 zq=X&p(npjgt#X6sdJ=0JBp&Za;t7w$<7n$FR{Fy%v3nF#&5i3Hx$P2L3~m*AOsKJcStX8W$Lqc#3>u zh5V6Uyf`qoLnH-$kEno1O5*Q`pM<7SUxAgeoQ#!?y=@}StS{zhP<2Fh_GM!aw3sV% z`_5VquOOTMS8~FOatCE2$Td z+m7Zyg=7KjN&IbLp`xiRjt=$6VB;hqqvDZKv577T=<5;DR`K6uL2NJO63OVyNV$qc z5yXi!aY(JjG~?j(W0-c#ld^g;Fhc5u1oLO~&v{J?gUw8+pvLTKZ25l15<_M)XpdUC6h(ce*_sh0!0%WBN-vW7^S$D zjvgu3J{*Pr4CCp{BPlz{9g*92q}=X4q>w1SJHqth(c~b;_RQUtkD>B0Yf&Fq`bWwU zGmwhD>kgMOSb{UpXE8CiQdu^rTXUX569r{_ng~eKOsNoK{gL-%XXA;Bk zfIDmtOB5W|+clye5QR;?IlEh=Y{Bkki7D0yTUY|x+f0GFncK^6>AHA(`AuDCZ!cfd z^}zefuj{(@{_<m&zN@`6eZ zTlYF(gpwCkvP#M7r#s+>lFKSNM9HC_?IefP`2)#Opgsae5JMK;6s<%Gb1|5jHe&`6 z9dw7kmL4e(|7j{d^tJS8w_qb}d_7sr@vEzgk42Yl`l*_|wz{rVAk?L%*}uc#Oo>jK z!<`Y-cWY0Ft2`ITis@fnwF*3u$grv;oTzCoh0%$+E>gj*5&a}B1!VI-(Bs&8Dwj-Q z)pA^BmddI_RlmBLj>xbak>0+#n%39xz>Y;&W}2y??3GnFB1@c|He`Q{$bzNML@<^Z z4Mf^yT@hK&am_B5iOI@3sUw^DYu1T29N`WbX~Wk3zd0U>P)b=dZ$w|qXdJGW%d*2_ zDnnw@s#Sh<)kb1HBY}qQ=)G50P4vFXlYl$T^^gI^h|$n61~xjOUqq&nRHaHzq6DlErXat48ZN>%ZA#^OJoq(cW<^( z9mZ^iy+gbJf3*M%a$v!i?v%`0A=}nQD70z19+i zsy>EK`pq<*g2Y~TR*?uj-C%rY7)y*3&AE0u$U>$43tBEq)*E%DBN=m=%I(F)%h=fiA^YwB?T;f(;qtw4^nF~um6tuJ zvOA*R)j*a%P zdaRUIkSN>ZG8PaLL2OI+9#nFU*t7`7=xIB9Vtu?CmC6VO##h4jdKl4w&inx#M(px0 z;qms(#zF7m!&{BHT!mexfB*ePw`^}?o0ReMRUM#Kp*gl@o|Z|cg>UeiDcfD-Cn7MKaGYId!)-u_9?fe2VV74|M*jhsbQ3GNrt*I1YM4jSiRC7l{ z2OVP#)m*6iB~*B*@ z3Nw1ak3;tQ|MJJ)jLzZ&*_Vulfrz!#27zcZwW+>4SCeFH@^7mYzJ z2&+epW>ZUEc2^mT&UarUK>#8SF^#qVal@v;W&!lSaL%Y2S{ z*M+QW^2zo4d>T`~R59&heo9keeyT4cYMKde>Z6hH#5MiTTb@aLbE+?R4Cf}(-OPv*!@Ww+iO+*l!8P7 z<2-mK*+Zn<4ABuYr)qqc>=ClmDORuXh7o~6Pr-~K8{4Lv3p0k-k)Z6K{iS4PcLE*C zXO_^Xo}=Tr-4hs-+ZBKNEpC_nEm{GuMw}~4_9_&{2BCLE()6x=NAxd5yUvdwovdI! z8W`M}3QJbvUoy2QoL!>S^c+Wm?7j4Kx_@A}gtFz|$B8-c+itJFUjD6biq7}{XPl=* zO)GBY5?I~C$9so-yb?a%)A#XSK4x&}=rF>K+@67&ymLq^jPkPE!#4F?*{0sMx{Q7r zE(6|+cP0B9@dZoM1f|e4u8X=_&0Z|8_jp5B(BSffUgBDKLNDkCo{%iu>|5qNnQ;7e z_x3x;X-q2+Pi5vpSgUUTSA^}mE}e?6$*oY+j0?A2E!qZFgO}AHSC(YbQA_r!7a!%U z^!PWDlmf=yj}-|nLn;*c03tgulzZ3CO^g$1jbSDvW3G?q%l)m5!teWLNa`V7j~ zt51|)s)$PJRixA>J}OEQ^%=`oMn`!qIvTX7G$=}PuZzV*iAyiJeP3a$KNRghfB#P- z782``*j>cp;fwA~#(YOP=ZYj4roGA7*kMF;}eDkT>{ROjoz=fSbzFnJ#j z3=}$G*dT#XOrQRNLdDAO+G(&x@LfiBJ6LX1#G*P4UvPE|8dc(H;O~Agjhzy|Pq*=x z;w3jad}F)ft+Czl*5HtR-*{{62aLB6*<=ovId)oXS{C(@SzJz#5f<06K*r^A9>{p1 zj5!qo8Q$?Khd>6>PE3e6m%l9Os6fUm_$adb6%5G(882W!*BQM0C0^jA1@u0YI4qEX z=qSkyC_%V+AcF!qP!{}9PnUutXQIetjkgxOD3Y@kgchR6yL^Bdq>_Kri=v)4FPDoq zpDXvcgdS7Hv)?Iu*|wz?ut9i7{}M3m!O3O3qswJ;wk`f6wCR;zjMytehGg|$V}&Rp z&+S{>`g{}1HSeO4D8YASl`v88rmloy-q4jW!8Ki_eTWwk(Z*FIBZDQ#S`$~nhe@<= zH5z@z>&@`5Up4HFn@@Ue^Dk@+Sn<;4oEr_qXs->-p5n?yDsS^-hS0_EZyYxK)+b)J zV?br3SG}A{{$IT7lf)xk?028%SBHL7&ZWfYQC=f2OH=aSC)pf6?6A!}gG29Kx}5l@ zvQqeYDM_HF3+q}5n3a_izt29t#6t`$yMG#Wnii$lY@rk_7_8c&XfL1b!#MMAhZoh9 zSJ_XKLZ*5Lt1T)FANt=IY;NUOQ>P=^mVXt8gN^DPws$(xd0B7VbqVngz@3+$PG#O- zyvywRlG__T+ViXF9{NQwl^Ki{4^a zhivag*7UPv@%iklCpAmv-}=xc>rBM1=F%@v?s9&34!19e-YeO&s$6jd8P%2SsaW<@ zti@0Wo3`JE?6;TX ze)Abf^Q@6+7U6Rolmsc1vnWTcj!x35@W-;+XMdNWBF=!Pa9V#PrM}ESFiTL1$Q07= zC(XyFflIcNM_Pt8z^bKtmWh{O;f+cljEKr2`-hf9VBzv;N1lv5$Q=VMObf?S`49G( zyXuMIdLPQeB1q$XZzg`_d&?fB8zZXHOk5%FFJdiJAIVs%qs5@~4~d`;;d%^Z>)%hw z8-_OQ?H_VrnRmSbV715x$iEuPOt%s6!?4r1m5swowd;Q``)vFk}5 z{Um3^Yzmc5a!UwQw^O2Krdg&blDE~>gF(;9$GXRjoKswdaCmVKZpUcJw7f&9Gr_BW z%EXE6hqo#E-(dy*Jvd+f9e(H?h1k_w&B04AGY9Br_|dN1TCdDg^hORT4d0T#N@A1E ze6lFjro~7Fkn<`Trim8??7NOE7S7k@3}}uB^GxyBu8kmb*?!51&iyaF{d-G>Az9S; zr9zg*g83!g*15$m)h!b>GMm6Pejhajm)68-Sz%-gu7hvys@iO>rY;d*7bTsk1Ni~5 zR5H@G`2||bUJ^>I_dI^m|6=!{2qa3=d%4*TauX8;;a!nXlG&mfslZP+RWiQzb5Ir2 zOqS?jO?uQ9DurmceR`Sqi%_|htVx(kng~7UHN>jN5}S&s z!7%?v)&*+P)4=fRv3uWB^=PVY_3+|A@9E)tsUA+FdT_W6j&sEXHvNQ(V#I-|Wl+Nj z;%jMa1#cDUCtNIsvt$&{{dy6#pTEdtn7vr>FG~2!%n0WfdSMv!#BOz3E*rPkdMGcM zGX-f?!kRe1KSpp|?i0$s{5HRNE$m2j(YV+MOh#59!dT>YQlnxsSVG=4zn(%gwI+{D z6I%TH+}e6}rEXJ1aYkHAPZTMzPm7Pbb71+)pb!>Y=Dja5q08IlydKf^vFP8KiA-V| z&)#NfiDWMIwk?aITP*o&#esy{mo(?z%Ot_x$eBdEq&jUh0+V<*P{Ahe9l{f_pSmOD zhtLp{#F|(!@fw&U_Dm9d%bZEJufFsit2ZXet4E-uabNH0;d|-5(5K4l?Qe-7{0LfW zU3o9GUEM+6o5l<>UZfCYyy^@x-sUHf@lpm)nk(wHgV$MKrX={1&vIKTlncJ*m#9S& zSR^Z<{093(ygT9)uMn-#jDf6`07&M$-gA zm73?x!zXdUWT<$N2c7F%BiHVW*dzIiQaBQ#P^>B22A+`DXV*$a0OJiR=S6$LA`H^q zlv#(rTT+96pB;{N-C+aVcUXXTEe!*nYAhLM$XvhW#CSm_+zp$B&IiC|@rU8Rn-yT) zu=fVh-x8u};CO-i6J6Bbz=X5MNG-MXxzyKGEs+M$KUpZA%=ng~9%T4|wpr?^@hkVn z`!1B8V4p>IHm&Uk*Zi^2Pe4aSrr{x&xoIX{`|JM^3wW4Ywe24*^3r}l=eJch(u19J zk5W_!bZE+fXi$ya;Y!D%XFrY&O6CJg&Xp&`-Jy8-b|%-Y43SUHyPlpvE@e#FQe9~y zUF#$Xzdp~ecq8RNtEKD1?YxhWDk;y5?rHSC`h4lKBlj=jAS&M*f6)dcHX?(%H!xdf-DJX ziLzPiZv5WXm{wynGPZZqCI#bXS`L9#$EsCAi#8J^oVUy#D0?g+))Jq|dQW@!<8a^9`3vQ0-Wri2c zA{5jJj(8*pSxRB>JFxnJabpQdVGU{x%jt^hwUZE`RRWx#D(;L}zH1l;qOqe8nMT4j z6#n%6Py|6s6#bKriyoTU9s#6+-}pEJt-N_}Ybl#i**)A$W+YcYU=Uq% ziOFfndvTZrk^+5K;jx0g8|&FWK_nQa6{2G^DkxoS;}MHqHA1baA1vw%uM5bO6c~Ll zLehu_eU#ypSyfabNA7QRH0chpI_44?)=YqOhjww1E#oNGMZ0RxJZHnwXct5 zk6qEnz*m27s1`U~RL{(NRF}aKU=h?{ai5V{;3vo~=O|;P6sx)54Pz$RYXg*VV~k{M zq&@P)tkiVY5g`)Wl^-{atW6sDah{En)izJgrpy>WBrZ1|%`N~DJepnDMC{6)8IcNM zP~F-+t?67Q%`?c;N~$V{Ev2N(G(>hQ#O1Ia>*-!A*=lNPmS(;1CQI%u~zX(FU6BWOYp2_;?+qEI(I zGLTjpper2>9IkGHZIEafL;}>ZIqGHo<$D@e)ZldmWE)PL3h1aHASX;fB98nXY2&Vb zHY?dETbbje&9YSG1UrQ?SI6Ah`uj>!wig}*!wsWr?H~u_O~E6(gUmO!^MEj*sO%3a zs?C)0`StAeBl+hap>&ij>c|FE{v0;nh}NH$8%mrU%f=q3E;p*(we=QC&d_o?n+TF& zmJ+Eq1U7_-dSj`Uctnf_S-R%A)Z% z9z)jZgOE0Wg;9@%x(&R*53o}X?4tp80Y^Jpb_(`#6zJOm-cjJ?6+}dtLv9;c3gt3m zG!8uQP9USufD9NcE?!>wh`k|rX{>ZU`|c}$9If9}GLueN`IdfzBmvjX+S#1!-Z8B_ zeXq1@W8J0QCc|Pp@qMM;acI|eX{7fE1|dt5v1$5ygpl%?Rx@)#UG|&t11;$Zuq=x7 z=y|e0kAL*tKkh}(c*aKQLQk`i%~DC;Na=xABeSJx>|wYh0fq8Hco1nb4X)MGUIy`{ zR!epNu=7A2A!nPJ!XPH{FtK14XlXS2q9sAFulPeyInA}1D^{z_IC7~ec}gONebB^< zWY&rkO&S@Sj>$+4HML}c)gKK(+@T< z>E-NZFHMUx15Hy7O*aN<8gmDleyMG2t#1pOZbH*3yk^8a?RUp!Cy2A!qs~{0A#yQJ zw7q1Ln+Vtr2;{`;NXU-l#DBlqf+q5AU zMvY!T7#!_^!S3-76F?q>$CE`^|4=W}G z()l6awHaBEsbL*G?;4^|(gvZ>CNj5=KI_{IE9Kh{YfwA-7Wy199aHziS~mJ@g8nMp z8#PE3skeVq>p}+x7cqBs=r`QTy3#KWD%Q5*kScMu zBL9sp%Fbg?7X?n(t5f1{MSeePyS>^&K}2{w!SY#Q6GK@(W{u4U>O(u5xj3{MCMTtQ zt(s}!aMW-J3M9g|+8OUc_wE(fbS)6+&w{;ot9yf-+M;`NIVJPUtK5|7RY4SLmUV%Q z7JyCD4ia4(E!#JRtyoOnPP2Kbi7RBjiK|Z6#F&+8NMj^bZ<^8r%${t@~RBU4LrMb=y(h^@9}3*3NHGevT5M`i~G&GkJVbe*(< z`Kzv$!9kcecYl!}+wt3Dt+k*^cF?s*T~^kdjJ9<}W|A&0TG1*>dL@Hs3L&!SV;euV zGs#4-EIrepq*HxP93-{HiJJ;e++sgvy<47p`%j~OFK$W($c{`mrG?pn>9ER->E!PA zd2wX7?Ciw>kN4sLw$LO~60s1nJ_j#y=%==LaZ^&g9?4_b*UX|i;8xw3O^A%@^qT+EZth#_&ez(YR+%jd-W(AGZL91l*{nl14jEtBLM z;>~roCTPfnr_<*Cuv|#KpYg_Vi>YQPYHjs05EVxei#dEq#?KQd-jdG*h(PGJO$X4s zX&Lhje0J>*y-T=mQ$avCy3rTb_0iM6^|&l(GK}}bO;8@VqatqF3`xdW1W9R5BE4#$1IX0`YSya`;t>|)x9IW>;D^fl!u;2pi0DI6%}9e-q83VfKU={>RFVmnF=KNg zct$TQ%?#c*VoIS+rF)NXwP_37IcV4)guwn%;(c@P>wXiy0%DzC&{(H27#Zd##$9I{ zO&~{igMY+^=Xmyb@O+NdWF_X|sUsvE(L+Tg*|DvXX_2eHFJ)5-$rA>3ZEC|h>5Vh+ zY0b#cC|Z0*U8V_Tj%w0kq{BaoUU$$7x0AiQXV@}V^E0BnhgXH$?<9&g)O z2lkB~*k^75vKfp)$_gyxV>ZdCA-W??Td_Ra=P^gw|3{*31>p%AY!Ee9aexo$Ya07q z*~UN+D9_$0xtM>*U&3iIpem`&Yg!zeq+Z3bl_8|S@d3rLr5Ggr?Q?1q-p_QjegWxz z2lLC4AyTK7&SLj0*JLf6s~w7)x5v&uXX2X5i@5g*XtJ7(Z6G5XSFu4m^72})bJh+G z@S28KD3P#YOigC76*>U5<-KVU1TnucJTIn_i9z#i%Jz`T%wo!s^}v#i+`f23pW0iF zAIYMu1z2$r)7y-(k?a>FVzrwIkk80KA`<4@dOCrIT~AZ?W3*+~>zsBwf!krFtK63T zZJXPQzfHKU`rAovNBr$Px1;`cmfM=Yo#J-P-%fLD$JDK-OWZbmDK0!S|JK?Zw=I7= z!tJ=ft#WJUMrsBEV~u_Cnr?}W45#qH=h?zD0duQvA3U3`5Bw(-Vk0dQQ&a4ikA;BT zup$R+#`EN8_V2z|{tR!A`5OfZUu3`LMK?qAO$&fovGxW|?agMko$hG&#{!n;g7 ztS7PDiu`rnwDGMfU5SJa9)o!;GJp{mv9E%v{ zN~<)XFY#f??cj<2l6VrIh3iO|+GM-@vk%#EopTJVda-C!YrQa!lIHJENQE?P(2qq& z*W~%;trp}(^H7yy{_XQ_?3|>^f+oh06Ow0yMWgHqI)EYBd81GhhF_WnW~@_C6!pGGYjS>q8}X!KdNWhos@aSwxI2@un)} zp?S3`@UxJGkCmGw_e!((sxYd5X%D7SDj52PNP-7W4N~lrBjZ$!waYJf|W!&uJY8f{Nxgq0* zqi-zZ#(}u94vrmB@{M-40;gKO&!3)PcrJc-cV*}pm|djXj49nl$t0xPFdLW^={8Ik zdhw5Pw{#nvR&PwOAG7pF3v$vJhbe>WrQ6gIFkUa#l_p~8Hg$i|XN38rzc6^Tr#I6T zP0WwHflA&$NVn0OmTsf=l?IZh+YrIDbel1sZbM>^rQ7)K`E;AQOpcmajI})7hO%Ml zHpDSzAcfh1z5PE2(`{DzQ)yQ8 zeP43TirN?`*_v)smv=`P-+Omv8EIgObQ>Fo3vM3q0(zkcp&(DUsXHMHb!M3hVOD^1 zq7qE^2DJt|sid_X7#28u zx=lcVrQ6hex=k3C!E~D~NS+T!wsadcZ+amI~V;}rZ$NK=wslkzc*A1oGz+| zrQ3K61b&LU9A&JOLb+0I0?akVOu(V|J<~y9F1rC;k7XgjHc_xTV@uhvbs(F`|rxiO{N=q=oTLyOXFym`S4qNz7+`!{X$+jV0JZx>8zsi}@bq{-fh{rSEimI` z%1LC%Ik}+bzA0XPTTt`35*gq!BjYI_izNS2c>t(C3Cw-V4eU%-MiD2LLJNss{j}d`Cd^Z2^d74CR1~Cv%#1Wc(GIAB4vf z#JEg4BM3x@LDnicREN`uG!qyPDJrVvS)OPk1Zg@`^|JVkz4ZKqHZ%ix=|rAr6WZtE zrSy27Xk*k4Nm3DQ&234v*@8?Cu7n0i{TYHx_S6q7qw(z~+RQOLf~nw{1#Isn#&bc^ zr};Q-BhiqXmiIBYPA{k3!dW~D8&U`k8~~*sR*VU%SE7yPrFmA39ibR{1%M)#C=g`|i4qMPVRv?0~G?iQ42Q+IP-@GW}vVEH6y4_T9i>9t6xQ#Oy;VRM1{e4@=Z z)mWlUsHUw%n}*>K6i9?200%4#)4E>%qILTWTWq0zt;_lmY2A+S-%YfU=ES<&M(bW* zPHoY;xtwaU*C{$dX0FZnGA#^#(dQv)S9tP?HWFPMEjwA4*?*(%sl@UEP2!ulS}>7o z#)ZuS2VB>f050-?y=Bn=y1wiRQECC5)NHURC`WjW4^lY?*>)3c0+sue4G zfT=T1mc2UsPUNWMG7?s$# zM$B9oxUIHjNUza278arcmKX)s_iz+?EYfT0KE0;in_feeH7FQKN+3>A@VaJ$nVa*o z!P87Eu|`K`kR-09*T|#b?L56EWIYfM@P|%L%fKtrYZ}`8y{7b}LWTcEb{V|y7I%+w53A@=Z^f9=Ts~IK++}8<|r6!MzhN@xv%TB%_zMlcx_O#F&ODJ z{S3wwgPhvydu?Xl6Y8^gSnjoH{o{bwHZ!0<#(E|_p|h`9dd)s}Fr?SiLV68^tEjjq znlhQH-SnE;u=E-Wz+%D;Pp_%n|sr&SrdN;kMp*c5LR_QfJl3oVxNv~-Z=`}<=ExpE6 zi~KQ*j>73R1~cLhEz8OB%Q@>Iy{6VpuaP|PywRUtGY|zQb|L2QAs9a|096%{f1W8M z=+kSOd3sHAFui6hq}TLzlxXSSdK}iL*K{L-9&Up0d3ue9+QYG0q}PO)T1cc2=f@b!xBUoW!GqR9*s$}S$a*&(raYxm;em!!UVZqCfTu-Ot4#ejXIL2*U*1{^Yoe-Iam5z={4Y8={3sI&C_dyEvXP@7lb*m ztMr+uv8|ea`-PNy`K9epg=D{6dCSDom?<{|{2)fGOCV!{+TTx7O zPVYU&CKCR+-qZUP{^}jQ%O>xnEU?~}Iq4{wfJT(iLKJ)%D@r*C9GR=YJF_}I`GsKr zI&?KfNl3{d>qX18nv{fmou(Vt{t`;hNhj0?+wQ)|WSRBp6tl<@OLEa^vUa2GrR;{( zCx1g&#NWWM{zl2s)To?_8OQE5_P+8uum0r|%IxHsMLsZmfWtE$$o8K5B-SP2mc{HH z2+@u!V|~fGBI6n(Z~*kRe!!XK7yw-H2YaUgT$YZN1i;B`q*6Kx{93&U^ z7(JhJi;wxvuLoGQ2IKtM0B<^a)_F8RUIG#CDqKCT)=fm0xL`rrOQS$>lk6P~2!+}?9;-?=QhFRVDE_Uz(e ze`-byUPvS{`F%G>6=7g^Y+ybe7>ik~aRdtu@t`6~a zbTe_z#pli`(iri6{Tu1=q30D$d?USO=!5Dv-0`Q=n}LQpYoew z-t3O&cfaqB|Nhs~+jS<(weNlJum0Ol`!|Y$dwdQe?Oz%v{~I zxNF;8%$-p$!bay`>S>cZBUYVh>;Jfj2bN?~imUKT`(@XB`O=WFK@q&n9?-)d8TEcw zHWwRnzNstz>l?aq=;SqBp~E^khT3s!cpDr(zkLgJ*LvAChBmIs8zTXKGs#J~!k214^pj7zlP>D`x9(wmrJg?NZl)}~h0F10+-*;% zC!TaCRC3}|@cS+HGFuh96UE&v?!;G8|3K$@gtso<^=ONTz^(2!ck{2hlfU|CCpoS# z0+RX-5Fz5erYns99bF;r*L8*7zO8HhB$C(|Hj?dQT(JF%Jh$NySLp4v_^m2%Q@R#^ zmnMILTUvaC3k}`Jh5980;H?L_@X9B+KtiA7LLWZt>qAApX8SLZKYsDz+iWW+j?^(Q zZ)+vlUAG%YN+KCk8sdfPo1Xzar%zvUkr+L_<(a45Ey5@N-;6BhAI9XCXZ%;~e-mSw zS^u+o`@h%fd{ZN#_bI*lYoUZIsADfN=#ig*_N5U$d{XNRxV}T~dSofA7|4$y(dvrA z2FyT594nR8U39kn56ItOYrOlBda_$9`tdOI&d06}Awba*gLR+8Vc4+_=~iA^Z~*m zuThn~sWLTm-0J7x97%DA1N$E4!rVU(u+^==Rt4-AOa0Iq=zY+}25mJ!JKP=!A^^7` z^V=p!ELB03837DM#VZ=_qI|=;Z%4Loq3u?OZz6g-#Cyls)jfUR^EfWEavhG{oqYN3 zZ%0q0H&On48nLeKrsvZY*$WK9Js5^b#B|&Wudc8|-oLEK%^`b_eS0u5vfsI|&b|#* z?E#-SuFpQP&ffde%u%Dk*pO-#3{9AyfbW+ozr0Ao)bG;>c1B-N5YS5G)qwghe zYww4-Rd8f@Y>7-g}SW7xT6D-EOG(k&ETAJ+KXY0+!9ixpg z?WPqs;FnEhKAy4*Wdw}N(h@oDk_a%pl8C^VnI|-x-y%26jLDx+zD^hF)&+tP8kL4A z8YZG2097%e0`mWDXWMY!(+?2i!k|%$b!CqB>7pu{xW82a6}S!Ruu*K@O_qN6A&$ck zYY1?cHOT9%=Jew}e$c53nfOPmx(mGQG`0 z<{YpoB2UFz7|&@!5$7%EA7WRh2Pxt>IVap9n!{F z0V2p*6*MUU>9aGa>6Itgdp3KPjFT{;BwM7M(i~CBX=1CM#*cbiV$zxxjU9EX5)rG^ zyLu*F^)0N5+z=)B_?~L5dbwoS1c%C}<-pjM!u$DFz^VzisO@g~F=a%?;KkZqVVQ4^ zn5*YFe_pE$sNprX{1dsXt-Ax^D?3a!DSn(%I0aiAG{9UpNt7%ViSLo*BstC3K}EE|b=$dk!Ro zOZiLS2m2c_Rk1t2QL2m1NL=z5U6&x=T#G8m$_cgwJ0L(1TBKG!FEc~(fk=x=bpzC@ z+t^gcLL_c^?F4kRLx(C-_beL?&^0vH<4L@S$qc?T8N?>16TBS_ zw+;)CXCWX9{1MkswP2ak$uO06-Xt#qQQD?Xyh%H`K*7MP&|#e>n#90ia6VT_ z1c1;j`2|`05NdwlIUPsttg`?qE89zDy)>SETJ3-ed*qbMpmA2%k`EAvY8D|c&6ocn zT!b1%Fi3E5{}4h`2Tlr(d3ATcVU`1kqA4$m#vQLz z(mDM~W77n>m7U_q6iVFO*|g>6l%LZ^y|nDTTg{(AI)q;K58rD8hqP^!GMGV z;^fj(g3x4Z91(8{fObu|p7uz{?lYvzXsCz#gJ)7UJg75sQn}P0Ka;kIv4l6qT?;5$1r)#wK4J*+61^T<9J? z@9I2dlzCgGB1y|ZH!A-{y_N(W(2ZgPkn11jXaseUlF+km2RBl$$)O0 zp=dxiPEjqd>%M=ajMv}GqbYr8?jU?|Ey0H;-;~tRcROm&PzQOp31LIhC5*s2e zl#^SOKv<;K#WU%muYb|>q83)7f5p)#7ezf7LT{}HJsBQvQI|7RS*Xjopu<#|4K_R~ zb;$vuQkNF|oZ(Wa%Sh^SDtr|wmNi@aKwZukKTsSi#Sf{=<>Hsrr6e7_5cdNz(-^s03K{ld?T9}}Bt{qHWgdNsSctOCPbsAG zv{#}m=#}K1xt|>4_dTC$Q7XK@M~i;loDexD&wHoC(KBteK11Kkppza2J#v;!jm`*- z!}X|ydRLE%IyLB&Nu{EKdvxiyqo0>D<*)=$RrQ=~(!*5(JVzlw^5ib)(k-7Y`Uzt^Vus-@q|Q8POa597|~4eg*Ij`73f^{fPKj^@Y) zpe;wnC(z4U-E9lpu(qqBosbXgpPNMF^M!L`Dhr^6{BHXmybh)EOhw@prM&v z33!e~VJ^qIVm9mM_|ZG*74y|%?UniYlmL-(#li?g5#UJUUE5zzaE#pIU z3^P8)nil>A87wZn;7T1l+`TSkv-X_T{1wJ!FZ(uU9gQe$ockH$XeB!-b{!|0nJi=F zc>x5v>=+_9;TxQC({}FcKIY(k6k!x{m~hNoGf6XvyueR`d?wt=!)&rZg%Fiyn*j@3 zNjv$5__RQJxW%y!CSaMHGG)b6ue2g2Bh(+gq&3Ns!l*x{f-2a!bX|w~P`9s!neKsV zJ|Znm1?*4uFwtG*U|9ua20Cr?;XSPxSB77W>=T`u#A#KTG zvwgmrry;(o`?i%0_Uq-m=D4h<;h6<|I+DJNXZHpD9q%gY6Rh^3vNVm?9Q%B z-jX$9ec?Fyye}Mkr&{b#Bg}f4$aVoQ{DKpF--oDbB0hus5&Y)G+-qr9K zaHn&$Py8@m&)S~_qZ;K-LQW|*h}h_8gft>QTPvS2;LiH#BtPoUYOR5( zhmi;|k_l~N>@3Hb6M~t_j9lvVCG(!j)z_O&gTWwxf{M8`7QNUjybwKAh{Iz-C;&eK zlqKPU5xfW?U`wvt@pV>lMA^4MTFMpqL)gu*Mn|&0D6l33v*S>}Ap%IaGW?(;g)6!A z!W96tT}-4;{`6Jr3_u#TTTY0U)jR8E)qN~!E@mEBdPI~mrJt9OTA+6hILz+P+B<|Z z{8yE{1R?lYheg$L2Xx085$aTm1r7qzu_7#kT{=*K(CMG!;16NhIWq$Gdt~qRNyIH4 z6?|x!3Tn=9Y~lDhAhp>wLp~x;L&IZ?$NalrFEeSK@Kd5wT-1oR{E^Os>-3MA9u_k3 zijcyRFH|?l572p*#OxckML~a63ZoA5#9?mv0nh!)pNex*BFfnHlhr6{{OJeF;}=Gs zsA`s*Lq;n5Ba;u>6IXvUgI*K3a#zb*#Ks*{jf^SXwW0q-EvcEuWzSd}cRqWDlO7QC z?9TvyAkPCr%Cg=x%--CbqONRZ*zux850AsGg zGA77y_ydmlxuX=7BL34qCHqGgf1`44w|&m&g9Q997!4H(cF40}VhqgLejAc+7hF}$ z$>!cj5PorFBT|mHnZpsTIQ^@X-K9Njm>J=i!3OrFHmrnx73txi34SU+WFq^Y|9|q{ z1jx?oy6=4Nd#_(_ue%=_4WNO>a=#A^pcgb20%$bW?hiW%fcqwK5hc=&+}&0Ll982! z6d{X}X^ByB8m$>7VPc4qO^u_Os3?tx8N(zTNr}p%WaP2RVR=+8+M{u)QnJHIR4&C< zS@Zj!`+aZk1rRdc2&uojo_FuL=bm%!b`EbYvg-sfg~6q{1V%C)FSJOe5o zQ*j!k9{~W;owMQ0XdZ<~4V35yQ;q<}Il-Z&^Z`j|pTd&jIOWXS^LgUNb_z%=X3x zTjS~)Y@H|;cL4jQH@HguXxdy`1(n_m*FZ^a#ceeRAH80LkKTNQ4__C;hpr3ZBY(LF zM>{HRtwA{GZ=mpn2?h$^cGD5g0aF{>zbj~&1&!7*T3bUrg9)um@mJX`HNDt;y}j6c z^Lvp?da*_BqPSu%4Lq#tMOfF1!J1yMI&Bz>8g64e#;p*$Nf^(HqPyum!3W#*aGVW| zjb505ikohJbJt&2bMZ7>&(ZsuaP)*hZn*i)#Zc6B@bk5e&0V>0a|dpIbNjEWxoaAm zyK3R)uD$uqU4326rET@Zz;lZR@tzRF8esqBNlVxFCL2a8-^AL-syEq4TK#4?!1b)Q zBFs)5XjNiG>*;?No3dZc* z7t*zUVZpV&JrQ9K!*s(kphedDR;Hohi=dui{VUnzMRx+D~D$3AJ-vP*pt5VsnGT2cr+WNg&#=(%ot4 z%9c_Se#J&tUC%l3PN=KRsLRaPi@Lf}>grmMx(c@GpHNpBP-EZi97#-xGU{{P)>rR> zx-l4%RU>hu}*rAm59>DV)`Pa0aFD7!B8McF8@U#oA$ z<^@_I(+O%_J)BLApf@f6di?^R*DV0LzY+ABr0D7jE>;T{nC-RJt*WH2QaaxBn)VWB z#Fk!<>z*XNzL#7ECnI(XnJE)-Ov!%2t2pADqawJe&VW zQRmoS%3^qcgKU~TZC6Ef0VmJduGY^OFZf2L^xHaqP5$W`N`HixdTI;>>*KubU&sIH z55CR;4d>WHnN0i#|M9o~yg*D3(qTP-D*b-$M8^JmXOfBAHk!klMkS@s*iGA5rWDIG zdp6SoVtY>f@HZb@_nlupKlKU^U>Jp@!lj>{dL^m)GgF@>7b469GY8A3x~fpdlT`g^ zjz3-7_+?+Q*X8shut;4*(a-k~oSIRnyB^=vouF5`7c|nDWM()R37+O2QSWCXT|8g; z*{G}Z+j;IIcE1-abeG-=qV5y@V<+zU^Kk9d6-uOFGnvN*G*?&Xf{vSvS4+mo+Er7PuH?bohwlI}|XIDztCCm$bJ9BK{eus5F5ZEzu> zMDT4N?DF)%-K*~RscXNXYqP%*wSW9r=5B@=_VUcJ{L{zU?h_&7UFN+c_NY*AT8NvA zNul<8C{*sr-v|^kt!g_|@-)%)*OewZYls3tt{KcT0A{ew=BkP8=c`R*Y>fE%s{6p6 zf^<(Kb z^Qz@AhW!9vf${{s`1kEEJ?GY-bypS#!9v<}tI zHArbWw7UiRX-2z)q%TantBiKFd#-E#nwLyjh*F{MW&Q5v1%5YL=ywrC3=QU;`D)@Y zQkq6g0Exa|)*D^UHQQfB9g%p=Fqs=%nv@=>)U4JvUA#JvWU`YFM)So7_1&F!l1r-UKAWaQNK;o($7lS6BI?seVVD(>1s;(uLR3#~RrNx$1h&Vja zO2h&3`cxr2#jLt<5x455i8x-(-E4lTMQpRt)mnea(Zw4@%FvTRV@s}abY<7QzMvhK zULT$2%gYsBL9krOLl!JyY`Mb1OG_yB)2o*&)FR`NNaCtxHcm|- zc)Zts)~H^aC?!|YzDr5l9i^&G6w=GBX5Yn#om(ZJg~9ZG_QrN!ZXU_kXmzD(t*+c= z-&J;1{#wuN+GS4HB0bfhGMG5!`RmEWYKFA4($VsOHkWK2O-h!llmm_GM|+ccHNQ~S z_1Y>Wp{X*+P^%+c(P$=hRVD;7Y4MH2&{jrTR@tKJ#%9ugqxBKiN?Oc=LefiZDslNf z*~Yx7e3|#cP5Ckx@fYFCt2|%kd?n?}T+9=vwkr{SsjI7cw$$Zhv`WGx1#6gL;T5>Q(chx%0@@D%}Rc-lBXxZ-1Z#J^>e_`wEGr>tKl_E~oIf`~|!?|5i`~I9G>kB%U)see0NV}4a z-^PvuCNm?>QaQmr7VHo1;FFk(`61?8&!FvNS?-_EC-A-MmCrhC1zfpufF>2Jd!%-g zy4q!xIzejHV7L{e?INv;zTFzqhE%S4ph$BnS3NqU_0yV;{Q+x^V_BIl$IZiVuxmf| zY708AWC`R=&=ho#Nf*84CpuV&-?0Rad!t;r5NNxkegf;m6e0Q|QGH+57b6H?NWQQ0 z74oi7^f{%yke#+eDPd1JnHRJBGykJo&)7I$qK}2sZZ^ z@cp?*6&lN&k29waW}t4)|8+ivF$sO}KTMJxP+29j2ctU>DU|pvkSB#CO%S>40%phl z+=O7@<5$0c<-c(-Y1CviO6x$jGI_Nq5N)8JMyE6v%&HPZNE&4zUOWeZA^PS>Dt!j? z2I5n8haiJd3~U(`WJ`e;j>`E~HquhrpAO2%4lmZZN8zn46s#^gurkt5>uhw};uo{i zrJvPgVcn{n95uMMpkRURr_wL!C-ke_TOd(0i6)hPmM=p)nCU?wvx(Bo^g;a1-}ySm z8z_4vI~{+QNNFywC3O6`|BH-LlJONHmhsAoVEEa?&uqs0L+E&bdM%iVAH5i5xoMIa z3D$>q=+htGsZU>cmp-NNZhea3J^HkT_v(`m?{irNGSU9ynM`JKF1mk0#GQ5bCGoKd zQEt}Vo5Xia1kWpePZHlb5xk)I-ANov!pw%OyDN!fb$DL!JCpe6MDUX0cO>!c6Ph*r zGju&~_8rzsI5Cjismg#{lcfnH55K2ggT!-WB{Lj#1NnL za*h)Jh?%q91+PVWkIPn+elSDA-iHUSB6lwRD0lIV%a^0=Zu`93e*B5`|Muwo@qh8F zzxu}9y!;1b;~!Fe)V0@EAFZ!G>PF|?Xp`!ix4T_iZS~#t)iKeHY3e4`#ddeO*4pa3 z>Z|W^yRe7dr26-%zS9+ItM9C@zSHfTcRQO@mlW9HT57BBsIR`m?U;8vnpFQT)yG`E zw)$9o^)WX#@5Y)`{|?m|76$CvB%gcl{mkV2<#|sq^T!W-`mrN(eu%_g8312!bdiFx z`39I?2#q#y=)K=4jqaOWZgk({7%hcCEek%HJo0%>Eu;MgJs4^LC( z5}3Ih?KS)OU}^6npPV!+%B64EBXd`Fbnp(u3Sr%ex zNc=;ppLVNXi$<%)<+K~E9hZgr5&wYdr`)R7@J&%+{iodS+UiZmLcjhF)la&<*P>lj z)la%zwbh%Bn5uuD>L=XF*P@+O)laycwbh%BtEzvG>c?I0YtfFX>c`!V+UiY5U)8@$ z^&7eESL6FaU^dbMvNNnm@NH}>m1}R# zv8d7-Mxi@xb)(Q-w(e2rZd(y4bdRl-6uQ?|Q3~DXw7yd4e)I05Q0%k{Q0SP``aq%M zPAdn6PPmaIbkb?Hp|n#@>kx%bJFQR@I>Q!M@S%{MF4yryoVytEV(QD$K70y=ldkj2 z(YPC*3#Z(^tE_0>U~x3=1ADZmmz#32!(q__a7;e$g75NqH{6@ggUA3r4+t#8=G%PQSZ9-0toRN8P>Q zZg)?(%iSIBba#b2+@0Z=yCd97PkKf$dOYHv@3GA9(Y}T3a%S~3WBXN>l%rR}qT78H z+W@<+VjE!R)o{S=xEii^V^_lsZtqo0ORiwa*~@x!C5z2IR+_6=X0B$9xrPPiu%1bX zF2^rN`)zbGlk?HYd^9lu`H(ZJoCA)OgA>8$m9kqYhm>-7BKU$*b}8kEQjSgpUsTFY zrJPmDtrNkQl(Iu9=ah1OBKV3@#*}hFDYs1ouPbG*Qf^nu$V70Jl=xDB38wf;FkN~+ zaJRcDtps0Y`FDGj92{}CSIfcq%Roszr_uWhzSc|B8mX#vn;TiU)&_UZ*P5@Zb$+p0 z>)lyj>&3cSw=Py|z#Z|mUZ|^ebg^3N+#z4<`MO$%7pt|_9q_fDtE+Wzv06p9-`BcS zS8HOiS{l&zh=9*9sS~2wpAgj}8e=HT=;>ia4kV=XkRni;QPG2n97+i2-HJeQMmz6P zl z3@m2B-_ky$I1z)H(#fbIDV^+AB&CyGillV1Q<0QTb|{k4$(SN3o$OVlDV^+H29>z+ z`OD&_V=B7@ZTPYqV0x5Yf+Bp`^{`CJE;MdxvP+DzT%H|j?$}TmwD%%-uGQBsG5tHYz_l;=8YY~};2OPnN29)4#(f>)g z#ohAIfS2u7!PjbAUM=YeRkd1|S4;Aus#alnwWPCD)xt01a{48yRaGm$yjs$ss%qty zS4*<9s@A6E)sjwEt5w-Z`$LK60)Hy;eBh5ISU1?Y#EXGHn3$KnKFYroFjx4#9Mlc} z#swO&hvDDD@b7VZnhgJj<<+Vi{`JeNRX6+t%d1s4{Oguit8Vz$F0WSI@Z*5BDXG=r zux|MA6uO*Rjl<8SrSeUPDTVyhXXVw&1LPv^(>PRQte?Xmh9zO@UH+R$LM6wAo1Q5v z3BnTJ;=oWzElRSJt``HxgLje&N@B}WT$3|MCABKaPQYHmd734)DaokrWxP-havdzu0(mRbks8OhX(Uesd)__=v)4K~_7O~PyVf+)N(7IbK1W-u{TNf{ zbE?uKDgX9j9%Sn1o-Gi1pMD7r|yzj5cJz%-p$=yzFp)PmAa(9uti`>?_ z-2Iljm)yPN-U^9Sb?C4=hi;+{;s3$OMs-!@5qB0{MVayzC9@ATxdwNF+zE2q>v9iU z?qPBdtJ_mh6Q2{Fn$AE?#Ljzax&vw=c8{l~2cRZ_E7km%2lo)*9wPTP8dIBZt$cv2 z3-rG>%ShxNvd-&zKn+wQ5Kib>IP=80CdEv;KAhm9|3m5I@OXF{P+R~rJXG=w2OlO` zIH)9B|DPgR{jVfj-#*q#G)XzSb%mcX?JwoZR zJC=lwx#LObxI2-APPmgv=%hQ9gig8BN$9lGI$u!E$U&i5`LIiEmx3r@otF2~Q>?VBuDO-ziKQghXmAKimu2dWi3VPNhQ zA`CkvV{-OJh-(*^JjrCnGXpW6M@ZO?W2LbSRzwKn=*Bz;uX3%!!5|xR7-@5|#UY;^ zKp7a%th7+jKOU5PJE5mQo&~JH%JIx0UjT>W6Uf-LuOg1unvZ85h{*Svc{x)E+n?*> ztnR4=ClRg^VDZ=f_^TOfoe*1^j;|6Q_7|`uwc@W-$G=#P#Kkx-K=^{<4%D%ixleH| zr<-Mf<&sh?V2Ui-UY*zud%KMJb@RwKMsUcPS?DT zIH|Urv}hc(iTl6!U@pOMZ=AiT8-mcn*Z39fHgMYp7m-&ncK|T?hOsKd z(I}jS#wFaY^d!J?aqGqImhRqcri-_4l=(t7Z47(IK#Pj}R{ZJT{b~l+Bt85b29v9OK25l3OHve@0xJ^d5=% znYPNqIRnSdaw%xyS_)X%M9DmC~0yKnzfk>-PLI zIWm)MIlxq|k$ zNZF4}M_l$hN4V`|sGD-QcSh6?=ofq``~fScJu2sQvX1gkqA8z~tCqI-X}JsMx}*Hs z<_vRStxE_tW>lntxfJ1Qt*3yeF1p-@;@oVc3x(WB6{NFK+W_+bV^`oBXRy@8tdhXd zBFo5H;-nITa$*1mg++O`5q?pN&9!V1^ImZ90tMPWRt~ct52~HxI9-s zXP6y%*M16@cwHj9ZiYdgHblqIA_I-uOyTUpeueA91eeR5Bb?F}{x4@DRz6BA6Bv`d z!xLi10Ov#9K} z6RW**yvSt5MIU84Q2qw7xb|a=uVrlB`{eHGpeC| zw7oncx(ZuABCL1?S5E1?9Zeu>?so`v8tE_)duPRr|2>)d0u>}-S;b1&{c++r^|RGk zQiCW|FvIG$MV_x!gQVajZHHG2|Lu7C6U&gNTT2LxnN$Pe6=zO0Dx(K^s|Mar7_p=t zMnD)zVUXd#_pw&H3>=+z?a9DN6qX0hyhc+}y~a1OlXF>Xl#Nh()d=Z=u^*wrb&e31 zkO9dEwUD=`fLG z!-PLi4HGUsp>H8Q%e)Q{$;s>y(nZQ3J*Qoi97D{DJkQ%x#sb668G9GcFu4ulNz9l2 zCDJXc(sGko86A5XCy8r0a^$5l(p6x!R!s9lm|)n-6QsotVlqKsEmec4ogF`jOr-0Y zW=jqtEi*Ymdk|{gO}PzhPYr9+zmHcp`4T&P3@?69Yy;+~67!H{5?{2#rYzv3`YMmAo9f^=t=51K8!dYDD0MB`=a zP#Q1#-)TCVHH|kr<8r3)if&VC*W(2^S20y?0oAT%d5thpa9fxF*xE$sG*cAm1DMxE z3n{qB5{*;dE4b`8B?>MfQ*e>&UN;r8n<}`zr0B_D!4;|%T>4_cdFP`kuMG%%1>(RTBWJ!eV!CQ7a=&BEH^tSLr0@Wg}) zi(XfS&{{ly0a}GDX(H5s%+n|PA%~hAKur8{AYuw2rieM57k%)LHImU)VEhEivdIy_ zF%ta_AC8b@fR3I}*K+Ad7j|$MC^|A1y0%b)dW?S?MS*4TQn%&^JRL|I7Yi#dq!M?I zzBqJj480``Alzh-?8kEc$5=_}rzCvzQ#|Ws=81vXoR`|ARTUfEA#|0Dx)x(erzMBP zYC4f|1r|Eszr1erRCfcDs)CFqSB(oyD!;z;t40uOeXUwGR*>ntSDsY7TCz#i1l`HB z>st1tGJGbh$htOY6L*n@=xtm{Qa+h+(gC5;_EhO$E_qelPqvnZ$p*k= zd07^k$?{UHzlCK8{IMl|<^sQgSk@{tXY}N-q6@QS7P88eLf2&GMZC4Oxu-=u@KJkk zH+>pw%33vPtzt_?U?dAh9)C*i(AZEjMY|R4XU%du1_>@==FSY`24Pmy4v6Blxh!)e zr!6I9wI1RM6$Lq^@uzzw zYZ998siAl+SN_uWNzmgZMmSDL_eoI5gseORq8Xj5?2~AvV>u}y3UkX58`Tt!)>-|V zexHO5!bZrVZk&%i>u@?Rk>S-cv~%{NSfzGqcZ1a^PIRdYHFX$0`%;|yDW@|k=XIjL zCHo{Da%`NX+CS6+#t6B~kAQVpnsY+HD@hiMXMZI45St_XN}p>xHvrTBKAUeY&_)RF zxjRJn<=qu_PiBz_^m7fIR68l{m7NqVqHHHcL(cjP0L%cA*hk?kF-hW(JaGL7Gt#Ep z4rY)s2wdJ zYg~IMwu^(*FmBnA>hG!AM?STAhO4Ulkeu8T8UoQi#3q1k#O%!UAIfYY%l2W|nTgkV z4Rl+a?d%fzw%evH>#APqf~a`584ffy(6s}d@gU_2oYH%>!K$CgaLP)2EY)Y_+n)HY zN`8@MA>t`4Ia>x(WS>fDto5pY#Cnhbt@;swsEPimwDyyxW^_KG!7)YSKaA(sU>m*n znJm`PqZUZFCBEbzueMZISY{A=(5x57 zGFzfT7u(!yic>ouZC1I-_jG0K>o$KT3?UX zw*q`SpDS<|S&Az?Et+?*JT`D1?$l)bAl`8Eqc(6&f20U z_uMvbk?i8aIpoN94PQ_P$7>PZv|phg3fIDCT1J8|Wy4V4FJ{Bd`hG#Xp?p7|4V@px z=6{jw2=9D88)&J7g?|+E+pMWfx6((MVn&Bw1rZJcp%2dKC>z%&dhyw(m}Ho6hUGhO z0r8&Tvsr}^`9r~!yp!zp;loiY1|A4g`!J-&#g{FYIRkAGoQXIaqUNKcILGy{!OKxp zH^ok}9k8P=t*c#29J>0IY`6_TgkH}^yb1pf*mv6|g17XgRo~W^W_?TFv|V3IBG#~L ziqMd6=t~Q~$rpCPDCaVSCPXI+>9fnXe(U8hs%`eroV(?H~>z~DLp_#r|dWc&(S^8yTUIYf`pbw?z0kbu_A-q?i`v&lSU=MM;5 z>4{du7k-cvWBtH@;G%O61?MA{OUWV&xEH8M>hoC_#5tZ&=zh#1zo)Uv#ZT+H%tO*i z)gBs@{$yysCn|D%WVx06fv)JJQI@1f_9A44m;#HfIFN=4hv7(>%!4lS--}`&JR!Lp zZUG^io#WMP1A;SdOOrG`L>8niDI}Qf4i{by2l+Lvwzj#=m!pv;H3yreCD2AvXhEl+ zRNCf%?VXCHmM~C6VPHrpxf&Y$RJ7f3FZxr_pc~X1D*g^~v2r^t$zT3d#KkX~;Rq?8 z3)V^gh}+_mMn4s8aa-IVIee)(O3kfF`E729P;LGg*h=#^H_0D#k*_lRsVH)h+X7_1 zKo-U?y=jQQ^yVW`7b)ZnJ{Dp8L&cEO1KQVQba)cayZAX#?5G=@_t=?quqUo}I9}}8ld|o~+Cu3$$E!bv za()gty8HzKC)Ku}tgS-gd(Lr&A#F{+fMUg&%x-47X%%d{EQqVz{- zWVtD3Df9Gf)C!LT%%#Z?sl!lN88{es3mKKraY*6W{whA14Dv90NIJx7pSs3>`u(Tq zKOA65EE-bZ4@6W6o_mpygGf&~ zExI^S`lsw@X*1TEl>Th}?@9VKt?3vdkZ`-sJ=j!uf@O`Q16p1tY-N+rG@)`Y+C%`% zWB%%=e?U(#{y|MXY}Y=8qqSr#ZQvO@mkdxCDT9$WN`NB5G-He8o{jrplBDQ&AcHx0 zVmQQ*4pJn~z=I6PA{+!86p_IksC08BV_3;=W#J#2VXVINoR~eg?t&?;`_)(7-av(Q zt=;)TYg>*4Rh;vt)|`+hs;2Qodf{cw--#M}beD#NS{Lm&Ndq#+sS=%Tyc$hElhx%OseE5UW&2 zN=@jdi_R@E=IHE#xb8upsC+0jicl_tRIeN={I0`Qfo`M92 z?WUY@5GZJvw#bBs#nB-|Q2=sV#7YRyg&HV+#6?OGsfD2@7BOY5jzkO@zfPKbR195G z-6|y`3u-s3xeO=2Zi8(}H1lB zmW0AzcllrcY;?;Bu=n1)`)lZ3ru7*`N&)w$%Luu?fM%NCdnTLE~j3mq8an z=E{)1%%NfQcM~@EgvJo>2yIrK_k!jOD}`s(Ns~D&$&GWO_S91qs9r}ocm#~4j^dQ( zho1$+P7QVD!Hb==dn>A6xS8RqCvOd0lV9+(1Q4SofUxC5Z4hvg-Jy)FLv%}0OA=Tb z&1||LQ5&1BN|M!xX{~Bvs1brjxG>x}19cX()eSepM7E)w=q-%p6SiNK$$)65ImUnQ zOuEg#9`PFN6=sxuul&;Iel2qIjSb9C8RkN-%7n(_GT|1aThnx=4p8b5tNDxKC3S3b z+Rr$XwpT*W!GK|~$Cks(*~nsV*lqL0hdvc;1G`&+#}|0pSXRdTqXjGtDVlpSDxfTF9?y?P(2n#SH(*N?<)grtdb%SZGP3pG*$r~@RBvEg{Ibpg3h{7nhk5@ zSI6hm1!5%hGLrmnPOW5@0+Erw%>P*NAbCfNM~Y)UtL|#Lac5HlPtu%wZU#c{u^^(s3}mz zPPffBC}p-=2)#K_50{L1lf{3n7i&%+j8AU!T1rOhzv(g=)A~skgOur!{ME3P(RTA! zwR3>jN4#PNeuzazn5qSdI?x&FtPXZ5Udr;OnwQ#sZdT_2;-zpc@ly1LMqbK~#8+(f zSid!HIzX0|w))*bcqmqBqd*o{*SmmG4>GP-u?>l*+iRAT9S)x6O@CI;J)Q&%GoqV18b4dSQ=uqLra2LZ6Jf| z_s4p}L%z(b1sJ7`_)RsD*6xb5?~Fng4WSQiy6`+`fY#YrNY;&Yj(u8L7mL# z#`SvNU4HMIWb^ciZCRJ)S9}SM+w4psN$9p?G2a=t{?#zUaBqCo>!TahA?Y`PUUE2| zTOh#nCu0=II{+n+=R6etc79?s`|0enl=vqM!?QcHnQ)58!Rcs~!X;${(+aL2_`hW> zm?g*=NpvZzjF{Nr>1egWyOrb1_Y%bFmr?_Q|D5t4werV^9i5KWC`UF||G6*EqrLbI zUp_|=8jOD4${!~-H508>d0A$?;>)iic+HpB;pHoo|Cp6OLF`{M76YoVS6RNodZqgc zEd+In^qf^VNsQySXoD*3QMIN?-B)NQ zh()sKd8=@i80Uu37F9T)EMH-((tU*vg8wrWe$gu2O6=cLVVf!(RFG1o_>@&RPwfAs!l)`7R+g`@UFp6;7eQVVMK4%| z3&gNE8m&}?Bg*m>#+2?WbQAnFD*Pj>z|+h4cd4*b6^<&)SJ@^=vdbn)S zfAQnoMYrqRfNq~oo1u1|lOD=Wpke5urMqng`0l8JJ7%Ky0(6JFZ8mxz?+$O9A>5My z?Qus9DEBuKpgS6XW;n#tl?``cCOSInjwm=b6FmmdF?V4$dK}Y67iI`|CqTR15d+HO znFQ!q6QHB6OOVdbL`P=bVFkC(L_Y=4?e6?+^waJzS%kY1pk3~;0qrUS-QEP~Fq@G; zIyVy?o^^*59GQv!4nRlTx!LIb?hsjoiwV%8J7hqMWuPNXfNtYH3y^M|i4M)Wg9;AK zL_Y)2A$RL+H0=(OMYuBo+UX7&P)@3n?hiEqy2b9ayR$RV!C7}eK)23BGXUM{&dx?8 zkwv&80ovgX7|@O~(5+2?Zssxzkj~6R2WH)bf`c>B&jNJNotce3;3mi-+@1h!cM}Gb zyM#$g2b%y5IkpAT>6vI^*6mj?nu-1{KqGg0Hu@lDqfXBdZcBi+x%~#Ttqe430(28H z97v~TqW!aOTtPPzT?D9er)Hxk+&Ec;TN9wIZrp$(_>-2pCO|i^R{*4wGtv00+o#~h zndnJ?ZgeMSqo>?HvIrLvpar+jfO3|c0NvOG=m5eGNGE2ZeY0+_g6n6ZzX#Cu?!;{L zAD4QNmX+S>%^DwHlDAyaqH zazBdTikavcfUa;;v(ZOzsW3G|IGX^)8K41W>nOqLiY7oa@$bQj?-VDN((rqp{Yq2d zFekc8>3xd$bZG>?Px{?TU!{mom*jt&^m~-PS`nWv3IB(r->dXBiuiO1a;~IA_bGj? zB0gR6`j1GzU+Dvi_;iV7l)vZ!rEgHgr%U?&N7CP=^i7KRbO~8(f=BOGdZ>s`mn{7g z(jQd%W<`9uM5gq>hm^iW5uYx}_@7CCSn1mo@#zwPD4o$GN*`9lrz7WfW*-Pg^?57H z8<$M{rxaW1BpX>IzjszCR+hv`#%`wUg%WZN$JIfyP0jg}OX8P^}TwlcA3f<5Z@?<(SWBU)d4esyGveSjfc!E_t z-hGgJkZyy)Se(n>?*`n(S)OU`2gX1(OLtFjIOYZn#^OxDv$|o>tn63MW)}_m0w{FzEXO#AO@bdOGxJZkNzD3*=d zD&|MxKZB`SQR#mBilmDLdPutRDrD8q<=Djof;c%xu9Nv`NKVpTzD!`T?<>kZl zp=`#zfSQjg&#ItmVPQF+LRUv0N42ld`6LQAN;UdvKMV5{jaU&RU=IaWqM^MHJ8aoaaynQTfmw>vKMaPKVxx3Rs`>^C)I0 zU+8i5IUhy4LW4pXtIxTVbunrX8dZJHvu+Ai2Cb+*BZH~iUCf@kjF+dNXRo8)SbTUj@^n#e@!R>Sgm%a&=8buC8g6t6nxQC0AEh zt2@11EqR?9 zxmrqe>QZ^WG|E*>T5&iTX}h#dk0fr-Pi2rXayy187;g%Xy-^}|Bu}Upb4;Bd-xrLe zp1DF+eb=%xHJ-U*mywmbWBT-k$Mq?NC-f)0Y0!jBJT>)LQS5t3`=zAqN%mMAfQK2}#bUFU;%HZ>vP_kZU_A^bWbS1Lz%c zX=~3r_~Dkt}Z0#zLI)sgv+*;9A-Ic(}yJ5#x@-kAz0XGXvmVpSe)~ zGrp_l;PAW~cr7|y)u!|AaBZ6s9I_{YmbmV<=tx!JbM8oO;bd^w@IY}~TWihv)>?b+ zm*s{)9n?|US=awsG+71ttm8UdwYRv0oY<;Cy~MlGR8`?KZmPDhr_%}^nNF3VfZzCt z28n6tBN{&Vl#gg&;bA_aA&0;Dh=@Vc{sFhDc0?X%G9r(rwKSGfaF)awh!zrwGmsp? z#2H8+7JntsrjIiUya=A_`A@jQsoS%2$<(5?O!6rpowl~Co*dp<|#f-?q4=r(gFqFnA3$2bDP z0*-4pM<9{QeL2!C0?vgxzO1{Pa~$~aqDPKEw&VW70%LJD>(>i)wI&v;wSuz?tMz zODJZdhGHh_C}u~6V)D53uv+yL1A#AGtIa*=Yt>Us<9Jm4R;zo+*Q%!&rq{y1Rluc( zwXmLI8b`6}w_0%NVYTWhhRMC~Z^@;H)vBkM#<8#Zt$>lYTJ;nIi&^lubel+=h`~(h z=}~qGituGu!ZInl1ReOYy)azLE;0JP>+Qw~Bv{h1y-lN$j_n0S(y=|SNIJHt43)9HRgrXT&nlAgfHR6T4CzM@kY^`hy8VqHZ8e1!yL(QS= zQe$gn<#LO%OO36{c81PW(o9B7p0_SzqGtsb;IAYyjpd`-?_Y6 zjl&-`bp*nNT-PzH8>mHDZDXvT zSTTIey99Y$u~PU`-X+LSy9`b1O_~;&@yyh-0WIk>S0M<(dDZH}$pNRR?x*a&R@pts zE$*k0!g8j-tr+*1-McDh?sAVKm6ge1qkFI2pDJhWaqmM)E0dE>cdy-pDrfF>_an8H z$uXT%)V;fU@7+kvLZ2 z1~FN+z4h)yQnw#nb-Cl#rYg4|T(#9EfKk&KsEOElPfd3~O~mf;)bs$#NG?svN3PCB6gpMqjzcFRN;_d&cM2W1?L38!Ror{9pVZ}6g#mj?tFYzH(T|qo zDs;x3O+shgtx4!scPwoVwtUjU-3_H~Bvm)*Rw%MX5udI@8?I|8 zRhKw)d9GKHK}CG}7(s4mC{_1AbYD&uXY3vw_vIASF%OqA6x2O`U6GSz8dijMMNUDT z|8NgO!G415okyz_af&^1Bl`5|ae!nFSN0}6GjSJ_w{)Z!QHGmSgRQGI+Ta)x`TW!zutj+f< z2Z(J8_sjtE$1(dC=vfCn>+n76PiC9_dJHst*P(XTJ>x#JuA|)qVHKz z?MYj>wxMS<(0WE`de%qJ*7?q02m`I=h>z^J937`;yb9O*%p>lI28R;st9!Q2t(%L~ zJ-4H_XLiPGJu3oYhxJVOQ_l>K^sI~);l{14?^(Zk)=$s6=vkNVS(n=5C+Z}5RH>O~ zG|+lRX?j+oX9K=7m@hgq?+*J2k5y05GfYp(*wJBkSc5}}HPt;Ea07FZy647fduGSg z*0U}^j9JfwKlRM;NYBb>5pG<6eb3gZXY1%$H$Ch2J?mC`JULI2SKl)lXg#AeJ(HTd z!FL8DA$SMVX%zF5H}EIv*#@^ouX+!;LmC`PtgY_Z2Df1@Quo~U+Me0TyY;La5ZkS1 z!k>C(c%)}#vq z!i^iK@7V_RYy&+D=vm-<7N|WbTiDRhGa6_;qclC!0%KC5%|#pMInp3>B^zy^Q<2*s zdn(rYbrNPZow9Z*&qNu`L}vP2MB+~CrcsWNokvsbteTomI_J<;iY7|n{w^MnYf5wdnKtD%pZxhUNY3A z!coc4)75lhYJ>8eWGM0iY3XvHw5e3t>-Nq?{Bh{NweqqoRobD6c25)SfD02(b4Z+e zYNs(q6O@J~uqDZsG)^FQiTxps)=EAebO-06gOZPXt6N3{L(CUJ3bpde8kYSXzR=03)!kYhxSP~LqKr#zsBumRIFP&T$t-ewD)IzIUe5+fQ zC!Z*7tWb!cpc(A z%_143+8$PfL>@JZ>Ip z21(|)V6w;lxIOiPVXI{AR%C4!Qp|c%z*#KNDwB(rSIxYL&r?$~OCB_DpIPwvk#L)wf#9zhnV! zX4GmFZW?2P!MA!5afay)nft6-6Pq{-F|JlG&cdYC`l{6`6Is*wBTJsOLO4{b!}?ZB zoY`Pal2JN5@#-HwZ3Y#%0$+5{;;C2Yqe9WU45%1 z&a~P^mB+GR-QtGE)UXZnf#_SakHut159en6z47wOVB&YdU{e zW!JTOP^})UZ?%?EMq)C_TaRlRQ`71N#o1;poiAT~7<^$Naj+h6f7+l~{w=Hcu0-Yb;% zCRp_PO(s~jtAe(B6B8^al;{? z{$L|EHNnCgh|~m&1U-wo!~~1PyVQzxYLb?Li3yg|O839O8otT|i}VVaV7WyVSoWqS zSk5TjSCB;+)`yWd!ICN{8&yFHL}G&FEJ1V?rM45Sm|)RnwoI_>Qx<#5sR@=_mF_Dz zf-E%?6D%PysXF^r!B(Mu9L_1-SJ36;iV2p8m`t!7Pz5bS6B8^P8KovzHWOsk8hH~e z+NGD$R8$4Fz*7?}7nJUQp_5?61dDe5WrF31D#*x7VuA&ADK){emEez|Vl%-qSuw$K zo8I18av;kr?@@3f%JH6c(wkt(VSR<$F}K3ez;XyXAKVVASRgqhm{==0k%p>nr1AaXX8*eZZ3aka5Ap0LZw9xv2@vjowbm1~U|5Ha)Pz zBI7F?yz!O2Zo>?>!zy-C_6jDZI`(>)8=Anp#jRI62P!5#&Uo7^1K#$^9cDuDR+)%8TUg0wNQ?jYC+rwPj z1m;fHuXe66+Z($S#0ZNludMNwS9X!bVy-`FXTRGen7d~An$@8-O<=CJTLo^_jLPj0 zOl+{o@X9J@hF5lw#j>_y&1HvR?oe5SxvB}w?XFLN@b5{vF$FQfBD*Uqz1@{DvRL5v zCGG5^3^2!3)?lt|0uxuj0)(*<%8e?B1s0iI;ohXou8fk!R!7A^%&1_Fs;t3mW_D!Q z8!+jaQMnPpJm#&g^mwZ)BN$t9$DDt{rw4o^f;pnH2D7J0JLOvlK=~P!8&VMaD>Ay0 z_eNK+Cq2XVSH|GrO`Aby+j_I_VN_HCao@mV&x zBGLGVK3zgjXT$b>UjpsBK3$@!Y;r|nC^5Mr0i%OrGr1z+@jYK&VxequC8vl_-$t-( zaz&5ozwgs^3|%(4(yNG1*MYN+knR1x>=L}=({(;vHo2nBfW+jAHg(G;S2il*%X79X zlPheg|PKZ5-$My-e)6F+Lrq{$;F zsgGeG$t<00^rB;*2Z6z}(7qE=~cWcb2b#XeJ5XjfEMktqhxW5e{#}_J=(PdN#~cA3$_tp2mY{#`xdG zO*xFMu*pD;oage}JP3@fY^&E9n(_GuT&LcIZ#BChoUV$gdj&zZR<@At~+0Z&?w>P_nYS`dxu=mT(!vWXS3=)}Z|ShOyqlv(tTJPQ(wE}K{pi~b9r zE*5#7F{;6A{L#PSP_eUp7LcDotRh= zi!Pg35sOYttcXRwKzTE$Z3hH!Md7 zXWgI&al>*nnst!}al>*noW)T0PbNn<&ALq<#0|^Q4YO{82XVu4bYRvEcn~)%N7v4} zwI0L`%h5HnZjA?V!*X=htXt(l+^`&7Im^X&8`K+?qbp{)WN#pDSdR8!>d1q*VL6(| zGMfj{be+Nu3Uc&_$5IW5M_cNp$k@j9Iu%V05FNX{J0m@nUs_*x6@UfFZ}QKzcQ ze;g*{-{RGYEbXVh+z@c#Bg3D~p3SE_wN% z=qUX=u<80`pS&afZi_JdofcWoi8^IVy(9iMX%_5{1KDElh<{|Ieo#~D`$;JtLE@#8 zquY-78-?jGW?&du@) zq~rFk9@YZwr@HW;9k-tA>eA;_R}taee>Uu)5@;hWhx4(b?7nn6KC&pMG}kd5e*<)v zl+*?02;}kLBP4c@2lIwZUpsz_a^05wMavdKDD#EtGT)*M9)1Avc_o{7A~1DD5nN2a zq;GLNc#-d70~o)^@cBXPe!~^th#04?HyAV?J5~I&;qc?K{+IVYxRCtS!@17mD;dpo zHku;*35_Di)ClfkRq97jId>@M0iSb57hC&p54WI#tep7Z zOZe9_BJhvfM&X|qQzCfpqf!`QD1?o$)6#@@?t9sQ@L9Q7hmdV*Ph09)D zO4;Q2kgy>|=7xG?R5QIew1mkPAHkG}G-EO5Mk%ReH=lAYm7*TY~JA%zl# zBQ`+`E-bm#w5^wB=0kat%kwBZ#;69#D@pF6SU1I1kk!g;c0J?4H77p{DeKu_Oi8+xNJW+1LawzOM)cFH0r}M#i zF0<{$na-g{qT)a(#tAobEibSX*!wWIY;zBSE^`w(IUlyLbZB?Qfk<#K9etz=&wx(9 zn0O**395`qT+QjJ9fNj>mwFmBW1oR;k>HeX1h6Dhan=G@(VMkY?|sFnq;{;Co8IsnWOY%T80^!F?w!xStf)rkS1o z(sz}GjC@W_Z3U?+F>2s{+hJenG@lc(^O;UGOlVKPW_Pq!@D; z34TprF4U+iAW$riZ%Vm~ArkQ@ASjU1o^JAH@|rnHD=9fmQuvT=3b1|KY)`hW`!GLu3Ta z{Z4^a@O`U*P@u8jErbZXA((-9@D5kF9Ofa?0(6@Y@;-WH+;O~$koVKxYVJt2iDgsq zKJdOD{+Lkl0fz5W(ZPD|NOBYIcyLkfh|9y2iluO;+>wDbZdFJr6o2s=Xpul0vZ?sPU`02q?y_#2;}-nDECkw@Ue=Q7^N@Gu8?T^4{2UVIUF2g`*(A6^$C< zOE$qq$TAjg6^(&c{T@v)5*Gj@umG@{fFlPoE0q_8wOnOj3mADQ(m_1pnW#@G)XVOQ zOqVFyq5ngxSn7gS0f&?aoYpN~B``_81Cv#qFtj~d6-XE97|wm85N@Rup)VDpA>1Yj zr(31HDDCw^xXtHYD@4OMTT<>eoGKMK6U;t|ezMJcD{*ttzAM~T`?A$)-yS#oDqY$7 zYGkuy=+(#?vhCHd*y+VR7?%61DEA)kygSRXPVwMTwGsI^;&KRx+)p;Ck|`y%kfllK z|6q+Z1dEE$xpB(G?00`|1e0_-^oJGNTf{>zuFA{|N5LC(wt;N-yXtwra`pq8wDo;iAt37e=?Ol4Y))No% z1|R2}T5;mvS=BqG)ml?JwRp9b@N_n5NT-&u)()N&qy73CENHD2o$@6G5$U2T#=xhw zuw&hq9m~AjLN}M&9Ej^DZH_ITn>B}p>KgVi)bFD2cjAV)SnhYR-0xz!-^Fsji|V(b zzsR!A_q(Wm8}e5H+xqQ?!IU77Wby(OiR48OXeH?!)7*l=B0F%Q2O*};e34@|YGUEf z)_4b_Bt0M~OKT%|!!pxLOE*^Hn($0AzQ{}DrpZw_q!@sgr{5}sD_H>8uoN{cT?|Vx znT9qj*t!r(Y#Juhi(yIVnPD;H*fdP0T#BYn4T~Yi=w9fQtZw*~WOh}4#Sm|k-3G%Z zyA8hmN&=BzNq#vcdixc%u#?%&Ni_InzN@on)!m-+XvTMY&Qpw6_}-dfi=@X%TYeJ8 zlVGMo7*M@HvZnHn+~Zve&BroZDhlG zwwA1h>r)M`k&%aMw8b79a1#i^Ln6I|hve6U2j4Qa3b^fRucTrES5h(Qo1|g_Oj0qy zWSvw@x+$sX+aRWgR4l_yS|+$jdj&UXncyZ61ULD$I%%8WfmQ*xEp6}hNb#g^f}8YB z?M?9D;pUCj5_)5vJl`sb+987cR>23E$pmc&mf-WPo$+&j{`E{eN+}kh@%R4tYnjqq zK2wzpi>oC6#!#^K+3ZKywSFfv6BPzC=_Uz$ijDBLsJryP=b|D9aTlYu_}=O6j$AhR zFUKrs)52EwM42VFT`um$Y4UKuj>{RcxCYBs`9_#0Ub#!3$cBNYRHaJP3ioVU31z8L zDbeNH;yb6iTQa#^E(;zCvglf0AHT}+&@@2NY=U$7DXaOcTxB{QLk98Q*@)BduCdG@ zjyCgCaVF%J(0~29pXsiht!Z|;Rh>=#1W;C5S_^M4m5kY!vt2r$%+7@D$PCHJXo#M(9T^E8dt$Yzc2xcFj6i|h!YDFG}JIrBw;v{Irh$X zKl4xj!#7|4_5UYxC-~_Ub7t48^h*#uP0f`483BT;k!T4AjT6aZdZD}Y8?5_=f-_NG#~X#=;C!^nRw^sqrdPwB zgpN^g?O?(6=+o_1vcJrFML(&8R-az<>24)cP!lk|XS%yRpUl2I`?ufx*uPOD;y|NP z&}C|`J{02L`K_-rtL`8X*W>5;eDT{#(2N|K1}m)o)a=st1Gq?qZj$D$)WlyQ<*^5e z$S*J{knr5hhxAz~a8(Bq$}@AogY9WTn-?ig)Fh@`ajJ_>U~--@dv;obY!E=&*)EtR zcLGkyVi-_E&5mzoX5+6sI}K7*ClqP7QR5@jWH^`(YMAn{l+LR;-ze`Ww;df-8|`4> zltz};6X7<#8KI??ub`HgeKo9Mn-ZgbpEKe;V3cf&9h2nLkf2kp7 z=l(R~3Ds(I(MKWrV*Ky_6$HuT@}W3Kamq-w;Qb)|(Ir8e%*f!@H_Plz38sg0vESgx zjbAo;DQc6F&>j35pYvgs9DYF!hMYZFbf3~$8m?rxK=wa9=|d>{cz4DE>e8 z-aXE)c&-_96r+e?JTDu;rR;{&a)vBs(3y7jW7d%X84qrYLYy8+-sJ9-;%o}+i zt8U=Ia?tfWkdqLc>odTZh^9e34Ze3`cQ5cgF<8-JDU0DU2#2 zu!I!1pu^HL6S~r%#B0M%L6|*$_-gTbZ4$N7;8B6*`3@Sa%f*{JG<!o`(yAZ zE66xHh79N}JDk)Y7u5orXEc+>6qr(iM(*J&A)z3bfoStC7 z<2JU9W3BYuayMrm#x%viIS@h^$%)9bo?c^Y?7UM-Ms9K4l{JXRnuvNusM;G*(E%iyx|1~2FQaAjXc0Z&n!-rK*QJlT z#Qf#VhRi|Dn5r_|s>)cUDq|Q|RF#R{Xffj~E{ial)v7e}GFi6B%j{EC#>(iiBARgl z9bj26m`c+%psxffOi+rWntbH?io^-mr$k(7>sg?s;n+4Y>`SA}U6%IkOPX{tf=&8` zgi2FlD0Yi)=7ACK=DdxEfnrI3`-R*pL^5WI%Ur}2?{!0#d;&0M5`+=;66JNrQMZVt zZgHYWoTwpABty!mbXjxyh$z7gGc@*-Y2MZpA-kFY>*u0*G&U+P-qa`$>)a;_)bcti(P^h}%-JyMxpKY9k> zkGIVv=rotIAO2EIQra}MPm*j%`vYzs8XO$TwE=OQ`M)jxIGOgkfcciohlS@HoS8C{ z_G@HFB8g>c5iK7X`0g-E^&`U=GR#dQqctv2(u+9bo0mc+u{fy=?G}^9mkvRgCAIXD zZq(9SP>Uvt9njJ1sRi1aPc71Q^y>zY5Pc}|8ioTyAp>AB1J_V<8F&gjbDR`&RI||% zg^Z%vFa!qPTDsmh8zSt>n=PAfU*7Cq$stkryk=_{tCg*!y!BYoZPkLB(R`abrvucH zVJCNqzI@>Iy8&s*47^wak7TI;Q9LBm|;=7N|Sz(Pz2HX=P2XIc&_g~ghPiE%7qDyf4y7h(F648?ht?|zo{>c~ z49d~p&CfdimY+)10?>@-*8 zw;4%ZI4d4F+;dxa2m|5?42U({UP0w{CjP9OZ;u9fFq;u`5*fzKFkEcv@FzH3CtHRZ zOPlKlvd_^=R38Hfy~l)^2~SgHL!JyK6dT_+o&Hn7$j&m)b6z85p(fiPXCm7WmnEN! zYa3$hnLFYsH~fX9hnmzTql;4itva9DVMejqO=?arLQ+-AI;e7TE{q*QoVmiKLw)2D zU1pD-8HNWFx+{nJWN!~8nV4-Txgo=I-mo4TMiwletIj~*46k^&M5el_nV)I>Jd-SfDE&r$MO`({8m>U+Ay2vQJXrwYQI)u;Qf+nU|l<40|lU-m*@OQ>&BBVtk!Ep6W%NYQ9e1 zoM?D@J#~tOCtoL1O=<@iKD`-_z5;6%%)cJ28RmTr;VaPIe%KSP;`>qeHSB5!_T%u` zBLuX1S39Lop?B-8-mT{uh4k*XNhT19H9yire2w}=KHCabUk~*eRz3BBRmfjBK(Yu2 z!hnl~17CGNh++*Q&?9TUI8|j3)yxWAW1S(JZ2l+gCbB^{G@ha`(s1WHKJuf9#H-D2 z1czjNBL&2HBMA;VTB*!mYBC*4L8>!+wEi*3!T}Xb>c+2-ph1d$%&7Ke6utJ51x-PK zz+HO9eaJ2^A~jB+Y^*VYjCQtu5r_IfymeN_)<9H&1yyocj5(w6qKt3+3TL-aJsLBE zBdj>In1@(rYhbRpf_wg4eZR9wTvQG)A0O=pkE)rh`gJ{;sR@I@dBQ+_n=@q%{y@W-QSpL{;s+XdmbK;5bh3PX%4K3<8TF@V59}+c>eGvn! zeKvN<_u5Zw=g%}>j?=bJnOc)u{;BdJ;)_(#bgEv|$GN$Ks9{hvCX^~H*1Cy-B%%-M zD#!|>S(59;a4h;mQnb6&FdAvJf&>{>EuZ@`c z1fGg=rLQ1y!qq{Huw}hmU-4S_&|;7zi2d6&kuW3_(mz6GW}8Qa^@4Pg9>bMa+Q3zB zfveswxMD;b71j$XEVJrLg|MJ2#rX7SK$G3E#%^;qLsc=6M|@Gk+D0Yg%$r!i}<*e7vtMy67nT;3`l(9Y2lPbgP zv+zW8elc=!KSo=wu}b_{h`U^bPI#g*LK}ngsH$X05^<+J0_ka^dXvFOa$}J2Ho`5T zpv9pYGeH-&Dr)OrlZtmUmPk@d?~W&>cWW0u{f+S|r-6|j_SV9%>D|mfN<`(#ycVgs zux6%NAWBC4lOoE5j3fr!v@$qT8wk?>7@_(H#bBJjQo3LS=aV$eg+)2Gl3qh-Zy_xD zi(%UTog1biEx|Ee?%`BO{SK*>Tv>LzUhfhl$y6?KbFUN?1Afz)h+ z>0AZsR3xMWJB0BPB?^thZIMbDy&G_NW^mMB1O`{7x&oMfQPm4}$;+xOU zI?)Nn*pjs@W9l}&?dU~;s9}1`c?l*tyj^F#zAN+^EMS+?A&x+ z&vafs)e@izZfu7xSR>;;vqg8Niw>ntJSRpDaYFv^^w4MSOotDpi+Nr2nLAOM7EL!l z~243KxSyttTGoW4ig=$+_cT#|)R!PU_lVSY6%54XX7Yp4xY)j-;j z@N+(HjL9g(8o5O*>BU*N-}U5%4s=`7-B61UeEBXndW7AA7{>Q&1&Eo!6$7=~RCjWb zW=B#E#(E9rlrK+D-E|}#rA1a{r-l*8+h+Arym=@cR^f|2!=loNp-YLQMIyK!)t93rdYr0op>y~U z`1PNVgK{<`A5!H7I&vquQE}DO5&@b%>*yCGV*>7x$X~KmH-V8f&Ysh3f|(4&m_3`n zlhcyo3l<|j7v2Qm;9jN|Pe19QwR~UCp2|ZghQ=d#Fo(+hKgwZ+mBfZPlzp`+{hDP# zqRKLRMp>j0hdx2_k#V3V>qWZk4F07Xxcr#lOGI*O$~2G5w!~Hh&7Ouzo~z^X?Q!S@ z7X%?3K>M|RETpn^sbUbT>`zIED8T2ASq*JDd^Otc zVUUAOS0vu=Y-y7zo4gDN)@gbgqA{ls5?>qR#*cgT6yHAiRd0*~MM$M26Fe$~6f@-&c}cfvqReGifGwyNW^c<>Y+pygkS-r{!0c!El6>6;?9I(|Z6uz-cxA2UwYnlX$M@AB7}L-F$0TK4C~ zYn}Vk*g-$IHvjUkNLbVQ(q3cB&t7YmpS{+zKQ&mnUTGB>XF|p@Gr82V(ph_#52e07 zD%oBm%gSD34)x1pYuVoxuXT<9%wv06u)VF!8dhv-j)Zx!krnImVwF`=U?_QHMt5Y4@?J35YQ-2yLL@N* zXr3fK*@kkEW91~hsomrAq~f=Y6URVx8i7=0 zKK*v1at}RxN)_)U&|6iHP1`RmU44bt*f&pWYzg$7$FSJ``f5BM%9K>*Nd-$gh2ng7 z+D3>%d$4gC)4hw6CXAxJH@h<{yf3=;=INrumZo11(=`|^9ZB!5h_#a_4O;jAPFGmu zr|Hw{sdC6f4oh?Bnmb~ws0szl;jl_C_HUR0$Ml9Qk=Jnp2hny-l!;zjqr3MJgsYj? zcXrHSTx&opdiaK$b5%i6=%efuYU!`?R%z3xnVgVXv{O!E%;JL zgMY<1fO;frvZ-4bJ}ih=TVX@VGlH5l8KTPD;E zfNh^Md;`{RWgkXly*O|lxo zmu8_OESaFDFh*%u3#E_~AA@qtI66uL{v`_2t*>t78(_oQj^-x(+a!nd`#0G2a{q<} zZrs1YxJSjfZAqx{Wh~@4H_Y91#}Oh$tWK83XEsF>_;jub(jMjuJ=uwPHoJbGTstL} z=KsQXBJW-|_lJHXWVkg5vY+}b-S`0n&}4KB9pkc;)jF-# zayb&MWQ_HIkU-F^+`O6fB(MZr^S5wXGtW@n&On7DSqABq?a|9Jk>ODJf}SAdc|9?z zo(QvkKK#$M6h9jre5U(%M6c#)ukgfj8GTL0E{v-hu8;cnSM>f6?^f$t_E0?2yoY|r zvmX*wt?|XM%>}iLQ^kRM+N!SJP+m_)e%bFRZOo4QR#AHPsDFj-vxohwsPJq46~CP9 zA^(cctnP6VGQd@Vm&G1!2`x%QMVwe;gF=@V?iOvDNLlh})l7PULv< z)dro#`b>!%=m8=vs{!qZ&R$|jEz&de%jClC3&i1lpzAZL>y9VT1WrWR%iqNLEyu3; z5@dh&O*^$U%wG5=J6$>8eJ;`|t~8zXgE4QsCG;erMR_R9Zl61XDg32x3R~QZ>CMSn zFr^INKiNHe0McS=SS+Y!_gma?*5!1@fC@QgF;B(9ob`pWdPe{4!jA%;FFW1hDd`lO1@XP_L`z}5a;)-Uvl zcDAyW`GR2156SpOa^flhx7rVIPW^X%)}K0{U;B#H+4u8mM|RZgPP#!i>f?_QZ|8T^ zbk&!V?`u$x1QkAI1M!ad4+2kS1E8-rN+}UY&ov&$H-I5 zK7)kGIg32|jBV8SqYD}d$;n9H!G1Ydc*ZjxzE~nio^10M%9CZVk1*a@;r?3x&@T&X zqB+*Z;6SttFGV&=Sj23$dN*;JI^ZP6I$YDS=*Ddta_n|JSK&IA$@Qpl)r5Iv^a6}{ z=Fnla2ee9BXe$j(JZ94u!@@CSp>bzE72aWl&A((sPQujvdg;SBVJrMlEccZWBnnc3 zHM+dlCqWYE_q%`Da>p7MdlV42RFTsdDGz-m3luSHe9V7!3nPRXSG@FAXq4+c7R%x$?IUAs{LB2PMz|dub ztHyFgT4+IhP6&on)SEh*=%}6yM+#p86J;vjgTK)d6JPBf;Tc?+a6_6tVZ4 zI8nnTZ-_Y7N_(J{rj#$WQXZb~TXx4v1Sm3H2*D z@-p9ptmRN0aW87ap}kKFq+WC|$1--!fV#TN~LMLp>)(IK&3RX6hY=@%M zwM;B7)R0>O$e7Y_*%0qcoO+)-_0on$O(vaMp8ix0a~PABpn14d3G)=Vmr`oY!w`zf zyn*#S9#oBt-RfJvfL{P*afd<*MPJ_{uj1Sm&V3&B1Ya0m_JmB{L-`6=}och7^Zw6Xts~ zslit;>DS{OoUPj6kdFp~6Zan-$=|23YJ-!>w;v|bZXgPFl1R~*ZO$QOaJS?8QV2;d z+33;aG>wLarf*LN)Qn?dB+@MkiDXq5k4jwLw0|keLVqhH6DAN7M9nq{<=l?oc6AJ* z|89xH?EHD-bn{I1fB(d2EnV#0*wW0eQ&A29D;H~}??r*|FDY?i ztwY?3=~*jGy2V=k<~O+*;RTJxr=6Pe9AlZ!a=6Ln|FI?;c`q^x> zU^W|7XRP?CGUmx+=d5O%fzMP^9K`4@w*;x1q#VNn6MdMOWZ;%6W;GjniFwFkmMLZp zCx8<3pv72?M0OkEd%`3kGu~h*gkWRI7sMh{+;Yho3Vuks6NieiJ;EhAW6bZcS~IO( z03&x?D}HKxDTRdtL;C_oowxWX)ugp}E}E|X8FXPe0UGI(^?N1UX3vWtIo~1FY!P-I zn>#y|*Lw$ErLJ~1(_?KRnjU8lgA+I7FVgZr&H{N6y6Eii%VwKc!~|7h$RF2+Pm*zb zNth0^S;{C=!;v zf+^G(lUOJqus4IamVofD5)eu;^jjwOreT~VWFcWR0u4R)J z<19w>?xg59un1u;qQ?W?N)wXiB{D7XVIo6CpiG^ALrpfDiZ?u&gS^H&lkiUUg2Kja zlRp;6PU)Uwc1%IP>lFW+8{DtW<}%>0+yaL&4?kggjL8q+i3-=OJ|fr`5F=#1`9u+0jHev!hGF+^D`7(Q5CR-c5T>TBZ9d<%b#;F49cI- zxD3{^hDV+`N#_^?VWgJ$pplxnV?naxE!152O$C!3Yi|o`UGc&v)%*>KdDm$3XW2E@ z9xGQpZ{^oGC!^hmSD4mrcN*PqlFp8_aXp&?o!Fp#DWv2MxcNy1=76h`S}@9F)*tH- zWe+pZIG3;aH=I7PIe55E(V94FuwB69H1%#j~1MvO>dZj$=PKmfV*J$Of(XHu#P*uA)@|W}VhKKk7SG zpk~D}I9kQQSakwQZ3YKZRnw2V0nL;Nb8By2FuLKZ(01`_XQkCSj<%VhgvWcrtHeLI#2?xz3pt;sN5 zRd>BJS@SBm(=fYZF8(xoe6-bO={tu4rmIZXWwTIC`?QAHV12ev-aqsLR$|9NDB^L0 z@@yAct?x{|asyfft)+_9LaX+sj!gI8CXeR;fBrACqv(!96yOOA%YZ4j(r@3TqTTSV z+E?|WvV+SP7;!XM$81#h9^#$SwykY_4YQsO?w zWR1*b=g6_p?pcgvVD!MOdQ_rn%{wW#`OSzk9>uDJVd)3W&P7O}Ez`PEvTC04T*2F4o)#GK>^QJ6FSdP=i6^(IPBD}Hz^*^(-QoC?|`ycF- z44oze^L~Pq^L9aFjchxMEo#4xi(uV=-7y-W9)qk zGKO(hV&$dyj#8SR_3OajvIXiQfx?OebYj~mWkex7*f7LGAR-a-k+aW9DE>)#dCm?70pVk&o>7>s3j!TVlKpvbupZu$_y5}j9l#rwY?X|81Vh6 zgQzO79cK5_a|hWC$vez=7>=ZEru7VYScAI^9Hsb?>A40*0FDft{?=;X8*fEX<6HkT z@;2i#tSz$6Ly=OUho?it2Ml3De4}c$HM~hPAhZaepbXfb0Ba>d=fHbB@b$L0D|;F{ zkqwn-8iVbl!sUzq@kz$e!%cbEMV$cdMtv~=dGazVs?;ejW6GDY)3YWP!`nf2d5~-6 z9#qPSPuv0CzS=;NoOjoe$B`5Gz`b)QVo*g)uiR+!tMu#EaGM7IhImrlmfg?ki5in) zy_z^{+>7fn_^YhQKIiTqQLW-5M6fCXDf=w* zc=1~OmPypKXhXqq{5MK?tR|^0!#?VZwa$N+XXc}<0cd5zB{{v-=?J)9DA6!cvHgbSR zrG{_goLXh{r!iR?<1>_a=3QaJp;V>$Jh)(CNGZuE@!Fh`$x*84CUR;aN%UkAsTJjM zj96+#K@=qhp~k$IJf)FVV6o^WpTK`aDq6u+8rgC4Xe}Mq@Iksk`f>JSpRl3M3QRu! z8U^EEKrvpL^Tw2~eXaTT@o`p&LhE#u@T)PquM6q-UZyp}8i56=(w2FxAb}RQqDq4H zUqHSoXCxL<4x-4LD!4Miq@Smho>q_Ru=5Q4J*rX(Lul5HP-8VkJ z``m)=^Qc}(R#Xhl@bz~{@ERQwFKk`s4mmw^R&WA#ew-D!Ay$PZQV^AkJWc?()dxmLcagG}-B zo$Zy+jp^I$i3<47ReWV{yXC@RbJV}s-OhluDrx$Kn<{LNqrM?V51}cV?UiQ+%94u% zHLwhuPv@J8gX!BD<}-&-MZYh#3)O@w6ghm&e8K&+Ufc&MU~ z2eQQ2awv#5WNJ74zjnp{pIssGb7GMl?8;lRJ$ljfTPXot_ic)?I5U2>OaOjvbJWL$ zQ5xzt+=J}zbRrX-_*>ulu-V-X3dxq?@&Jo<1N;5@eP7C0n;;epxgO)~=+AUTug`8$8zpGz1}DwDHpxv29N zf%CHZvWWwJa_De{tl2p-oQHxq){GF@X1kJElydbnL=*>!_snF9kESQt2OyJ-?2KEo z+CGdP79CtZp@a!ZZE6Gk2cW{m)F4howvNRO*`;(aFvc0`asV9A$l3k-)JT>KEVS>& z`Ar~YAO?A8iA8mpYF@)Y^Od~a>jp5HGQQAQmYKB5LDs$yK)y$ za-l>%Ag602Sunkg=Vz3oF6u15*gNcvWzx~PMTeyej!~HKEjB}0Y)zAeo~g4=^Q9da zVm+UXwAK)FQwI&G!47l;Ly=1WM}>Daja5+P1Z-I?G4C3SEfPSHA#urHsbZ* z+)l^Y44NjEqg`ucFqeF^$1tzZR>aBW@Xg}8ER@kqos#stI!E9_mQ7GKY4Cl<3V`Ub zU=LdOY4sEXGO*F8p0Lci_Jpge7hs;z0k911&hA$u55PWiEK>UX+DLCW#o9!9ZQzO} zNkAV=*p)Z5!s28;xM7|sERb)}#l}LYzo?)^vDu5B<09EwwCnwnB?M|3tr{^UQef=` z`7*R@sDM63%pkOC;|BrQFJ{)+ff0>0vQsh@!=i!}$zZ=kP#8 z^n4pb7CV;Ng1lb`Gp14hK(`J(d!Z$=SW6Tg(mB64 zXXMwsWv8g_@MUR@=_3t1pzC3JvX}WrWPu8M2uhuxOB4l-LbU3$R|KGcB3tk(++H=I zl$VM~=_IcbNP^h9h=Odyq5Ibe^JT33ft(Z{#U@mSAEYei%Jhg%Jy5X0XRIA7>|g z=HnlO-X!BbyIVBNELptLxTd5sj;s67-FV1V1Z71J_Lb=HFH}-Qus&6xCEE(J5h*2T zO$SNj?ph`0EL0*J9>%^D++A~?5^{lxCM{m(p#OBJ4tk@t0A9lZx<+mDiWGyg-2v3F zl#ZnUr6^Pf@(^QcaVOdVs;&^vg|V@- zkX=zCXU}TgAMJjY3Tx+3@rzQDvv+bXShiz9kTo@ON|D}dq0y}unxLkAUTas{c;cNB zSWQyLM4B2gB|r-#JeCGtPYP{T6iIa@T0$7K-~%tYZ9>>)5t{d~|IW)5$y+2C6C*X4 z4XI>|kZmUPx5P2pG4oJanl<9g^A%-E*>{k`jZBjwwpURtO^SS{plV9l_A-T;C`Va} z_vWf7I+!x^lOn)kmT|mL)GDyvB6R~@>s1i)l9)JwZuaN0D$3rGn+3N@{K9xU}|Hl^=1JeWvp#z4*e)Xh+=sTP9@BqIsK8 zYhRUV*wA$JAx1H1PLn`@StejoDE%4L%tj_}Ea<2Pm{#(+8zWKPsZFAaxtpvJtoe4H zyD`DAxz0+4MLBmvLGZst2S}p?psEdmbJdBtg*;MR$(J~odz$N#1iac<5-^qZ#s^kOa^ph{0rHtiC;2%LFjg-vZl~HC+snN-VT( zX&PAYNK1|++&bH~=xF1Qm^;1E&Dgee3;q5tKK(TzV-qGB0M%a*j0ul&hSkxeGw>fa z#A^=s+}d-9^Ku`O0c9<0Og_1sCb!~)i{uCi}h@@AKF;;dTkdTM)fQ3e*`|CWybe(=RS9&5eg1>=W}SuC$Z_=Vb&k7V4=CENJ)ZI9OSfHgTaEy~xKov-?RsFHTSLtTeq z4%_Z-IE z`u6yOZy#=b%U1p@NA*Lz8uzScoD85o7PiUl7}oauV1K)|&nN7hg;8)0ag;Y^N=kLP z6&m~IhKSR$xL^!N!>^~4kBa|(t9RdHZw`XF!|&HMATS;dMgDrap<7z>>*-nD(#F4@ zZtRxkzMgLCmNxnIbn}8VIbPPYpFsPmXJ4_y*>vs!l6`CNP<&zVW7urnVHVpM(*d12 z&eG`cP90}yboj!KlcB9c2Z;6znLG`-ojL@BTZhmw)**C+?~oju>IM+LpB@o{7xc*f z3RXeg0)z?+#C{tHCCd|V<1?%?(j}9H>(sMEt|AgY)TQMJdWOi=L^4rbRz$jfdwWVl zP;;o}f6;Oro4*-bFDQ~7@6BVeY=A_o{yODCr?CDbtHfM8lpSYvnp5UPI7(uFZT4eq z8C%Iy7R6!4aN^uBzF$egW7|xU@|c=Q)}V$NuX~yGJ1LS4t-PajU(NnO=AOuaON3kf zBwO;=mo84WwqCcj0M2f`p3{0gw~#Wnu9Zcz91|TzF~97qM%&#OU!QEzV^4Cn9@i#Y z_1Kl1qsPwVTs@|eZJK}bcB2Qr-UILPz}I@5={yQ*ZfpAx5I?NBvpX}cn%mNeYt^^~H6IdzV{WXmT;*Ti z8J^W>=UKQ)^oeKnwezgLiFDB6@D9V`%9)dnE*TX1-D1yr*ciGPew7c9r3Cyz8}PAZ z1pGl9vIcaaL{CSaiVkWQQxrlHEIqRqK@_WV4b_bWy}{|o>8TKU4mmnJ(w-+Gn5B!v zF*mUnz)yxbvBV~ud17NY8UmP_*!}9*Wf&R>mr9a9Ucjap=|f42oLMs{nYT$JC(6w< z*&SevW}^rZU4auW)-v<4W5~TGag?ZaMA>QOK5CAr^+bUQzg2}9sJ*?S)pZUDqJIAN zL2I-PQ&mdCw5`z^$qO1y)NVEe8rh^DS{ zQXWVM;{Xy1xLD9(j)fcwHYA5Wq+D z1b9yIq`!iRr&JtYQa~=+JO%u`o&cXvJiyQDN%Q8E^D_zn{FH#u5uel(1@X9^;Q7&- zYeKYX!xeI^DS0-;#_q`Q*_0$3cP7g~dDF|XoO(E#u#hIAI!~sen`ao4biCY*1p%1o zl3g%HcSd;yIq0kBz@wmC7cLJIPusCFg(HD3|PX6&^8Y&;Y3KniN|=dRZIxH zG$c_vDQf-Qgj0Vv;nXiVw@^QmaO&?SoccQpr+$a>u{D_M(UD;jUO0WqZYA`}HNxox zBr1jaB|TB7U)B?a`UO4Fn(cHy*qf4V}#X+^tmS}~EH>CWUZmE{v| z1;XhSWi0M2{pdu!(52@P01{43H=0v&!;Q9t(-47DIE@o%2`8gOyexArCrUKk0gI`) zT;r|q!6C_{ArUH8Rq=ul$%sud>wb{7wh%7a^&tudwZXu1Bn#0{K`NFN$45m~*6ddA{>1M-!rSiWN<@Vz%Y4UxgW|2^@D6 zjl=Pfu*T!_*@3uzE_XS&BQR;JqI}nqpSAOgSi$v`aIEH800$4c49uYxG|UN0nWc6D zPamC4C&;qiurmu#eZ=%kHs+t{qx`DhF*l|zt0s(f`C!bln=j!e5tns0sMFNyUfK!W zChjC{C3o|FS>n#1AoccAJMv0WZJApw#Pg_NSTw-i)94ENpV=oFR}xdWL7S@w_G+n_b${7nVq3xdC2BU1`$TZMD50F z0sTSsW-GZwIBl}Tp5dtOso2B;>7rtk4Dv5%Q6EA|OiNHR!pvVjCOrd0pa=ytp{QJ_ zAy(&OnKgL?re|mbV$6uKeL{={m1>eSU)|yaxK7Fza+;hx8EYoaf@E`z6^UK7HDWks z%#i5SJS?iFCon7LybC5;{wgt9Pl|Z0l@`i}N#IxSfY`0214itoFvxnA>kPa?>{O?g zQ@U#7)k;x1S|)_fF}^KAw}26*h$aG2M(E1OuNw`t2;Cpk!7<@x@6YMkXpN89#m1Rt zZjoEGFkw-b4;I-6jK3apsSO6QpZ$Yh<6s6V`XCe5SN@oTZ|-GtO7`@BAsVkZi+;9< ze)7!lvmx7N{jac%_ZDSi_4ht!awd_%S}Vt-VsnBg1E9cpdvQ0RWmu)d>|?Bo(5(^X zZEaqrGqbP5jqk+2h}7r+prY|O8^7hkP#w*YwCP(!_)`>CM1F7VxdgeK&m+T`-tBmLUW!n0>dRU z9=p%pLvRiZ^Br@-_YqGMaVArp@{`{rVvnr=pFmJyE;v4!bE8Nq3%=~fPsDV#9g412P<%xv(pQ~RWU(s~X3l2I(8Y zST*i{5%(sLR*3^|MToNlg6!`Bxfs;V{WC5KjhxW2lczhu-Mq-ZAu zUgTdA`DV~JFY-kqF9Cn^BL9NOOF`hgNbK?HWnge#xOQ&X*GX}7k(68W#_%S67xlMX3CGKZ{_(6l%L`XM(-lU{Kw^5H}#619n z1>|&$&uzM2DFf~-J#;_f&jDb8n+a$a>;a|pyA68C!TUh~EbwsxzX`xCO6hZxdaNMs zivU>Q69k?H;Gj|(?o2%yYyR~|(BJL{ySl}=L7P!(m!%F1V2x2vnEYzeHxSbB&8cron zkB7q~(ewT=`II{Pclq>=(A}Z0VK~Hmo$rn)n0}UZ^4O)k?j?y;Hb1V|))=_CkX6Lh z`r>x2rndv!hR(H0>4)(LZcjesdfXXGzLj;w_T(QxUt6ihR28SuOH(6Hus^3(!j?rOzpp#C@FEU?sFr8o_| z6U13y++C?S4W&OJ&H^jk6^hf~V1YKZz)H7EaU%CWBhCV=+~tZB{c2ym1)RG~aS3sM zL7WBN?=Dr`cM-?>Z)$-LxJwjwJ#l|YoCUtyy;*VJLmW%SsRcghrWJPsaeqUc1wQ05 z#eFYvFB4~h54)X;yHUesPx5_wJR2r6fc!lmJ1x~+42X*t;xcfV`!FivjqM53?n8{6 z?`=haFpwA`k3A-GNOKx?0 z!WAqT47fAe6RyNwGUz7S6RvXO41wkC30E`k9Cpjv6Lz~X$bLzCLh43E@a+kK`#wm0 zW?{k}`sRPpH|i8f_)U6Ml~8NO%s`XMu5dq2ffspCZlz zE8GQ&6A5EHPc5+0y+Lsz;k$^lz$!PTIFayC;w<3Y4#kOte~>r}yx(nCoJja?;w?TZ_^>-$aYn)iJqf?! zN%%(rIond*b%1mt;d8o?@VVVc_`Gf;e110)-rkLbcXT7+sct0vhHfN$K{pbG3xARz2S8uGQmOca0v`xVPx>78Czba-BO8y3dC0PRaUC{l5m$4i9_F z!ci8uwT?|!?wa<5b?#Pp*tP8m>)j{eVQ+0uIMaPUJnU`l36t&<@UXYHCv0#ZhljnR zJ>e{OGd%2_?Fk#*K6u!>+7o^dDGd{Q_xzMJmV)ycL^OPC&w@10c?sN62X9i-|HY39|4K2tw6p+&JJtUsR?tmbrOtc`U3P`E?9?}7Miy)<9v>_xJZ1!;(= zF|*k<+6{n($D71R!ghuk)ePpM?3hb^@Ik)sc8qnyS>72yZ{RA5GSoP=oM|Z zctueyUQ4$`&LL~XqE-|DXaqiA^jq9(SjYfB+4FM#(`zI+c3bPgrfoeqYdHT{kDWer zty3ND_Q%!PjMc-~^w<03*?gQ>+F%Mnu}W)U6prbdPhzH7d@C?o7&a zXi*uHe1)`qk}4^8?7F<`5&_qvlXvBoc02p|v9W939H}*!8gYFPJ=6KG9PypcZ9mkX z8pS#RAGDJFAKQ`A^PxU3r}o^PJj^i6wB>V55O#8&^7!u^ARZ7zttbVHPg@=j3c`+0 zRUUuZ0pd%7=qd8Rl+>2TLxQlQ{FKN4(*fdZf@l+|92W$qQ~EsqM+b-}1z~4es-`b?fOtv}Lq#6{vjfD_f*39!FxR!!;~7D4nzygV zUv+@^h9H^+#7i9@o)yHR0^+YbKs+ai(E>Ta{9^}*R|T=6fWUg& zR*yODTbL*y{;31R5kaghAg~Iz<#ALHXA}_sZwCnO`HHhu1q9aSwmi5IEY4Q50RzW) zJF}3GV%V_4h(9ostuaAB6oMu8Y((s2PJA!Yy*;U&dz^12A?EX(Lx?X@7WzYWkwMz_ z62XUTi6dtt9J5~ivXR+=K-g#Yi-lW{ncSGmy#X;VOX3`bq%LKRC;|3a~coF9AIJ zn2e5B0VcD762Nnh$>_-{z@}`l1n|tmR*zfF+?EZM0G@YDMo(9BI4>J60X*w4FQQfs zQ`txf;5o-6w`x=nby3zV0X*ZFjGnCm?93LG0G@A5M$c6NF3Cnq0M9liqZ3ttU7Y)0 zbe88Dx(=*ThpV%(62LPJT?SSGxHel-0(hRm8hsVu9ofnYPq6F~Vg4@fg z0DH5QC4grZcBetB4mV|IlmMPr=n8~N5eKqWC4grY+|gA9ILN6qMPIBoUNRZo7o~P8 zGu&f)bSQI)KiS%Dmcjdob1TqD8S^p91&jj!2%YY;_HyZ|**e=#o2}P@BK7P{7>se-~;U_|w718;hAr7g-UJCHfP!H$kWQl2OjKUCBcc1m`Xxm>@|jk)bS?mn$zi;rbT z{s|>~BcbQ-;^HS;MDMI1722^^kf?J9^{55YO+9Ks9FsukpdPg#x~WGkh;Hgp3!QM??VcPVs>JcZ9{i}LpTJXQBM+^u&-~UxT z5@R?8_2?|G9&PmM(I&4RZI)7G>d_XxnR>L9x7SpUaO6AzGzK=EL#DYMOLum~1Lik& zKSf2*tcWQFb+cXtX8OVz+6+mZRjU?%G}THxu%%kPfNjZCtKW9v1(+~1jF)LIyQjl! ztqfOw@BfmkPzCXXTZxm!l58Be!*SBQCwa)WIsq0ilR(JZa2t_QE4|${VSf*1SJoek z9PsmET@M2;7FgZ0kewNazI%>_}LW4em|Ob7v&uUPYFgyztjnC{y_rCoZ~)Mx}T#P}Lr}57}idAaL9* z(M@Peve<5m($OyGvE5aEi0r8o8ifT8og|Nsx{T&k^O6lxaXIC74_Wl zhO@JB)JYuM@ipa*tUUNLDGvE*93?wl>&xGv3qWDgBlUy#bc-E~r>xcG^^X`DSiz88FAL|0Tz zhIJ~lH|5lsne68m?M;W+@d^N*S{`8Mtfh0aj<2j$es8*Hh9jNXpt?U@K9g!YD+YM~ z0d2J}w1Z&W;`;WceKXlld=N??ZYqb{=D`-vr1CT7!Uq322(-_+kcXr3`Jn$pJ_-|%cvRgU=`!WHi) zv%OqIQFDvA;^xbT_d2p)grCnB|0LKuGm|bZ^QGHak_0L*CsU8Gr42VGvaMym{{$a! z=tNp;eL|n8=H(~qE?rjg8-0Kd>*SZ^ZYg7_1);tb;rmb2bId{QR9@{;Y1&%J@PKXs zV<&>^*&4pdMO(t{^rZr;6j-`f8Pa>UV_5T7dRZkfAc5H;nDu*8_6BYZxh`T$2&18n zP#xHZ@oo(-Q0zJMz5?99vn3qen=WnTIgFE4k>^suoF$kPI#8frfoLzJpgc$EQBO-_ zAX{J2!$4gmsPp#Hl>}BQFt#_HXqB-NAG4wiHq>toHwk9#-gKD)oLRLctnE$Dw=%ZN zQPS2FTSz_SnM%cV?Bs^a~9Nvo~q}L zFl;WG$rgP)U6%!pzbhwr!<9?_cCj;w4IEj#n;krZ?jqNm6=V}g{(zLLF|QsHX67z* zJ3I|q#!Z|Tj6lJ?eL2RL{PCsvqUoQ?i1>2Afl4yhjbZ!&BIjscJxIvXH|L&@GXUQxl@N~`cPD$E}hHs?M4^LX2!3JY%=xar*u83Kj?<_};wcJo>Q<0W+s zJKF}`Dh3a$h-w|JSs|2*{TM!J0vKYU6MtOgAzyG_i##TkM<01`c?y>=TY(4waucxJ z(|Ij`U4c%9KIoJ~rVV%)k(i@)TN#?_hC}#3EgtTdkkc&Sa-7Hut>zg4WHZna^D z75S<*@~`K$sLht5`CDd?NxpNb5%;oJnor>r*fo#MMe{eKfQiij98n;D6etgWUW)=b z-M~}R>KV7#)o2<1G_b2&Ho&HQ^JBN&P3Ua$9=8^c(Mt1?X%x^$0sK*by#0AC3fNRM zpHpFIk<}&!m_LAJuIIG?-dHq$qc~*bdtW#8fwr>usTu{cof_3bd1yxhuSFhgFYvv8 z79!HIsC|;=4-T_bs$bWS24uXpV1>qO3pU5D8(Q9CAI4V;=0kUgdw`SpBzWkTc`sBM zY7CHF8jufgu>uCT#032h+nTjPD69LYfgH5hLlX@6U$S5n842)FHxkgz$6|`sKIDmX zl#d{e5I@=>*!8nPD}@@SxjO;auK8=Vdb2SIM3UOnHq>6;rrB&Iwe8WLD%3V0yxOM2 z6H%PASMV3mDdY20InMr)dyC@6wLh?Eot}16CME&YN;mRR{ktg(F6SV~%nmh=bT4G6 z1?t7_Tu!oHp#4hs;~T!h1rov^L9WxD{;MWLd{=P6*DOjSJ%NQdCle`+C=PXI3Vqp^ zP(ZO&lYJEL1W`~4ilcft${r$3*A0UG8T{*YfBcXXWj1%|8#eL}Nv&l+BlcKG=CJW?OMG0qD40ol0`KnQ{>gnrI7x~uwi6F zr*$PU$cA|VM9y?)amI4&Vmtkj>nL-c5>%c{dQoMW@+N{z+!|@F156WZ9GUI%=_pQ2 z+KlFBh@o4v*M)l-#sNcbz5G?q(7*NhQB)RTTN62CP{iJwu{%yy0>;WoxymcQxR9$D zOW~t(PPmYf7)ufBS=nmTy=O;j4*zg?D<*|GObR$dVcfuB{VXP}>v(0Vqu2Gk;uf#h zGkIlhrPoPbalY5<240y6==CgKaq-vdMqb%UqSsBlGV#&tW?tFkqE~I(VIHPeZSi6I zjb61KXy>fn&gShRi#x{!XGMFM^W|$DO z45f|j<~)vAGh5%#`fiRrfG~Csfl)`BMtRVf#XM+*JVvSh5+2lhDGw^Vj0ZK9k0@1K z&V#zG;6bG(cu*U8g;I?(cu@W-9uzFMkKA!h{Z>0*w0u5^+$87&+X*y_zzzZWnSz-Q;4Xqz zsdR;cR}i!crxOZZNzfXTu2k?Ug4WRV3wJL=P5BL?+oBp+~;-$<@^l-o$Y+fiO4`5u*5OFpRb zYRL^Mua{od~ax?UpJ4VV-mG}7pX|hG&;{-~2yoEqXkDnk=(&Iq_B|UyW zfs!77fIvx)pCnMy;~@eiJ>E*7q(_d!ZqXz6D7ENuj_Fd~QAT>VD{PhZ6!|HIt-fhf z9eIbsR^@a=;UfxrA{kcrPK7$mkub5 z$A8|av`^vBD(uO@D_#Qa32 z%C99qZ{^pLFIxGv(dEe<|Gg-~%HgtrGPb-_X)ogA>!FbbYWwWxH%_q@GE;_Aj#;e)<01C~8 zrKE#5JfRNiPdN{) z8kIZ_ph%y8%6W(_u-&tg4=ib&``~G1#1c{^BY50;cf)CA#1yTP5lr(;_o36uh*@1F zBe?Je_u;BiQ;`?#9!~h#6%iBjm(J_kE|85tGnLMhKowZuYb?V&$%q5t3}P z+k09WF&D06glOF2K5{x4RWd=&PP*?suvx#^TM*)=Z{6rFS2zEjTRl6je+HJ#`7pK>NU;W>|nRa!YF zp7Zuo&PdGb;dvRM*R6N&IIWC0|D!^9D2ivgcb-;8m}e>(p?Pj_?>?=J*uz!H2vznh zx97AnV*6JmBXr}9?mefK5qr=o8KG=%a_>8>jF_cWGD3Ub?5;blj4<$2GGaQg#l8P@ zGOA?4++xzb>y$G=ZdS!HGnI4QdrvtRMnW|g<~>{8cb#%BOslH7FpJveK5)vpFuAMd z!kp}Ecl{~n!W6Tb3p2cP+;^XHE=+W*xiDWm&wbA+=YsNzx`V$42wLafeBZrv`+_;r zE2J_@UGFaGl*%46$DH;|cWI|ocH}u`z#H7X0 z%*8jkt2(7VODZ$>&F<<>sox-#PT1mhcSzO#`$>1%!jzXll(yfW>#kgwbV5nk8MeB& zEKGVvN%YhIo!or1dm$~o+H?WTd|#DFz(`NArmSqCGtDe*`)z*+KNr~bH%bnYi;3l z-;S)0mmH37>$gP-4i>^|GTM3aU+O~z(!R~?+wRSrUykXWktw)@o}Dt2aF$%Jnw?0`mn&EhbHQnDuD!f{)5W;d``hK}31>ZjY8Mh$znA z)an*6Xc5d%Q%7k^1l=DOdnsSt;ZHVr%(}? z&IcM3>dBs@I%io6F$*LvX`I=ds)aq?yrp8j0bizut z{Dl=ot@Kf=#k@Fckpuo8fn{pz79BH^1C#&*}(G6w6fB9D!N=4|$yH0b{g@zjo((GzA*F)UPMj>a%!>pBsXT*ipA z^eT%m`>#smKn)!?9cF)Epj63MNGs!^R+;p}h}=&k@?%UHFHRLeSF z-~gdoo~QopOw|m$sHH;p|`50(G@u zrCDsKr$sed6w?4+{b>L$R(p!Fv(N@y-Xa>O7A?uk*VSw6yUubM%5KurJ|yurTuybZvAoPW+w>k&v7y7=mbw3sa0l?ro+o~ zY2J%ER?)6qCF7-eFZS_P^I8tgTBS9SAYHAy!f2uAiLL)E^$%-n!?23r{R&owc|U-2 zO+V*);a8Qi(xlZUd&~J^zxW7ek7^Mr>8F%oQH(A^lni5!k3w3p+8$lxwGc5Uu|Y9i zWnA*Vl8s)U^cTDj-b2owRxBHNFAY8BdLK)Z&$-nM_|*MKnoiN3OWojOuJKs9=5vmy zwNp`psJ_SCvd7YO7PWqgalF*UkGX-z(laf}7z>9&Ue4k_{Ugn0(G@I=^L_wFYg7i; zOKVy2VzjH>TD{jbm<3JffE%v z4<|<7*HcI?4=9OJb4pejs&+#6ruV`0ZD1y|$~gu6auf5R z0KY>XEF}5I`zN?aORqt|N)xZwO~5M_yD{MiT2x_USKwH{`^j(=S8)WY_{wlp(8Ln2 zS&o55kp?*8%B{tNOA86v6&*I-s_4*tJ$~4!3zJ3oyC~OOf~d-jJ5hClTmEuCx>nPs zA?jq;+Q98%x{{HK8y!SyRT(0i-Y(sR5UeCfM9{pQButt6LN3TF2@P0C)X{)~6niyD> z+OsE!Ax1{!*n)1@B+<3As{H0;O)JGn(KM43#rWbH5RELHUNxrrBr%YiFnJp(ejKg# zvr>?VL?aUyXLg(7qdhW;Bb_W2zVn8Uc5~n7+e|WkLy&e_hDD)}Z984PMOHMIY4f3Ov5F%Yi@YkG3U^ z%ii*q3|dPTnY#uu9baP&1SG0j!F^0>1%qLaI)Oxu!$uc=#Skc)IEV}0{3aUVcW9!~ zKN?1tCPIzsX4wzuW3*;<@N(a~beibIdTs>uhdNp%sd1M|3Pq?x!p;EM`Kg^*K;mMG z8~e%Qxl-Kw7z}3ppohz|)gZ-yQ0}7Er;wlT__Nje7M`t^!(%8ym-2VLwZWUnqhWTa znw-#i!%&~f6WrftgHj!&O!-6se!%K|(EMN-BinK543 zYbfLT6o(&*pS+9mnRwY&-kuEHPU#96=uB^s9Cw#=)}~uhZ>lQv(5*WW;r;7t&BNhs z?$%JZB_Cs3M7^+sx!|m5Tnu!lXP-KuWgpv+K9??EaIdVc%?fCRO}iWbOFIJSsA8Lq z-kXkh1+Yo#z3H-!0L$I@2Yg{m-Lm{`{1LbOk)KYtUqVe!eCu0(^&2;Mh%(~x5Bi8@ zkGQ3;3$X5%P03Za?#8F0V|p%~;%qFQ%cnRs3qLWt^DVWV@eJF6@&>e9tc1Ej}3?WI)sTbb2c8I_&!KO_yNg z8fn+KGUdj}k=b;yvJTMudUxS~7F;RJ^VK0Bc`$otdl@&@xF#RNAS78_@0DpUtZbHT zarW_;YwUu3`Hz($qkl1UO$FINr%{3^v#oT1IW7<%R7!L!gRGDEUjC?^szEtCL?oC7 z{e#VF$$-6ThOL3eg%kW7^dhR4;wGq7uN&S~sO<%S?iDgjPS9pr{T606v+N9@()fj` z#r;-kD6x{Q1R(l7E=2w!$jeIp7=O%~#ucT{|wXX4%bX~IE^?fBhGnsUQUrm<{AiwMA z(O%1|GaidKc5<4%Qa6sFFJbkPzN8J!{AL)nYO?es8*^(`TFA8f(E8m*g$j{D@og+EsH~ z9&yQQgJJ&aaP6U6->E8-jtmboH_=OV^T(wB?uNmjoCv zShi(sz+4Hijc}aApiAP=YETkKx}+UKC&HnFR|Ya(3FC1Oj-xekx|ta!?M&0XygDSK z?jc!T89MRm#msW1Sz&(vuWIkJ?>*;A*Cr5>md?_x+V!rls=oT_Utd*?tCw8f99q;L zKAm3C%16f;)PJrhsDJs_-1x=I<*ry9^#__bTqnTKN`~8DvLcs>n@x?W&J;k1H(q7$ z1*j3*(BTKvU-u@djB64nV+s@&V|&7Lk{jb~tbH*yA-Q*Ww9_E|q=UN>nK(dwNF#FH z!u=DTj$4_IvT`0whm%!#Ie;X={A-oC8ZF_3th+KyYTLu4#$;xb8k3u@l67F&CMs1P z#^m%06Nk-lSzP}VqHM4u&DOG$-+u{7X-PdARv|xM;c*zurz$X~Aqu`C85CyLJde)F z(hw>1bKg`xTIIJ1m1ZZG16#a>E|Yot37O2>Gcw8VaSUqsm|M+tBSRE)gjQQYL4}9q zxig<v0lpZWQ8#dSxjJ`ZUWQ`R_lvN8hCIZ;l`|m>A{55yi^WVAJ$~VCQCvj1_$r+bO!FYafrDAV;$JOrq*uI2q@E;e&wYB)!2c z-{($#>BZ9kqBMaUn>{^in)MM`;VBk@}# z!$;>UsdoFpKHw5#bCjeCddo3Np|imG+S$r|Sm5=};ekEymX+|8K_NSB4$%7n3?S?y z7_g|r7;vaNF1s9su-=i5r6YPFnUbWVyxw<}8zCMh<5C{0 z`QjJ8HsoJShAM|Rg?NfMg*b@k6pEqI?c*toc#Vy9W>4{+G5yEQU~*1S!}9eX7vn+3 zk*I-jAFDOJabt@y&hAA^*O8X4t6REmbR#wpwG*;B*haqQHZ~9b-uZ*S7cHgBZFuu! zksG%m-|JSlWHBuwuMS*7IbRWyiAiW{U<|N>jb8ABWn|(KE0F)hC04s__liqMmY}H_ zvO}Wj8Rj{SS=c#-sRBijBrhZeE<57rEbWd5w6<FcHdX0+=|Y&q^H*0bF)G;nI<$-M~*EkSJYg(w`BZyI73P88MNNU|1US zI<>5i=L>SZC?wU!A$tCNlTs_K6*F!vcG4 zS?!?i7LY1Po(U$nL)KUS-z(a;@P56(R<-&QF)q=ZA4yd6dn9<47S`1!d^zZq@cgW~ zu;Uk8bb}Py@Lb%~OdRrK<&&Gx+BGl+R;3In-mX|9j&o`JS4u=0oiw()27oj!83@7A*2;IoR zY4QAq_t+HO+H6DR5pYdw2i~J*4s7EjS~7q!r8Rk5wvD|s^h&zbL#+^oKv^!;EV`Nb zg6)0Q_sTy*W0BIO{Y)b?V!x(`ejHRJVn`2xL(GCMl?W9}2!IZe-~kmrkr+)`9c3j- zRZ(#8x1?F|^@Y-&6~B^w{6_PxWK~}u#hs$eB)HwDw2fkrsK(_c?=nGW;_+7iDBe&x z#W_q3#$~$5O>-sodJ4{Zh0A z+E}o5DwUg!sBJ!Qr)r=o66bm!hZP5zb=5bzDygE&LPvJJ+Cb?Qbx}>y<$lMU- zHf+}C+mWHhtVkEknpoegSk~+q?Z7U;x5zrQu?AchJ%$dWimD#$S_NXo{c%^7mZU$~ z;A2Ei7>nxb)$~ILv*t4XmJSe!CLEv_h>In*=SGkHR)x;)E9AjW0x;RP_108VlAK#j zx&ULqS5*ahS%bAh+L**s@o6gJkuVC@#P@^@wNbazwMcw2f%=T9IHE|PJZVBPP~TV; z^$BY%%D~`OZwY%~IVIp^%5rX?4kM{`WL>95Uk!~(rhAW)XQ$+cPR0fqTTf#n0k%Rv zWGGY!AXd#KIpTo~R@)rwwnTMFr*RUdu&-A%H8ho#hGc(=vRaT33*sadIyrRbxeO^p z_$qemMp7$1+z90)qFE4&rV#;YDUdiI?k`;=M+>5;1SfZT{>2LTitm0z{DxXF))2Pr z$|KF&Re-3!yQ?b#Dyy}%cXWnq9PaUiOm4%K zsl0phRA#(DKr(F3%u5Ev$&gHkl6gqUsADM^Mvju{2!+|77Y0r4xv5OB$f6+a3h{n)h47r5${K*0JZL-82a+XP>Uk~+lE$!x4`gGHoZQZuUn7Fv!M%9lsp?oUbz~f zFGH05%mRg~cOy@jPM)W!EHv^21y!C#ibi-5E|ih*RHi5+f`AB@=P0#%k*}2NYeh|! z>v#Ou1#)eKSFVll7s{0-#=KmgEa;+{*{IQb#BXgIlTVD<8P+K0FKF zoRJ`q<-MKpRSd2$JVJH+&?!}i=#3C6P#&UOAVSnP!l}j1_Nyc;EiG{yd;ts zi&UA|5C%{^t5Q74c7fx88yFpI-0Fx9KI$YkY>^?E>Zv38?P*nVG&x_d<$b{@X;0Lu z?O{S|RH^CUphiVnz0pAa}h}$N)cyB*J5h zEAD&6jFHihA$)G%b}{<@kKj9%n-@ELu}7sUFg*4}7_ZmUFzKi8e>iFAxc7 z8j`4a&&|!tfG7#^bK1giD4~dIipWJGHLC(fmo&(--}n<=&k}aT%6n!eth_HFT$22S zU;IcBuAi@xA*=r%HNrLd10q~`xfg|SO}grj1H$!J(E9HS;dmL}xWdrW-7~z@}T5%zSYw}GZT$2|=xF+WzT$a&~7~x_JTo~bk zJYG=waY48yB|Xw)FI@z(vLIeQlBDrw5iVud{JVs3T|&5QiNK2L62etr1VVkn0{s%g zC9VNIE+JgsEBePJgexB&KQO{Ic?sbHAi0Ea0eoCSxHJ`);KjuuT$7g&F7{a#hj6`~ zue|@|`f59;8@uwejXXRuS2}k2%|pO<5i->iO8*@I1Y98Ay&+49pI6F%^%4b8!=4{C3nK)6Z=m&ir z)KG7Pz9bV(hPhcp%A!MAkV&4!hCGLUPaD@$luAb}r99K$a1k1cZS>Mh{c;V^2?R9@AvjaZy#Z=rTfN_#0LOZ_l_bqI`tX* z5ph93j-)Fv?VNT?4;95utZ1g`5~*+etX*3r4GR_SsnFV!^*^q%+gA3LF2a*#Z`2`` zmZjZ6QP9!qqlvw$Ov`>j2ytt5vTsFs7odKvdy&c=LjP$Iy3bCf!kH z0JSTse4n-&elP9Z7rmQoI``Ec-`8~q+b7u!H&)dDw^|Cb?4m4PS6BDDXkSIQu-R9g zFT0z7Q{ArnY&vjtmFsswXdSy$j+cQ@S3z|~I(%Q*H}wgs%JGF8IAQ?y-1#Ltye@qh;{#cz=Kz+j#-}Qf zO&!yaRVJ}?&CaoLMFUs$6rYA0jiiea=n_>;E+k9z*(%M9`DE4Kex_Y%9h)-cO%a3= zO?`L=^#FjhJaporZbTH7VFFUhbZEQ7?}p2v4o(FFBN+nUXFA1{D|E=99}6oaGsk< ztK_gv4zCst`Pfa+<1)rYhT>#!7N(Pe-NO1+p7Ss>N8>$(E9ZqHg%{D?V;D<7pjs`CNxJhVjieG(2{ z=S~-`CJPCRDi#7(PY`^zc}ZaE2b8YZG4sNe0F^Sw`ZXx zwz!^!nvwM#^(pipeBY6N$j{}%{<+Y3zODlx#wNLr?ixDc}~w(Jo%rm%%MMrJ8TifVye7|T7drlw8%rOfoc^@d&RAteQ&MHdH5$&u4Bib3+ ztRsVTuri~c(G5`CnBpQ|6PxItHl`JLs~C}&7F&6dEmyMrlcxK%RpwUi(5hwlf4!!1&k4%= zxp;bOB}y`^yQb4^va1@Oqe~pphuZ&ts#qAw>!0_*_hG$eI=x&W+T={|x9Wqgqc?A4 zWd_K8%?G~@>szMN?Q+&E@@oWtn?4dgUi87$lxKbL>#^=VnqH+46768;>D%>@^1*Z^ zt9bO&KKKn-|7R}H-ywJL)u#!6hd$QG$A{Ov@kJm0My$HUf2V@<$(``;(8suZeE5E> zzv;u@g!Nw$eo8?GSL{Ze0ac;>=_?^KUOB~^lAlJB6q^SOCRgxWpXF{o%&cWA0K`h)-U_;H)CaAHQlWs%jHh^ck5$9K0f>ktiSEU--7jz z2!D-&=#seKCj5K!u|YmQ{26guhE48|CA}4`cluAO1G1{|DjU zq97x3C;VZ3Ov=ZHAI17rAO3c%=$)r~6l9g$34gafHp$0_AH({b4}S&Le^2<$3bI=6 zguh20Tjb-zJ34x_wSv0ml`^N&z0+>5Y){4M-ec)jXUlgudfec6Y@wPTX?`$g$M9)jpDI9Vv2qIBP#P&7a$krP$o2 zV_cxI%10VoDAHTFFJP1>5ZrCYxUXTSA^W*}(%pEBhYkAO_%ZM||Kv4y z=q(UwhgR0p{JG&+ip{M#miBT=)r#jI$Zk=ms}Rw-^rg#Pe~cTdx?OrKWj*L4`Ioa> zMB46nksN`{U3UzTyVE7dQm)?hk#y5$OOjvC5}{q|gnh@@3E`aeG44NX^O4#YinPr! z*-rB(JC+(MxfnF$5qz5`06UBe^hXLNy8e8SVw^|1<9{ zZjVsb;PL0ZyV&}F!oA?-|H-?HeRKMx!Lz^Z-NmN=0{4P9|AluKJ4VcF@ZeXyyV&ku z;$HCDzx3{6uiwGF;Hls7?qZ{Vg?qs}|H`|IU9u8x@W|J^yV#;$e<^t3fAQ{Oe`xAA zc;0utJ8X`(M#R;&R$i$jaIx(FCD>+}76Q&CzL##EhAF{~HuJ#IR`IjVzMVWLYtfA^ zaUZLcd;-)49}7z<~`}%#llYGZsL~2xzpZVENm9{t>Wtv+h)DHB(-10{h-_>p8c|S zhnH=wJeF*e@p>h>+}#7~x&l$lZ8>_ZEOAZmu0-x`x5?cu&rK~n54%Zsn>;65c;4kU zx?APBv4!V*+y-}xJU6uPe7Bo$H_LOPh3B1ay*nV!^({Q#<<`0V@?6)#^PO(3yGfpF zTX??1jk_D=Io`ta4!6eLAkQ@|Jm1b$Y}d;(ZQ=Pgm$>WXnY8eHD+0kjc~)C^9&$C8 z$+OnNGeT_ME6*#NJfEt#gZbcNUb@0d$=1S>AGRzcKWr^Y$y>aXyeWisn-+?+xg;fT z@>23-2<;{pinOOBB~N-Od1DCeHZBzDEhQ;=qnDC5gwSroLXoa5Ny!_$lspkayNQJ& zT~m^hC%lxrK7@Ab7mBnS0XdhF*Lx{>T?p;gEfi^2NlISlrR23Cv|GDSq^nC(@>(w? z^9GfLcH;|0nkq@j<6cT$6GFQ+3q{&lnwQpiDVaMNeNO2@k#>}%Xy-rQ~V|4fwZ!XuZ88B@5C-O4ie2CMDMviWIqR?(%8=FfY}34U&0DptnU@Ag9L+ zk|%V)77y0;Mob@u9qEoBDIQc==KZ33CQ_J4&;=uo2_M3=U_l^ z0-h6AK^>1~KsjX`CkJpmoYM-&DdH3`PLAJrG^Z7eQ;HK%oE*OKU`{I(rxYiEI5~Rb zv7A;QPAN{naB}d*LpiN5oKl-|~ z;FRJ7{3Zu(JdD!{zbVBD@J)`}coe42#@gPns^rjRiESGZB#$!0Gz?)K> zfZgPvjfZerVK=2X0lLXC8;{_$f^JH20&HXgufh1`_lTmo*iK>7OsZgRxN<2S8< zn^H3c+~yMdnJ$pyOYA3ykpCgGAHP^Mh^B%a!C308CJ}qiHGlfP1k`vS_X>1q*0MM8iycV#A-OP0@0h&^rfX|p1JnlC$*S5rGN^t@_ zV`A_czn3}Q5}ql=3FwT8!Kt5z*0e-tN^t@>V`6aPcQVtK;7ln_z-CMg)(t*vWF{@K znNpkp%>+!QA~9HJaGIf+Qk;Oy7$j5k0L?|>yh&i@l7>xVxAu~TjbC~EW7DvCW57%c z4V#N2GmS`Z0GcUBS~NCOjD$H04N_fSMm)pr+hTi$-e7kuGtgpq6uq8wEoA zxO1b$;x>(5ehIj_1l&AoT0NJ5n;#Ky(-?e_TQqW0jD0IORx-hH=V~7LDUH zBE3l<=gINP3B6RemxF)fQM|YDlXgyT$_>a-dX$^VbyW`^wN%%X_n}dr#gFPRogPEe zV`hZY$94{~U3P$Df!H_kiVJ5Pr~R4!3UANlwu!>#3fo{|s~5J;+~y<3*^-0Y^j>wB z@vNTXCL2y^x}%)F&?{pU==k@#BTAvOHR*@+G{H5LcJNWDVA=tlbgvwz(rV$zDW5cx z5X!9 zJam*7i8EN~O>!JfdkRMma;5v_IGFYpj+_Qd56E#DFK*@0IZ>A0EXR79>!>J|#A{-z&>6!k|7f2j$lw?mDx8!E+|!s1b^QaIF)(?fbaqvVFF za{5-tQg%bFIeiCy3YqsLyre zxKWxy$a3ybviN*Oq~sv$5BQ?4=jZW%NN#W8 zgQKbgvafTdORrOyzlQ(Aa=Vrf&ZhRuKH*FUU&?o9@qa{a*YKgksD1j_=uCNE#~`03 zz(?h_n-85n?bXL7XIlR{?jwl&xZHN}q2s1K`q<*^6zNvnev<$nliSsN=zM9nKDIeK zXK*=g&k*2IxlQq*1EpR1xZ9a}4$sdz4K_=)$H9ZU1E7p9ZkENy?b;bOx{-? zO?#TXdpTHv%2CDbI-2%2d-rjA0uB0#+kG_cYxeHvhys&R zl?)wx(SgG)`q=75W$0v#4jbC(`ODpi+;nh82MzDm$31RXhECS#km0@hIO2w64B@5& zhWF{?y>3v(AZ|Kbc)va#a4Ti#;EoO!zE2`o^?D!5gdoTph(;sT~ zp!2h@JlyO-x92#(NV5kWp55!wW)HeLrw&#%d(g?*BOhz_pnG$;VRf?y9h;qa*X%); z<_tyB?6Hi~J4-m@OP4K9lN$=6j=a=O&-b{Kw$VW}>%xcKU249&aMK|)Ys(exJ#u>w zZaRQw{b119N&k1_HUrnQJ~Zs^R5+!lgJ;(NM%}yQ_AcC>z|H#Zn0u$(-iezIoLRqj z?j3S_2W~oSW@9FGcgXDy+&+!l8hwmAyMf{DxapADTDh%rc8SB=aMJ;^^>UkVb`Qi` zans?l4RYJ)>?(;vxanZoq}(<+J1=$+HytXo!)9CD?egM&0394-&a;DK93ZpvWtY3l z@pT{8pB7zM2V<)!Yd2A!gF!AxDYWCn54qf=I%^sYZp$osQ*@Htabm6x* zdvGR&E__F`hi(<)mxSu5~oon%`_OKH)xuQ>(^*+_Bz5rLd{-f0_eq zoNsIP_$kNw3ni1L7(dB5S)ILa@_5X#9zzSf$>S%S@Rb{yJsx$e&(KeAit#bWIt?wK zCXeIXozRQQP?N_;9qTsqV4FN1ajf6a>2LCQ*s+e|fIySSLyq+vrwy7sKEe$aOE|jF zB`YR3 zHPND3=kZ5OY3C7~p0d-m+2HXQQTq# zhcI;IAn#045PM?YADD{C-CxrasT>@b0&dxR)E;e{{p24;S$`JQXKPVU7QQO>MX9Ux zU&C2z+4?^>i)%AW#LLfry{0z6z1Nq0yk<9F$B2yMQ5Giy9vY%Jf9fl%*9I#b(t<7n zStY6K9>_{E(9?jB=GaaU69GnKs)&HmWYs;FE_(sueE<6$55IU_6wREtn@gbu9&u6E zWHov&U9o`oHt#*SfcKR5Ub%qx-lLZI@B-efKg@q*p1*Fps%6}+QPb2xMRw87Tz<4Q zI$7CW>CIxdQkB?qn0uz&GH)G0W*^2HMTgypHy=qm9!cA>+9R&btq5L&xmVi=cUy2N zovzSs8?g(fxXuwRJCQ5h@N`a^bmDp?s((+PU5Jbu8e!o2Tn0Eu3WRP=RV@XLuIYrb zF&d^D8%YqcHN8tkLEzY^99mPJ5=2NI5uFrUx?b6MV$Z1#@mn{|`bJ^MXyWO!s#7Py z|NdL5C(+S(|Hf?E_LY6hK9OFgo0`)OI?ZKY0*5?tE4GdsKq-@s_=JlY0(^68sT#SX zC*{plU5B^q!-B_*m+4`)H*&op@dM+K}V}^YWGwvP%IgvGr?jAu`b?ER20(YD1(KTw^Ag}-2 znnuSZGrKh{ucOroKK3P*+;tMXmT}A6lN`Ht+(>;&CfCKEtf(qAUHo^_EZkbkqjk6- zoawqW-mY54r79SMutkhImrp~KHY1AI)u1?JJ2%L{7MD*M3$0IE>3z>Q|B=1)ugcSD zqo@3f!slt1yS}#PfstP=g(*Cu=z)>%RezThPh9ue+?7Nh81b2LNzRhs>m9hurgx4* zjk|YB4qamET>w(crV}o@p<4afgVSk0Pv_FAYPyPyPFfJ7o&dKnN)a?`+5g2we&RL- zpXuHe9f6V*xww48Kq;aVpZRC4NKubf^?jv zav)5)Hc7D8m0G$kNqs7w|0m1+*D{9mpi6DUDp-2j#WIK7$}#%neoUeMgA&M*+ByH16&SO@Fd%~*>gGlP@ zEU)F*#<5AR9&>9gt7X{MU|ZHhzu}%q-Cn4I`uR_jxZ1)`fs`Ha7VnxOP(Q8qjSPIN zD*CpnSklYw+jm9_jivL&N`13i9cweGDm+zWo*7_g@gBXUtAZsli<;uaVg zW+YuPo3^IoGKbf)Q>8I2Lgf-&OF7Rd>6V|NgRh#UtB%gnRa!REG6fhS!0B|TWq?}t ztFb6h7R;C-owUimOP9!7e5 zg#A7QxK8Vx&?W60;S#hihd@5!I!AUzPl++DI@O9+8XBXgnj~LDe#&o?BPRD?)Uq$l zl`{VYQf8gEJn)&6H+vAp=L%Tch)p-O&a- zS6Ry*cB9^WWLKnVhq;))OwH`U@G``oi<8pPBz$P92G5YS6D$2u)-J5I z?8#kJnEm#80Uexf)mcPl3)e+?unbPCdwM-fSEL7bQXq2mkS8$#oOavL@FmdoT4 zZ?;x9#pQC_ z)znzeQ`;Gst$wabAOsq4iHLiPs~$K>yCe_dRZF{N>$2KaTsO6oU|9+VY!iY-Ay{O= z^r!?JmaB2}+PlCV7$nn*Y^(_w>9VmHutiA~@k&Kw`Zag1K(&rzALHRVa{Jg6?&`LW z?bEJZ6}OLTSQ`}|Y^l1=;*0+4R{I>eY1TP!r4PGNZ)Nw>t@2g?7nOveVyUv>;|4q- zMf6Y(c{KfVUoeF>Y4({+? z2oY8n z4RxYYS13Pj{#HPOGm&Sfe2PpxDh_?;@2WW883@f1XWzz(xB+q1e6Lbit>wD-tFCJ&1cGdc8m7IEXaBA|DR>d{-c1rJ;6Ra3S?Ry!zady_bt&!VH-AByr zi}f&76aVw|q?=$*=2}*9cCuleX;@z$m=0Q3GF}^innPz&XTrkWvrgaHFTw@l$Ln;4-fA`IX0A*v2h&*;sRYHf=0P zLa3QNclXga!|WEg&$#3>caJ1PYO5!pmv#O)``#QX&(uAYUk_CNZlLmO16ic8A7`^g zRJDTqEj23ZhR?V$1kPa!LuFNRK5>;0YVDYvB66^n@}(6a7p+P6TjkRrkQIT3f6|J? zDtII$kK`$*A+iyPXHO%h(#Abp$8Do5Q8AyddyM#5OfBGOJi?$ zJh;ess_vVKrs$PKTg}=I&{Wl|@(5~gwOhm%2nCdG`c3+VDi4o7?K`b6VXq9N*m5REECke*CVW{?rTRN4VdbOr;X&IBXnPSFt~6`)Mbu+feo5VIkiX22Ji%>4?Fa2wWTEbKU9i5oHR$ru0mOH1&u90>E%Q$O#mQP>h9vyE%G!0QKdi z2YLSzlr9?wqpPZ!b-$ynhpL&IcBz*W5m8woONd1ZTjSjjVp%=QjaiPtB^$ynNyvt< z%Rp4uX=m$U7rB`fw;3r+i}%GA2-5$c1tN(B3S@HJ!abE&4>SMN&3*f~Ab z>Be~@sV;870)vwft0~cF+$kFK#w8%Xr!i!Cb5&vz3N$v#8jX$a@UWc5R0&q28Nv7Q zeA9R5TcC%)N8ViN8$E<1<~B&qxja8I@t2W- zsRr=eQ1xKX$*s=!p3<=}DD&>+M}U}hzf6k5{SP+nGFQd@My*__gd$1|D18f^F?1iWe$N6z;I zfZJ2^7Ab0;(OCPIndBdul_b6`C$YIkqthWoz^V8<_=SSNY>h19Th z+`N7)Uh$*o$9gcgevm&H2T&+>^;;eRanR!v1Gl&pW~VW2fK>%PM7C~YvnpTVvHZ+V z=Ig+IJzEuLe>?#402sL0Z_OhrY>gsz=F5w{5C=^!7K$tyBRsX}BL{SD*)RL~He7xY z&x%i`*Pf+&9by`9f{4q-ZO>bqm{IFKra9_Zwk6;Zl>DZy24n5A)FO zN-c|>-%~Ta87<*Zp^@HI6negziKnWxtG%*}Q#M|=C2b@@#MbmK6$Lpy zRSxsF5Pc4&H=}HVvdn7b1K4*1&{4H#_P`XVe`5(1J)JoPtcvwuG!2U+dKng7-2c<_tElo z27*4y9@3p*@v8q#x-(YQpgXhTOG!Uv>L9r3&O9bLen)&9gQ?~rNj5ccn}=i~diRrf zP1`3yZ>Cq-jl)Gjr8ss6tsy28AMk>5|?|r}Sp@G8Bpm9Zr})kMw4GP~T`r zbH+4Qx~N49os>djrKPXeuc^pz2*DUplE~;}Twv6b6vF=Bg3Yt`2CG8%Mq5n?vJYT@ z{2#$!8ZT+$AbgcHanQY~?T$X^oHTBd=YSPfKZhWQ?#+mFZ^9gqK9_@JAP}oQqb_wd zC~oj=?~kh$wq{OvtrqJWG&v<>><6Wm&^1t7$NAOLUKfh-xG*BZzClf@_qc@JFZzIO zpB&n$P9_QHAs|PjC+)qW9KbSI+wwy|QV7T>aG+z-#GSM*9}3DkE1Q&cTJkbF`Jn0< z)OA|1D^{tj$(k|~E0h@9tS?H0maeUsyB;d|uSS~kOvLX0YuZo3Ja79-Tcd||M}H%$ z`FCU@V|`a9jsL1luksQU1@dXhFq%Sk(NgZx zQ<&cb^QkIIdG5RFvrWY^JkeMsb>gUN>zd8Ph_iUDkv|mhGKuB}zM-j70S~-TF{j zXhT`07jY8zK7DBKlh&qq9QcH@A4gFf;~^0>cjVIdgIgwC!Lfnb{qR! zD>HGr%+5B~vcDn2!)9!0(bQP{SifC5QOu?P~G0t#zGQ$T@qrhoz|O#!7ZS7_MEaNBK4Nm=_Y zG|H{dRcB<{Xkonk{)wGcB!l96PpP85+Z8H1e#1}nTvpU=&}^#OsM%CAXEs%A+Ce(OICe*PG z!r-zF0u|Ijq_R2_?~eW$d-lgjWs#=BFxHus2HoH+xCi>9enOf*8))zkww#cLeyImu zaVAW$%q4^*4W>1v{`<^rpKZm+NYLj#_?ch&Y}1say+~sa>TVa}H3*{CYOllHq>#l{ z2%S>xC>ON|iZl+R#60M^o_UZkVp~fFO(TdK*oH760;foC ziQ9xOZEb$s7zUbUu1(B>-fSb#n8m>E%J~YzZJ)|wQ1cstxfA&Ytz@ysdZ`P z7b<`Vt#~ix@O*b3!=*>$oR;Z>`e-H=U!JpS^eXI!QM_A-ilLIt3^*U-flQ)JAf9Lw zNZO!{n6Fwxts?H+V%iKt1ND6*JzrN5bYSrW?F$5ja7IuFX~TzMWCVrKMo@;)3tAdT zE5*hSjMo@4jMo@4jF%?+ff=ungk(@_f?QtYpfBO_^@i?|`VlVY8ZKhY&zHIJdE(6H z#%%F{*_k$y>)OBuv95mrcIjfXAy;p8D;Oor&Ia*XM^VRKkTYrPs$U9BEDs|z?!7is z*F0^ee5|pmmO4ogx(gMesKV$L22YJsoXWR$jk(xi?3vhLY}Lnhw@a;R?@c;hEPR}kp4_1ecN20 zB!QNUJhTUr39K)9E2WX@qFgBmQ4>uGKpra8km+Q z3PH>z`go9!@A)t~D9v1vE|t5k&UoFsze85sFO&ODKECVSbpTuE_Ls?hijUX4`@3Yt zeYxDP=HolwT?e~$Z@>z<@8aWC@BVICabGF--RfgC9sJ*jRD!s*G44%{%BbtkjE$Td z`jCvl)ER=^*K(2lQd-rw`4h$Fu zbP7?QD<|B$X49XTiqSxGQ|_I!>0?u@1h~k;y<;~0NlilBdExGuO@C^N^#Zp@xcAJa zKdq4|``fPj+^_t~TV~x`ue-K;NdFlu zhuk5Cm)sM+5|H@JQ~1;&ybtM*-mDqa?#$lTx@TOG}Fn?zHpsRQ(hPG&rOw2*+|)9?Z1NT}247D_4AgAJ$C zoAJb2luR2_#n)8q+(+CF@fZLy_W@al($uByL0OY@1J(`1<+%c?zJV~s7l)xl;G06} z_UDAWsvu)>$HMtArWpXKM`uNKk=R%dc&DCnM3MiKB?1!)Ra)EHj#R+`-XX>P6DZ+?*^;QkV{Xew?Jz2&?tv5 z**sET<38+miqz5@d7rF9DbE>j%LUd^sJ_Of#D)4)Jta)>1?Z)IeM2DijX9~e7o;9_ z=@~+7=XWE&?WBWAI?C$?eyec7gw*=7Fd-aqESwKxx-5{I^Big=ky@?fD6vtN4yirLTI$tn3Q|)-rP@U5x$fyaQjZ2wL*LYDGvwBsPH%E;_ekL88L+YRc+u+q}3sO@; zrP@U5x$fihNIe!v4SmP0HbZXh>GXDpi&|SzvU#N5=8n2uBDLe+y|NCayw&24$hsP; zuXAgO3-zh`TEY}x$y!Lg%k2rI-kX#9@`BW>-P$vR;Gz?^m*3^2gGoBdYY#t%3nrx2 zmxT%8h-2Y=7=jzAolcTUN3X0jA{UWb?dD0n_Ds5Z4yl96XoJ-23Q|)-rP@U5x$bM{ zk$QC?HS}F;wHb2jPNxSUHQLUU!*_ytq~7GF-ENV3liTF(mUW0j{_EX6vO1`~-mN1p z)Tip}2vd9|>mc=RcWof`TXIrwD@g6!x-*2>#_uiswvi4d=_s#j`E9}l6H@ET!h~?d zv2Z>N;f>UrX4ObWYPFKDkX%G+xp-2qLp^*Bsonf(aikzMB~+?Sq@L@(ZXT&!AT{(| zXXHZ1@^rchQmA z5lDT&O$1VJ%}KqnAoY4_iydG+w2>9kR$K94l8*Ay8fY_V*{aFDEKCST91G{e5Z*|= zd6ueB8Gh>vQp-i8mWwAfn=|X@kb3=mQa@ghni4A2CQ{FJA8C-9%+MvWDo{VvBaK|^ z-Q%Y(OfDTkthihFA|M$J~aqpHUT16Ih`ftG&01yPcnA;oAx5=K}>4`&B@j4s}jmkGmff7jp-3_S{SX z#XJ}W{wW~;q!h+&t=4FBnuwlcBgF#Rh?$D7C*aNecx%kv zOngl1aw8_-D@DY5rMQ=Xw}b{vLhma?#Hsjkyl)NOqrtlnYo_AI@V+g0uL|D9R6NB7 z5R?kuW5K(aKBnS_@IDy4R|oHcUGOf3=~Vn6-s^++Q1BkkyOwrOp+NAS z4Bo{uL%XUK2fY7z{@Pif9r07%3MvAg?(KVz+T9Wrm!Os;CxDSxWU@Q^O_`u0fY0d2 zqA)EJ6<*M@inj7V&nj*bRcXxZENE0k>v{g318w~+95=>iE6JqHFIJL7<};Oq)!oMU z%avr6%x5dfn9Q$M61L1yrmQ4R<_i^L7aKyMQ0lTmtqFx14~1GA3big23jD?jwdG=k z+M-M-6ssaD6e7D73VG5B#n`h#t(8fkm?o@Ho2l_Fp-{JmLfsY$b$ck(!BD78p-}5X zp>Dodp>9?t6p9;%tx${^E7WZ=q15d%q0~W{6l#-9C^f{LORSwwyPrCv1@mQERG)S~ zX&=k9+CJ?bvybIkhM#snVIM2BK0oaqwU3odaqm9uK4u?-FyV(zyW{o|vABNEY4_87 z9O2TZA$Jwbab}O(!8&%GoOoe*f`~GwD?!NFNO2 zO7A*#CcSdjJ>Wmyc_!Tvg7mdw23_-eJWS4u_U1!qEXWbG1 zap#$IDg^0(DQ@$wyU(QCX5BshF79}k^LcZDDkOy-bx zz2;21d)9r_f4t`mc%Lf07Z`Rkl-WPanmngNKP-;r-K=|`%j?|>dt@0h%Ni%IXE&@B zae3C=$FkBBuoJe7ST~EznAf8nmX7!_i)@pZyT)|DG&##0+$iT3TJf#3PPn7eaxOBq zdDASgfiD*qP{L=oyBlU%-uiNJRR>J^N_X8X%P?QAWjKvdu56a&f-hGcr&W||&n#lC zFIO*4qm=8~S;Q}2F73c40yJk46MVU9I89Qnx6QhTL%AYdy~TcM1ptW+N+98bwY`9? zxU!2^$>PS1T--7OuVN1%@>gK9;DZ=dS{yTkc>#qLHF%&Ie8 zup7f)4RR%34$Iz!HGs7OVxRD!T@JGv<|-%_{M8`WYp@4cR_JR0YlW?z^f8ZM70haw ztDso$SA$%y#U5bU`xM3pe=pWk-g-Y)!K~dXt)N)&SA$%I{{~oA80yPDxDZlUz5)v$ z70hawtDso$SA$%I3I|wLuxJ2l1&Yr4m;jLmvl`|qC>H$HAlJRv11t+lnS-?;l{th9 zT4^w=VXlH=!Cwt>&9Dbp7AP|ZYk@O!2=^mc112l%wG}2S?6nmpE9|uuCM)c<6(;*` z+*@I?@4q#EEZfgV6g{<%LXj=pnEt-8js`x{71bA0u~EHI^*tu187Ac zJa&uz7h_BA^RQUS`V!BzyWv+ta*^yO7cZV~g)h$$&&98!s05`<1R-cx`Gdt0d>$4% z*F9f*9 z;J5+SK)Fj)`zjhC%yW|9E%m~eL*btYWIGTT1(}t-2)=E*3nnH_bm>KeSaYJ z139VRSCHDU*gFl26(S`p)}vO+OM42!^cp)17AAztu~;9*mhX`I#~h0l?0rEjc9*+f zq(=B<*>j&rEhJ)>d+*|~*!u&i@5@R3-h$MI#lG9HSOI{-Vhs+oytJPnOwaZlY%&mAe+XEtVDAfJvAf+7ky@LoyWKq^wIH|M?%q~d>|_%bdnAzho}AS87Nj;T z_B|{)wy`L^#;{mSrbXqY?Hg_2Ha2rCObF+(ScOs;Lx$+plRp$JR;e~gAnVS!l6wL2 zglVxg7CQ;4FNnn+a(9c=!bcCeyF_Zg1Af?Jv2QiJ4D8H+vH4gmkprpk%1M2=Ahlt! z4{4FZ0%w!$BV&?|^3v9guvpvPu`de~!uf@fLMhCTHx?^$6;EVd94Jrpvuvo)n!D0=Q1&cM5yTD?BUmI8~@M{B$1%7Q{vB0klEEf2+fyIKj=2+~ZG8W5H zJjY_WN5g%XmGDfC#Rgy&ptXTPPP(H$2w3b@vpFye(7HXKjlD380OEqh?wHMiS%B6n zLy&Hm&-;8TV6i)Ab6^&r^@;+syfsH?!D6Rob6^&r_3{v;9j17%PX#RY>e(Ea1x4K! zg4AHJ0e(Fs_||(0zAmYub-IiZ|jbth_iY2UZUMVqj^G_!W@dw?RFLO zM2}fOYrnPl;l65br*c$)s9LS)s)eeqI;~{?iye#RoOD)6P;}PG)rya-1DrnoU1^&l z+^E+#{RvMJKnt1RF~OxES&u(%_r{Z76xkn6iq>b-y6=&iMPa}G~)Stn=cwq$Jjz9$r5Z9tta8FyP5BGI3;@GIvvc2 z_MEn~A~tC(lY2(K2VIWa*NN-y8PRPYj~RU$5kxH_c*7zL9uGn88R0FCidFss;Y)#e zd(SPMQ=I11J4>l^^OhRW?v=l#>12BEkd z!!T=A)|ve7JrwU7)+Za*ryAC?4eK+y4$;!p36tl!gIDIW!F(o|XM=e@n6F`GGj>|) zECoANvC9>?k-AGov+{hgi(3+Xfj@7qu}V3MRY#M~*`1YKUD}B7e8c(*aYMad_7QZ( zPw~Ir2y_Z-O?OnJ>?+q>^ zx<#pSkrT?~N;lh(w3U-yjGYm?`eBXy(GfalC9c-m+B-VCx_f&2`UmPumR`1O`HGdp zLtHbLErXv7@{A|O%ARaF#)_V73C8lC>@tjHJ=p-pWj)y_#?qc_7-IxFonYIU_a1m)C62-TW^ zo@5`N?(Z(sD_g;JVU&6)2Bqe~2$i~yL8+HxQ0gTZl=?CZN~5XI;}V>6F6{3w)!Atx0h@~*>$|ncLvICok4eNQ8(Wgb@5f`i~S0yyNftf z9Vnq-?dn`QvD5Bp(dpC6yDZ(DG3Yxx=Q#XG^p5qla&E~)&U61ww;!wBSzEzSUcYj6#U(BKeWk28?Jm28?J828?J7gCV^NgCU(_Fr?RFFr*y@Lps4= zNDpB!JlA0`q}O9Gq$iS&Kt>H%F2O4?8&?pr<$&dgUp`W8ByavQ;oIlX)SK>Se;LGI`?E>fDw`@&G>LioPMOm41zCdWEwCT~P|zF~cZ zxcN-(BNQ`vBhV?V^Ja3*rC}!T_cM7fGkG!i`aSRDWTrI*nUn?}tP=rvk#l!{I%n=C zrTKGr|C^b+ja3x$_p0)2RGz&Dhek&!EAU zpVGN`X8x4kpmQ;$_qS$BKgub+kL%PmG%q}*6KejHPJb&+=_b#3a@Z3SjVWD}XqwWY zg&2ue0ivVlB@(d1wBB3hCArL9UmKsW)g#M6J2gzaq&<86Xa3MGsn$wxB954Uv}Tg6 z)7DI~wJBb$Cy{_0vZw|5{j9wq0>gr7X=NWPh)h*YK}!Nf1Yb1Q8G4 zufHSj9l4t0{0bND7Bi&`!f_S${BS}*gs`vHf12g>sf5@@3lRkLhSaR z{Q~KaeBtbGq{C0AtA1~v4h!19=x2XF4|?K$-Lw+{HW6mzf??vvMTMu`st~t+?&-7X z@Ip~owhf1XQFK3d`9Q~CcO$=fHaMRD{ijO--rHBv%T?&1@t3#ICZcFZOLcO>+t;2kTJbVC0TWKbqZtHGH;Yi#h@QHRfC|7vak7^TT6p1M7Fe6G-DLq=hhY^ zyzgONA@bQb=;~_povk7EPmW+#FofON(JJ)?yft-B@WD z(7oUAFyKT+J`6@%l!n#~{cv>QVbHoWmWIKq&$-bH4}+Y|Xc&wxdKmO10x1Aai~g;5 zKpOqqz0uyS3kPlHUQF-SJCCJ~ZM=DJ7%RQma=htqzgA*QL(2Kx_IvD zOf&9mK)*k&j%1aLv8mZ?_m8~eJ6@(JC*$8(zuS+cFhdnp1}N#97g zE*84X;8lipQnfsJ`p`0af7<4g<~mMpRVQg48q}SH?PSi_r$2e=DT{C7+Fur4mPk9s ziH~wmp)Kruu0BW5H*%x^TKJJ<)n}7*Tk@n>Rl<}Da!_8I>4TcIhNL<=1r!)appOCBt-xNd$W-TdH7XCp+J0mRFan9_Zt71k!+gw%7l(Dhh%2 zxT;pVVxeT&O(EN}?gQioyP$?#^;rLP?x0n@{0q<2Oz}ufwG58*q3NUnlQK+}s#&=X z&~6-3SnRwUp~|{8Zm_Iox*VL>U$IGW0Mx7ANdL8ZSC6ZExEe|DX4H;YGa@(FFdLCf z_4tl>yVyKj4mX*)>O@IvEY|;;iciE3BzR234~ps&@evxGKEuNlk0widoTNB~u%A%^fS=6Pz_)q>78u}4$e73o0WJy~T^;B(2(=Z`KodqLQ zsavw#q!g)X_;5WSXS@NbxXAH#p$o612oi*XcIgrinUFw7_HoLi=!9Xd2O1Gml#VRE zjpmu>&-|*lYj5j|vZ@8DDo|JUfbxM3=H)u@;+?84^%Wu<@Yym7t8?&d%HKf^srw4+ zT#m$irA4C4ROFQo1O0Zc;c_diipx}?B~}C9;jL>gF~2T{Z!PWTBenTi#HL+qjyIud zuKy@>?^mbmqZX=i8depqZ<^VtKdaoHF%~ckOV=9?eMwCMybU8gSFFLGR+B;ctr%3N zK5L#i*?1m)e>&g?>_Et0xB&?l8nQf&O~SRbv&{|K16d3_28sBnauDl}fX|dL>ydqj0LS|Mg>ap$c$Ij^<@i8a1TL5X`=RIwlkVb$QB7!&U8ow(FkDDTCXQ}LQy%yr6SQ#?2qvm)cWoBnL&&i0qRaS^d&EfLhi7FllnSLhNek2=$6;Pgi}Sj>~&a1CvrYUq$6|O z7M-AS!m2Bolrfla$WI}ijLw8pcM7?Nyu5%+@3v8hXnUtkeu)c^_-3W93#1ye{K zXFc^a`m*WM4h5{>-MJT$)UB4&c*zO%BRTQLxqh6xl`fSQisLL2G2c5v71p@53d9o% zmZF=K!3*yeWsE6blP}XRQ80<3Cj(ZYJ;s0B&~e0Vm6K8xul>3)+z@_oTcM{H?NtJi-`6Am&=E3ONbNZ?4m`ZnI5ee-|(1HbzIWmoGw z5r3ln;}zE53@mLMo!e&H@@?aD1e;vQ(Is1*%+%3-&9StA;UaMJXg{C8BjD(+vR}&- zyNOF4l%a#pV~&;INe5co8C!Aj@1#pwdJMSs-#wi!ZRxkfb>MedOTVRV;D}Zh6^+bb zTlzIO@U<_b%hlfJzyJNe{@1pms<^`8ru##buel``38<;A$~|f9F}KV9` z)7Me(pkH7Qe_c$!z~>b0j((Da8KXDAANuqlD&X9XxXu@)uI-8*1J;?)O_PXvU|^Dl zV=oQk$t`!;%+Ea0DHywE%i4yL4jWXrC!08B7~}c z8}yIRsx5G*V#xX}tbuMX17<%Vsu@FWQ@mH8v+%8NVD9@l{9b1F`z1MoN1an6%W^-#RrVLc%xFU5B-rY9A5oRyHlI>PyP6SQ-_Gm?0_WBmum^mix^Vz<}w;rBM z`~CNq#{mg72N^ZK%2&U)zJQfh6OCTN>XQ=!cy^rXGi}Wb?u@^PJ&=HhuU@PaBbIW_ z@a(8`U)Y4whK(pA3aQ>z-F0b2_m_&|ZgnCzdy~j05bA3W5*1{!5So^ATE?aibD`uJ zF+Wi9OxTU&)k1SiPmzC+OUT<$yG29#DDtyAl;pf`D3NT*+CeFOJI+nMlxyyf#Na$*Rxr zs{!#&)SBwLsqJ=Dkz`0EOO`+K-+y$Ez6tklj<9qwu+4|F7wjTee?|)pk-0+(P-s9! zEXWurcv*V)QrnT9B(fY$N9zsbh&ZEp^CCI&79+SyImaqFRxL;7yfeQL>N()+=?$rn z`FeVTdKx{bC(AhH>cfS44m8!X#ws51st7j%-r1wLn2GHYYMOn+nIoSrB6A>w4wiPM z%-g9l8$=RAI#?NzjK>*}LU?Qm;i)DrA0cwc6A=V)UOc|K|0Y~2np98R%9=)cBTR2M zi>477@E?18l-4JyE+vHcg5yW|AP;^O3tS~I|FKt(rWGF;T98o)tOST2d%=gutSlYl z8Jm3Igz#X>M=#f`c8ax``teDb@mE~+EBoB1p3uxvi~>eh{SRVo*Tlb@)?3Itl~#KQpF+oF$03gSG%>=Wq#?cYM13 zB(k1X$cA6RJ}Dm+KANH_s{+G;SXs!%A|NmzHlU3GQJN=|G^K1}K*H8UBCUT&#nO-z zK^&`DE|y-TX4J^BAemnooUAf=#k~OFg$iFOp*EhPzU+Cvi=?RK%Ro8tQJ$`A&L5|X zd#J)(?VTK2g*qY0R|JMt|e5f#dyZ*sg=9pXjM-J3@`mbTC|qkKbFT@1xqk$D zw$=Z8oF))=Q;;?JBH60wgK|ApNtOvqv4UH|q;^cQa-(Q_DB7FK_{(|5m)!uLDKZ`k z880s~X43=-g^XPX!ayVE5fMf6g{sX)lNFFbBf5^%{}_VFXVA8wWE;%{95Fcm zGS%OSD9Zlo&;I3q*UlFYJZ_H04c5ktHeyUimll`2D_zrkc=Sck*#EPx02>!B zv(jO~)Ep_fNTg4eBi*yt=d|h~kv5bv%Hxa`yYEr-fJEll|=a41UyPlt=N!2kE^6Q`+R$!{rL9&zWw?h zwU6@D;dJwNH~H^a{7(=m` z)}Z7Hit7`JJ2OD(zjhNaB-iEdr^v_O+sX%?b#B+R^M?{#Yl%zS1$DQ^=eU{$d*_eZ zrBcAlm;iQPan5eHf!Zmsh_%HJ6=3N6qcVr^w6|C5|Yu7GBOT4C^pcy9szkgP}$lVurw#wIrqi+V8G*7;8NI&g*rXJh$`$q!) zv}(umE4jNbhF<6P=-1#-`eX_- z1pQ$w_bXxW(k~iVzP4f^Hl)=z_>Db3_Wywh=g#%}f$+a+ML51>{=o>>I1;|KlK6Tn zzJIsC_p@<2oZ}nTBwVV0Ft?_lCJ(rjfXL;Y;%TSdV4DoP0k~SSf zb_II3PAIxY?P}?oVZFhKAdK%swcksS1%pjJ6(5M-T%8RQbrjWeF(lTTjoGiByTW{V zzuo7G1M8xYX;y4kLFRVxS_M;rj2;EoXyTFr+EmXs>k`# z31aH^6CWo&YYtM|%MRXc+d&&XF4Xkp{qHBG`w!`=1JPRsu###w8JreAJo~_bp4+4| zF#@^_XG3oEZo+wU{HJTq^XWS!k+817he}!3l(b6jmLzRSlD11yZ>ej&Dak`R*9>*F z+;aRzkqTVfl(Z-??--wCb-N@s?HownEO9BFg=x5ONUX(dz8I((bS5zdiV(`7ZP6}R zLb5HoNdiL^`xKE0Tk4H=iI^DBbBc66$I-W@q;2$sE_t zMxqS@wW;2AMPj75e1#9M8}e=_o#zdHXub5vnD}`D0b-{ zR)w)!w4lz5gp1)R z!_8cq$v`uX7FiI*Zl&!^VmE0!lh{pg5+gYHIk7ML*95a)h84(pnC7Bb)0dmh-<0en z9OnI+K7pZqO;4ufvw9+s&(a%2#B=B*F?Yw}Fd?YNvx+qVeNb0BmB3}-3Z#>G6|5mF z_7c0}XACjM+AUkG3)@CK_j`CoXOkq>JRPl650DKvDK7 z#@&KmZsuk0Tv}H+R)noBv1MUaGX>Sj`KL+#QN0}D1ew42_emv;$H`Wd}UDaNOlA=m%t(=!UP&y)UMC3&~t zq~D~M6^ilc-$RgTSE*qGlYX;akg&;~^y!Zg{Dx0IK=4;cf4`EvPjJ$2 z(aW@AeERnjWWWkKNRTm<{-|C)AUNr_>IFfb>?xoA4ub#LrynBtZ%KbbNj@kz>9^@+ zwPJkw4-sUsAt<6Px^_>0OfMf6ob(s#WsPEd`a22!Z$AAn!7q{i$CczGf|Gu`Ue+qc zr=Np{qV4h1+*C4Tx5tmi=|7uK=M~(YCUXle$s>~V0d!6l=6FXJhf~e0`~H3LZY**P zyR}O6k@<8xA6R&9J{?}3G;$ZSAzP!QAD&MyCaHz*oKM%5lWt>Uyjn>=IG=7Ksf9l@ zpROq<-OAp1m6Cp7KHW-E3*RxHt}Z9t!hAKYr0<(gw~*Ar@1IXsm6L9E{cfd_zIQ&| zOi~LUn@^|9NjI^EUZJG#o=-QC)WYwXPgja?*`#$|jWb?epnIl3Muad^%Z9x`AEcxRSngKHWf43%_kXohT<= z&kQ)Gq;G+ZkkrDr&8Oq#r0dupk1FY#=F@c~weXwg)3I{WluN`BB|S2qrX;oSt@G(< zIcc4%NE??o&!=^gTKJavbfla#%KpF)`W+1IKVY0+qH!)J%tBj18C{m^xXbh+u8l)w z1!WldzW~2NFJjN6+{0%T1fB^lj>y4=f(H}?evMwl`To+wuT>EEb%Kk-z3kx! z6$F00;NoPQekgcILEwk=B98Sp9)5#@z;6^B&a^##K~|Y~9yP|pekOI!5zAwEfz+Iz z@Fv(?xj$}%eAh0x8+btI%Xo&Y4Gp?A3+@mPh`SVhJ!HCi!5!oQL6@ShgEUtyxNCVp z#HHwKAjjzicYp_kTZ+yg!IcY+Lof%imZJAVb}JSzR@CDl&{FhOklNIOyOIY)S&H5V zc}*_3y*wbqQuH23YGT3d<^l1QqIW??;|my2>TnQTDf$XXXKVrcxM*9oiM|YS8C}3Q zX~jWUrLQk>EcX_$@yJrOO*B_#uC{>XyqcRYMQc|7J3mk^QINrKsRoJ&>^mMV+vKwM zeYxNwu)p{4D-;C2Q*aU3qMvwnDah=!TW}E=o>CRuqag6TdJ%y=4w)n*`U?|8pMh6a@Zp!I|Q>$KQ_Y59)cM zzQg^vQ$H>+#eSsRqd(^Ew8*vY!{x{m?n4&2#(l6H`J?U*i(KtKP>#Icz272Nx%ZVL z?{mj2a@xJO9C@#Mk43I@?=DB)<8HUe74BW-$h+M;Epp1eqa1nM9ks|w_x5t+UG8lb zIpN+~j{FgKn?;Vhx0EA4=H6_PWA07m$d9^PEppTyDMv22TP$+K-CT~0+yfSwxPP`h z^6}Vx9QuNNIv(x#=1rb&ihZ`@n>TpADfZcpZyxe|Q|z-H-#qB~rr2jYzImL}jY{xgR^n6q7vmM{u>-nbGXFI;R+w)Da&vtxs zr{|kupY8bO<(_YfeYWG9mwLV__IW{3CyJO)_|L$H!eHR~PAYic9%xA{jXY5TzR*)AJbit=Wf|OODl#p2lFi zn=qL+(!VKt(lHdruA1+{n5!la^?8D3a`D5yOW z{82$|R<#!C)ypPcSaT?-Z6+*HK`}TjKg`L+W?ook2(FzaTu?!6XSCul&lX#F`L>5^ zGs#hpl4u7bUlHc;VkO^^Qi#d_50+w~ZO zrSh1nGmFXH1FJ%b`h6GdMsmb5jrW5lz(#`ub8<5Y{@2RfBkl+k!7Col@LIYNH%;o#4xS}efxMt0(!gy$^%CMVgt;!`uRZRM7zuPK< zloX%{8a*L1lhkaho6xTZUhy4EbU<%fKcDD1xet$!sPy+bmfEQs$5)DMOObP8&|*ERe&ORT`31j)NGR})~xiviyyQ15mjY~h#|0I<`MI% z)QYN%xZ$EIEO?r#vcgTZR%KgJl@-1iJY8I@0u(`2rXEeNQq5-IO$8I%_L#k|P*p|% zk5CnaA{%36sHn;cS1YQ*+ODZ8DBrhMrCwA;eo86(qDRwhDnJpuu6i`RS~a`KG?Z3( zVEr+BU!$tDxXQ?}GE!7!jTm0V9vudnf=) zrL@%?vg8HO)}~geLyZjt4#IH>g*GL?OCZfw?9RkBIDs7`VqG&z*L$9j`{_xIIjkY2 zoIsd^hq_kkpY_~R^Fi*oUWZOkc(CRGyds%Dr8?m!Jy?7nmq+F}N%PB79xPsuKO^&@ zloI};2aCVstjL@tX_x)92aBig=F&~fdxMLc+E!wU>vL?ljc)XGx|4m=`qLV|6#b|VEfa+lRqbcshb7{kSGg^2Ykd>Jk0NiYKO zs0-mq7>I5vy4qB9i6<4#sogeQQNxR_#`*Vh9<=(xdC-ut15f=d7IiQ$G7=T*EM5$t zE_!{|!$rnALpL93BG~6VTy(6nZ=>&&m*+iPgsd}bBXE)IH$7aGtg~jL@D03hS)-yv z%7`y|5?{{?XKjLOO{TLpqj9*+X0Cd4roB0tt?y*(vJQHlJdG#4NE;OnEGGO5+YcI9?bSv*EvAqUEHMTbm+k>I5Yh`=P zAX?hlQf`vKBt^62Y!p3R6umC6JzsP)?7|_dn~t~R`F`v+2WwT+?P!dl$dO%slA;tm zs4*hhjSeS|qv~G7zJ1q%-yy8bI(kLpqeB^g%tn;q#1t3QW=;qCWThZR#GxWQFpl~q z)G7;kGTKw~V8=_tvV;uj@m^S-ki7`r%{Yb9^Gh*ymLvoHJwlrxlqT#IxU06}j!yYU z#~rwAgS$bGJEOre?&xU49j3e(K;26=vJf^BA`^sbz<|tdFvxn{z>-shAWaBOz+E#! zlVu2%!Hn}FG)7wT!VoIGkALjJ*dCz+*g9rdyb3}kdtV^b&?#9Z8;zi|_j@}o6U^;g z7#fYf|B-3BJsSJ56@4LS?C~_+z+E>(F$`22jo&-+t{|+PAp8k)g^_i0)il7VYYmn; z%0cXKecX+R%6r}L65$>{mi3HL5}g|+&lRQK>Y%qe&O;)vieBnE$oXi$>#P0OB^kd+5(z z+}PN1D0KLb=jJVtr(beIpJD0L@A{YA;AiT?8sZ$aF1eKg54yo6%-hzDFAsAK7+5bd zvyiZnCNoz$q;h3uP4=IL>(g2cvb!S%f}|K!s2j3DapfXoODi)xnB81t&7yCe`@wwEAYRY^OgAEq@tw#?W!V68!02F5WOVYTPX zrjdV$kOXy}2F6xz^%(b$0mrwCEqFsbAufrj+# z@O5?F*_hS2Q#FETx}rWEby^_vuMt`FF%tM*<|(E8s|_UL?oaB8^?;(|G-iC?iM|lM zx0FcsTS^4xEhX3UWn2r}k3fXaL7@txyv^qI+1NTivR;Tfjci}B0@ig`S%1HBO{oEA z%UShqx}Z`+^s4qzCPtcUrx9Irn>OT07JGA_TAUd!RJVuFB2fd8*#ERu(2rD*3L$Qd zs#X4-=cf`YE~-ZSt5$I(Ks_J_I|Sr#%8v*X*f|KH>3$@&~2J! zp(bA1P}-6b(tQ3RWuGm^wf~!TsA`Q}Nbs>Af6KA0$bmd!xk)wOR|Qgpts5{gSb zv>+K|DzA~}R%I#ruuP3h7`eW3u8&}W&T`ek6D&JEF2d2U+7|89AmsCiYR{l6q7#yt z#PRX9JYN*!2cCsAberOf(L4pGW$%>Usc|55U1DX;uLk>|g|=fC^4=l_W! zfAFD`0_DFcRNpbJgQS@Y$bQVD2kX*857wnUdN$?QVS85KGN`DJEeD91{_hn8Bda>U zP(?P&&H()~B~@+f#Z`5U9=0lqHq|gc6OgFJ^km9aos^EAm}-LNH9XI_4MTzsPO^#= zNvqNy;V%>={h~@FUV>c}woFfJ$fM=eC}1X$mKR@lb6UqBLd&blc&&Jaa$6%*GSl*6 zGGepDWa2B5OuLGiC97sHLAss(;0sdXr8|E?Rx(wazFeqd;#?3IE|65oyn06b@>dA0 z6|kpChd(}DP8G1Tz4fiOKE=LsI7 zUxiFgS$GrZ!p=+xd%CA&f4Gc^NK9zq8;!wlE?KhVAO^?x#do^o07``V`8IYhr+Dp= zwphXmOk#(bn<#Tv;#$+0!Rk%aVwah)9@~=~qnC#FBu9CS?n!RtF(Ng!MB?NWS-XF4 zB<8?Q3jH%vwMs;z-T8|&s_x<|6x{Fij}tt)_D26a=E)iOBRsReBD212UeAk`vYbhF zMxt~^%p#R}fHVl36^d&X!BAq^L(JpEMeqTJgXAze8BVf1nn{U3`oI`KdPm)8AD*1!C1{Fg2yUE$Y!z@DmqzT znXgj>fZg7V{Rb^YC_xJmUix${?-Ct!v)*gXtI`LFXm%8pgrjTq1Q3BSntU_L`OKk? zj#7T+*l)d#`#Z?H6MP4&5k@cVCMOL?TLxCM$6>{$8yt8FI>3{SV9t7g!q7zK2V&{I zLrjS&`>rAg-AM0uiXddA;0jF?PbK;$gE9nKO%P&Ikj*T_GTpC#)-m$a}=FfLQOC4 z={E&~)t*CkR$o?ztP8E-i70HC`xQD=Ut&_>6AkuNZh^1y=MVF@9b1g!V0l zp?|{|)q==$)ro(Jn9`T$NQ8*g=owZSBWITI2eha1ykM(1F$0Rc*qJ3@&-!!|N;i21 zz*zyt9DpegzzA8DdauA^j~iABTUT?ns}w5*Fg|e3TA^At=>Lm}7z4cD;+kiQmkrW9 zpU?^o=H_`v&3vA@z}kY@5?}vN=iyLQj=HRdoLu>e`T7{H7}-Uwa-Q_d@aIKzqtAn~ zkxGPT;MPZ>Q2@?7=f^GHxpdM)N`x&e0S5tU2z2!*W)5+8(3Co;*l{8kRkVL z_x#H@pE>wPKfC`-I$rxFI7bs;0zev{*;8>0#_`&hlQVoa!INXq9efXtW_YlLx=p#s zeTD28twMPGRtwb#-DII|LWeBm2wkg?L{r!s?@X>#o2oLI%V8iV>iAIMIKh0rYX8=u zFxvG@PieF*sxSpbS(mIBaTX76*Co5a6^cew{J`&j-hTgjzt)c3lGui4Yq#vvF&!{Q zw5C8e8wWRY^KnM54%PU`W+db@W>%4@8Xk^y? zeVY>b%#~$9T0s~E99NM^6~c%&xel!n3D-jFs99)?T9(&X`bbpvm7AH@y{FMkY}t7S zKJmTHZ3!5$ZRp%QwTth~F|e$ek}s30jhtT-}&27x2KS7CJjJvIi~Vgu}P$Q1C@^UA2{4e2~K z7->R!86S)Uj|{MqqiWem5RGdjzyR|>kfS0UsQor35pb?iAL5FD68zFrjWi_m92r;% z5?G|-P)VK6GWN*8Dr!SC=Oul@&Y)nc*%0zrLjy@xQy2>{!Uq0IKo1vLqIzx&^%!9h zTs45EhQS;sgAGRbGA!UuUIRz?b6z3dd{nd8Q(Lsu#)gp}LpAb*_A#^x$qf2|bC)I3 zRY@%p*rqzYs%}Jd)H;W%Mv|3_TU92iK0^7(;VmM`6^(VQXT8NCSkvPefIN z3prK6GB#pqj3Lr5_94x5tb(E=1i}PBt6h;W*dqg*z-Et8=8=KTqIiuf;9ETQ=%{?$ z==4^8#TZc)h8P5yzmO^R;zEqrcEOsUzvjWEvF7*Ai$W=5O$&!67NU8m7;DN$V@*xT ziBcm-iTWuJAopuMHX<2ubMqQv!n0-_uB`hs!~%vu4wx6321H9hnNN=lY$YS}cE&(5 zTy5h!(1A0afQO42)I$MR+jCqIiBRs5fgLIx&qxYik|V4jH1XR4VZvVCGQ(bhFwJ=* zIrb1gxFCe(jD}vI4jw_|GaB+?jt%23N7#TLbE>cn(Pao@&lV6C=A?u}c1D@F7E)cB zzw3h;LUIf|dZiv!X5rdcQ-fi74`wV$4AT zCZQS_UWxp$BrNxE7-}QlCK?3Xj$msPskbAnfrgcg3GxUFAewX+AJ}Db1+7F)-<9&@ZvNF(1XZ zm@6}q@_;5TDFh8_2(wIqc3I?9Tz}36s=&Cw6us7=Zq4QDFqr{djKfktV&(q*`+cNE z>2VXHswfL?P8Q>ItDeWw)u*qCq{(BFrGk>glpak9 zv|2~2PfCxdu}SF>ZX%^ec&C&eVZc&)L|$J?k8qbJ`Sh(I)$~!CVAxPa%g8B8_cYxLcuZA12uz2J%Zk) zWXqfDQOM9Y)nk>Z>gEcK=;4}vV^C#uLBDar>8FlPjjzW9nvc|D3}B&H5bCk2P@oZU=^AJUg;fOqe7h#vTxRM%+(ng{kmxo7p)WA z%GsU5@XIV{Im$RzuFeSm%(Wb62m&d2EEdX0U zUVGlvRPJRt&*1o>sp^-vDL3%0OQc#Ookmm}w|HLV%QZFy;Bv}+RbI8FQEszR(M+3i z1FzcQX1qcpdX1ybc#|*J*b;yl%Dr&j#GzkPd)KxpH}IzIZmsgYQc8`SLyH&ra*YiE zSWCGV&WkvLYAUxK4+y;IVrkS!m2phP8}ISu8ruO-r`!wYJsj#am8*$pr_f`B z8w_#3z>hE2*bIO*lzZX4hBZP%b5RrNAFqX~9tQ0Lxmr+WL)9wm) zkykq$fSxXO8~sZ^gZvV=!N2q|@^+wOXWEIq42SJ*oqws&M;D_EW-$qf+lG2pP-0x| zwz^GvIo2{I6grE|T@_Yp(q7z(79v`vs3JBqX_mStEA$sbxub=?Bxezu@^V|*OgpYw zus67-)E8lItJ|?R%?(?z*OHYrbmoGPGZ(^$g7g}_o+@V5i z4?G8rI+feZX4^d~syQ0y*&1|L}TP@fdY<1GJ zx2bmQO>9+MuTawr<&L?@M!8dsa+~!P+p*Pxy}?$;(N~1M>H4(9-o#b~E;Lg^xvSiG zquijSYFnV!s;v0C)0NJX-R5kTvl0w%a!1DX*PJdw6dG43B4p=Z^8Ly6*nz5#blhdu z{x(i#n}1Ed02fRhsDV{x9lK%43-j2@!6lCw&SiM4uXFe#AL->^t|gG`tj0;DCo+-0 zF%C+QTBu2}jAy@hZq0$Tl=8SQlh&l&h#>fAN_o{xPN}4xhvOc8;^VFwT(g@e?<%aP zqRix)U6L%yRd-uDNSAl^+jOIr=s@{aJ&|8g*5;*I`XVI1wvLDgqHlG3o8^>K`RQ7b z<|&u^we=vySiK_i_ej^8c28gOagJgJ9!jwJzhrl-I;bf2lPMymmyl7~_CxT;f z?rOi1upsbFw{B}QHn>u6G@VnsAMCNA+Fm!%D>b9mrb8r`GfH^uW{8v!@skB27%6m@ zhFY0U7{(1;SooEO!9O*fsJ3AkK-f?sM`f;Geu_CMl}!fU<#w*f{k?BBN1{!P;lG0h z_xc78{{N=IJ-)%+Ee)1@Mpsrr=nVxAxa?59&r6Pf55@(zjz8E;!4pD{wAmVj&~{vS zG$n?n-a6N%rk3E*Rq0o7M=zHZjKY4<>$N^W8l#b1F5v5?ulhhA za?w$$3nzuDX;m5wx(mWRF8D@YMC*;PuyU0;!n`wRqG&lqlrrdBwoWinPn$@`>gb>$ zl|O*a2|l-wijJ~mZ?wvHn#tk7K~=sKc!<cF&uTBF{AUP>0T5YnQCkNHF-tKr5jSMzn0vc9pE4iL1f_>;2sc}*)Gq{_A8 zp}lcEM!8!h%H#l##=@r}1xhNVi34*DQs`nNVtfLDwhHS(RxjX4E5k}?zN^^EP>x7h z_^=?g#z|~ei^DMGumo~UKIl=g_E}#n4!IJuHKAp%ZnMRqw)|k3-k@r?`2`|&8~g$h z+Ebq7)L8$-R%yJIpl_&)uPoxelJBJ^LNh3olSxm&*e2)42-v)7&_HK=lft$~P6Ql# z0#4h}uWE#gNj(~?X$c|oRgN<{?v-)IDxrZhOkJD@XDp~a&a|L@y*SgN8Xq%_MYXpq z!q{a}V3!~?Y2aZFM3V_>(=C%picq5*OS&rbzyp-wFNHx&UjzwnoO6ipO_@|beH59- z1AmHmDJY<&;NLX{UL$!?rqN1+2t{6?Jy=ya=M@``xqSA2G%tDFi*v0yJ=_t6wzh$P zX>~GrvMOQ6r>gU52OGH#?cyHiB392+;rVcQE{5j`AAOg9-02_3{Nt#9-0B~P{A1QX zFovsaclgJQe>ne`@{gK-AYG)Cp*{$s+AC6`_C!k5o=f40gt@(+3eShbb1^)>9qRpZ zc)k>#=fd-a@O(ZzpAFBm;rVoUJ{6u%gy&LtzJS|$RrmSud^SAKhUe4a`BZp55uQuo z`FMDq3eShbb1^)>9oq47c)k>#=fd-a@O(ZzpAFBmJhO8ZeA;Sno7|hdyojR{_zVId zv1AbjCC6XE%1<`+QMsOj70Veq@=fx-SIh2PaIB`fO_qQ!l6&W~hdx0T=25G{RvjLB zgsnPOXI$suIoKCB_aZ88>!U-}Tzou=5R<3aFPqAImqdN!>Cf)-5zo2D#jxJan~!s= z&!zsIbM;=aGP1`hj~Nzn{fFya*GA!|zKUo{hwpMQ>kCATm9lBfyo%=yq4HH$uffA9 zLM;_Hcq8;Oq!|&UoJFYEsNb!UxF>v3N&0WLIjaANutH-{&?9*$_vMozaPB067Jol< zLpt0LRS!|eB!ls5cO6Pc@~D^h1Nn&)htg3T5N6-)x*;7?;Qz&x5PuF$XFqWl{w1^j z^GE00u&gQfW-s4qe{Pu0KFO-8JNsX{=G@3MM{H=#<8B?lAYF4`IB@w-{rZ{u>I@z3 z`E2d+`pT>pLgOZfgEVROExHcnQ+gEf`tIz*bM3O&Qp zSzVhYhwI{!6?7)&!A6&<|E=H0nGxPWzzYh?1SP`t3D6w zvsnnI)BK!pJ<|wq4P-4Tr-Al;InBMO-Sr!1mcF-nYZ?uMPlHrA@>&ZHt%X$@gx9&g zyQwgXCTTj3={#kWrBSbDyP}yVo0@#`3`1~uny;tC-SafZDvdORNi(7}EBfkQhmyh? z-N;R0{@vOAXFeUU>CP@|J~QkEp%yKD_1QAi#?#nQp&or-{!HDvFgb}EHQLw9;wa%@ z&8HWIo!kE*6;)lSwL~XG9|jWyoK4=RW;OwtJ#Bf)!;Q-c`}n={sV!JoQO?=;S$SVy z%E8?&41@u`2C=5Y4~1(~@CXAB7GPS^m<7O&wuVa=rU=v#F-FT6HkcD|ld@l?Iv~5| zCgC>EtZwqnde#M$!B1q(u(lB$WscqQ&TfQ!67kk=eao z+v;vek7G&wKb)d_pu{v?3@dnMEV_aPVsE{>0w&27W@Sv1{h2T)hWLQVQfeft4~IzJ z>G`P|0kV`%J1$G7%!L~ka~znZ(sd_iI5x~zPWs^HU9L8#`D0PcpN~yO9!7E4T<%o@ zE+P!Nx8uqb*p4eB@Eo{uUlUih&4B01%n@3hQ6c2>HPNtQQ?;#KwzElQGo%7R71VSS zgSi5$y@k{{`k_6@u97`{*G+6Y{#agTIXP@4W=rthp+nHY&m%#2o&+%LO2M$ngAusA z5EwTWChqi%yIwIKV#7~0D42G^((cMcW;xrnu{lTQ<++}Nn;OaEda{|D#*Q?f*NAOu zhS+fKzEK}S6!I=DP{D?I{k%ql-<{=*7;X^(Dsc-N^NcY{X<^(EHb7urSfp>{jo<^^ zB?<#tL^kIq2^W32s8)%cTOC`idTYvoYU3~fSNezo` z&EWbI211^%mf@;PK6$SyDi6LG+D%h(So<(;L~H2W6f_-Y)W(m9h#&f$;fwAHq#J~$ zo3jB6$_kEyngKY8(OG1*#;$z6sB{F;X0eiiD~;5Le-awka*9HWg%q13aU+Zps;cZC zZ)9nq{U4RV!?9mfNols*_=PR1BGr`{7qMYdi7AU3j3TOo)hOn&MoTe$WebsdD<4s1 zsD@_dPR3{_hBD@DwMwoP7l~&<=$|54kL;JJW6qZuXps4hMuuHv7+Hqmg6%VO9a}0( zpjz`KjF!O(nzS%d$Eng4H8s?b=>l$;a?j5b25R+dsh}(!g%K8k@{lDpBTHVIvV?k1 zi0@%GC*lej#VjOBmr`7St4|PsbZb9@h9JE`72+Gy2>vJ1iL4tS1Jew9m3&z^TlPz- zxiOcAiB)b*Bj3d5>oc>Qn=0RggnS8U-6SSv-&rMcBp4p+t6h(l8*m|2ou1oM;jYVd zpyrD@qS=8W?o%O>r^Rj|mN1uL9c)n%_GKRKI^Or|(=Dzp6FReSb$JUfxVo&!X;D=X z-kH%6g3oxrPaOmiSM{zgZ{-CkE*ybsN-SJmzKLLPb&2#_!`0=RdBN3XkCOK)!sq@L zf@gj1;;;-4@9Oe4US{XhekGUk*OE{ER)W9jlOqz}aCP}M!5KtDN-v?1;Og@21d%@x zbeQ00$=+OD9u=JQBZ`qwNN{!e4uZker9@N;SC{V;ob=;LFL~qO>hfI#kz)~5^211> zc~_UW3r_ke#jH?_um8IV23MC711?-$zDID*b9H%#;G{QKqZ<_C z(|?d)aCIs1=EBwGhXg0RxdN5sPH=VkVS>o#DF00azexV(>hey(NxxY!TNLB-{|Le0 z>T)Z=!qw%R;G{QKniAU%t}f>ZeiwSlom^V*>3AUrnuE*jikC62WnM0~xvffvU(0O^ z?qUV!@iw_UUF0^qO^Un|r;!V8i-Net+*D3?k=v+9JX&6~;ARxWC+5a-I=mey@(x@u zF1QT};t+FPIbGd3MZO8(-_ zKbUPCTB2*MNL*Or6)$&!*~afAa%oD3|4JO(nSV+=V774&iSrSq!+9mX>dcKK?k`c> z0NCVplrsj@Pe_O7%Ao~LP6*=ra4i>^rLPdr>yA(e<7 zN`Hx7Jp59Ee+JyVWJ-80c(IgXh4drLiQg{0`1HF8%3Gy*!`!PE58p>n9-_=y-&K0? z@T&>RTcvruoYjkmX9T4=VNUt3(Tj&)OHke_&Aa76y?FTb1f@n{&i4-M#lvq9^&YL? zsE7AonaOeG&F*Fz>b5SBGPteWR_?MxZj(E_00rMrj=RonbO#sQMeh1?+yS@FU9;fU zyKBpF`<-*M3$E_6a@>_H2d=^iuDiM%w+ErNz4)hf`^s@U5yaYs>sVJ}Q<1w23ka9v z)zw{5{%!~APM6?t)m>VSn?a~!%K}t&aXD_S>vQP>JLV1LIL^G}^^LuFIc|XMEgmI1 zaY|VtU+%?R7w4YnT$bV@q$F=#aIw2-d7Nfq`JODuCHSNixkw+TAeZm>;UIF6@5zE( zf=^13%OcZDK`x7aMiIIE1n`1ff=^13%R|5matS^uMK1C^S&&QcNhxx97CXm_j}cP|w4UVJsX_mt!A zfnwf`8)bKUIqq&K=3RI=cJD059fxAxArG8K%W-!>F>hahcHUNw`w=MStqai3ZRNO+ zK{0PxfOg(oj{7JS^QHx8=hkwZDCWolv~x>2j-97_U;)}`=XUZ&`tGI$da;ee$~XAl z4-Vh^xcJ_K%RBdkx6m3xp=STHaCyOnYB<@fvv9Su0v*`ELFMq`*Hs%;gHFW5d-#WT2ZBg3lLQ!Z(0@37kgH6Mj(Fz)Kiw&kaJ zB7};qN8S-*Il-&$BJgH#mrJxWIFcLs9HtAfOvldmI`G5Fs<+C0 z5++i=UggNO51XLq5cjex`WS_G>g;Xpao35pDOuL*%sP=w@ZZY_hy-`|oC9F{yt_}y zbl3OI26~=bh935L%7<%lA@3|}S0oh_e1-^2d=eCXz83KIw4SK_e^F1a#Gi`o1gAIq zdUP{ISM~Kd;^cgo?G>^TRW0#qe}zRr+56%Ii$-El>vRGd%_^JBx-{qBrPl6Do&h$K zoQ*Ll(gy@SgQXN@@9%`ESO;Uw_j*S*hJmL|l&p^Kz|0J#vGSAMSp%#WfTdai*eU=j ztp(t60hnC_z^wTZM&h_bd){EaUFBa3ab z3%xkP&krv1<4X-w>jcg#ayG=#4nbp1GH)47`T5|dks?vL(>%@Qq&LhcGh_KTFVaEY z}h=dz!E-4`PiV4ca|7x;h<3O2#i)xqSQPC{z3D0xjui+^{gifyM81VyoVE6-`BSN5K#IDq) z`rrY!u*ri57%m*3uHr{pvIb71WSgg(}W&LGRWSSYM)|$8Iz01ViT`Y zIu1^Mfn71#{8S$&&zs^ACT(; zEmkjIlW@)tzMqlF+&-iM8O_EqnLHTBRVEIrp3q?OcQhP?$U1rtRh0-L=rqROK{Jf? z_K^o!K1&zs`5adTGQUpnYw$OaL422HADNM)2zrn=Lv*mej#hz6zyhp^NYZaMg>Vp| zDNLrHLmA%;mVRNJ3=b>g`JxPbCoCXE7|KAl%51!M6lKJrjDEF(GK@#@k?|usq2`ek(lR8P)A3^I;Giawrh(nWK7!F$}}H zY^nW_ws-rG`ZDR;M5;keeKm}2L0Aijrxu1{`>285GTNp**6#GHO(9KL zH%Q0uC4#gvn(B~`RTGD(O7mORwY4V7$E3B+uZnVz4)-+&XkpYeJXuy%c7QrH1s-ae z_Zce;*6-j~19*oPLniOor4Q`|VMrU~_JTZe5R=rUXcfeV1r#%c%fG2=8JB-k)haF* ztu*2mAjcCn z(5Zy4@03wTbA63@x765KjV;H3{Rm^bSu075)2k_!aEnAd% z&%R$?8TX!K`*;dLnGUW6VS}o>#M>_L_axsKuSk3G!eRI4%sN`HX~6bke?gq0O31gB z)uODYUv6OLh{Lvrsm#~S7}QqoV(GU&uBNL50Gi$Vdbido4rho6!9bHt&6uB;Iim{q zf+X(Q7C~Uv5i~**QBGu`b`YH$rE$G~P!oM%;k}u;3due&H`w19MN!QEN@UFY{MjJQ zELklkICdQS;zzVdg0>$H&xiD6*}uq>s`6)%)#J15VP=xu*I~es=amSs&HARHVDJuH z3)P1Fy*};we;(w0L@e3bp7vz_?Lo;*^<;k<9jy1Gt_CVlT$pjp`{N2Zm`^OT(rG1l zLc#h~Xj=Vx>_k?IZm2Z6VN#!7F7|eKK!$@m?>%i>le|pT0od>f;bJfVIM{9I`w6^f6 z&i0h15nv-qde8Z<>l>_AkTk`~6$9(~fo{p$RWngy(q%sh=RzJ3ciKWwR#9lBnaMC4v|}<7JMzRt z6ZO)j)@H;wuxMEzf5loC)h)4TydcFKIEgs8LvE?{9lqAbRO_U<);1lNCl)E#7q!+) zn_3Sw;aXhcHP*UMweGN5qt?|@>)U;;kE+&jbFC2@YlmyC8j4!$rA@8P#Am>@PG4VR zt-onZylT~E+uKs@dwsR_~(rqs&v!qhI7*X;?j%NSMDG=@}fyH>X$E=Vhh zwKwg*4uhF(Xo}@Rr{8H1Iv+7{qFxY_&O%=iRTo4|xVXuAshErODS6aNv~(UeQc0Fg z*xt=lghpc9zUI8YXuzv-gY(lBgqzcqYi+=K-vC!4tMf1e&f$t7YAcS4{X{Unwhgcz zfBlT%q6Ud+*V(jEUF91vRid!-@P!72F>cO7Vb*z}(yxOr{7<&v^c04RsODN973;cmh~0J4W5GLO9iQ;S^Cv7aFONRw=k6k`x*l#MINFxHfOn3o{9D4ST4RU8#u zQi;Fg3msQ5mxPe?;jlT2oTm4 z1fD9DMa=e1qT{c?kl67bytbBrP`a!d;q@Y*rBX7QJkh`~gRHSZ75huP!MJ z$@OhVnkqY~E76(F$?P>zbn=?h{Eha1GWAw9&4OkWy=VG6v4Y<{dHs73s7L%t8CW@7 zlT(0;mtV9-ZVPKgB==&3g-U`cGsIn_xHj^98;D!4xHd9;DRD^U#co|W&$YxMi5I&z zvU*a8MfxswtIOZ5AP$MU*tL<#n;;G;yV$jn!y6?I$-3CJk-d{JFw%6f%p`;37J0h? z;*g+2SFjw{OB_;j=pvQlx`^vkTpL+Bmgl%9Ag+!4Ttpm_mT_4iNkTM1OimQ`2aJe< z#J=T6kw{G9a|MkBF*(tg#ODekxk~hfZhnHNA(vLw* zPUKRE&uK>D0#d_4&b>h{Kg6@k3HmW8 zvxrAth%t|mQB9urr@zjcVTvtoaN2pooYH3^aT+-g`WPb4X>Q4$`Ma1okm#^Zi z_HQIN7VG8}=n;;bb?u^x{7np)<(95$%wklWG5c(b5L-eXikpg9B0IIe!6Xg)42gs2 z1ISFd<7XMTzokMWtQ&jb`Vu=4Gg#A{AR*&l5c~m2h{pc{{&xnJ70u3`I7)gd2sq%q zN&3GP9tf)>byO_z;JT21$HmUt<6M&t_9T)2;nE_*6ywL3w|lZ~S<_&N{W1Ny3jrOj z@5xSQ-Uz&r8TpSWtUID1R`tgbpW%~^`j8HC5EhdhlsYEP;BWZ2`FTziXesCLI!=cN zq_Qf4sV30*#U!oHyFPhf5t6cwyX(D`(7a?;o%o1(K-HZPCz6LH$m4V8jSU!Ja(N<= zn3U__BHBCxvqzu;DwT?S(R6>+0j{U^l+euSPcN5n0T{>tPmOR3v1GVBVlFoJ8MJBP?I)Z8@${j#T{- za9rwC!sUw~M*a$c_fL|=C#i}I1GQEvWnZ={ z#fEp&V23!c`EVWH_-q_%n02_m!+7fJ)MF6Y8Z0mLqPJxtzYHCm%i=1GOU8nz7~0sR zjgm^dQZkN}n+I0-^s>2g@*dg8V3$dSFtngAD^$43=_q&3M@Xs|8;zYJSd%lJ1G!L> zJmREPT^jeVu$&Kbomzn?I!s)wlRO|feWV*H|B(s+sE3FXp`0GRr&?6(E*(H{zm41& zrW!DkPI!v)=_!)Se^61!VO`=O95;ywmE~v%pvHBT%C=dha_#0z4X%5P##ML_1>y=! z#U7UDKPuG`TCLBVUCqY#TcyM2T`CDmGzmN^o#@DM=r|s(2D>^ts&T~*hN;v5y@J~- z-7mJt~Cu_wL(rkSzkzF{Jtq4vz1|` z^+04QRdz00^Pv_+J_8|*SqN;(2X9_Qn!%8!V_7~}{V385g)}wN})crkjC6_ z7HQPo;7CH4ef>xtFwnA21{yc@hq)B5WIryX5gu*DE65F{8(tId-P49ek#`rsJXJy| z9v{o`+UTJq?;OTNE6y7IlN9~49IuW3Ns9hij@L&2Bt`$U;uVp5PkFxGM}(G9jk5=A zoQWk=4Akc*~ksZ^($FyebwEChQ9vYse&V(2Ik9;Pug+K7z@R&a^%i2*!pM$bl;OtF(LgWQ zCF0CUw)VbM;^Fr&ePKyx8LS73ZP1DvUk2yo^QLLIQ{o11nl^q4A7^0rnFFRiJjeMw z;yq%2_>1$L9!n@)Xq)+Iz_2$2KWzSG-4G^Rt{rUVMX*2e(hOX()P4bJ1~_P&1;Bn= zWowo2{0myeXlY^#09GSf+JS;T7Qpy=wk43Q9J&uAe&KVvSojP|1OmZsWx!g>Tn&>C zAH9y%kS$D^#y_hSATxZdRZPGaUyTD z8`11-0+h&d5b`C^BebWF+H)JRKEj-Nj@BaZlPlxx+$!X^H!(qOZ=81Ux;O~8H(K>^ zdtR+}`vm$idor!PSZ3_NHG!;I`9N zQ^W0zE`D@-vr*}FZ1AklUYg;$y}3wm-2#Q%8=WA?LWJ$ir3Cw&Pp=Ch-QH|cdL1W( z+Z!3F(Cy7;!6$in-lx~ef^KhYCogsLaC@VRBHi9>ReBvWeAB0wUaf9#wh69VBY)ds z=h?csF>@hUpz!xPDHl52>!jP~@Px8mW*CYahxvW+Zm0#va&!8#JT5|!5o=&``csbE zivH*Hoc@&Kwx9&MVora`ahq}YFv(Ej+GJT>B8Ph`u?zl`<7QA09mRYgo3_$-7r7c7 zK!3_{8{HtDK=r2_w*gke?tnk#xb;l)ee8L-ZYhEm1L=+S5WkfK#e=#x<$%K0uQOr5uMkk_~ za4#d0(fy0jiHIiL%ZOxj|6+6^q6zmhA{pJk7@de{!o7@0M)xm9CnB1c{CE|~=>Em% zL_`zrWkfQ%e=#}{(Qr_ZlZ@_Pj7~%};a)~0qx%=56A=xk5K1qS(fy0jiHIiL%ZOxj z|6+6^qT#3^kc`Y1a6o6~3uLQBS25ap{;j2eWJE)0We)1NxZE9Yki`!OS)7-39i=aI z2UCztxSJ8l=nkeJnQ%8FlF=PZK{DZPMkJ#^cQ6IXgu5A$jP76xk_mS+ zA{pJm6eJVwW<)X%120G>+|7t&bO%$AOt_m7$vgtQAenGCqgh6GFa^nkyBU$pDc}Xk zgu5A$jP76xk_mS+BAL^`3z7+UGt4qFRbV8;t&B)U*D)d)e;xA%$^4MaBK{DZf#z=;%7^4}kW<)c(k`c}LE15TF=7*hT9%nVC<5Vrm zO#h~x$p{EY=fUiZv`?~YnLl3f#wJKBv47G{P}lw0-&c;e-2)X-Pry|H}H(-idv9b`?|_}zaMcEUbJ`vdK7Ob$$^YhfRw z(Wd>4*%8(zDC}djKhXYWrSj3KTiC~Ff1v%1$%kok6!tMXxYho~>;>yIF6?8pPtg9x z_F>vIg?&t2LEyIE(kWfo$E;HjcyY=d_AwiPYky<=C!OAfeauA)0=IpVHd$dGvq?eV zwja`|Uf9QMQ4qN8d)Rzo*S8^Orc=JwO%3Ov;qYv}<=_kh>@owi73(o(uXm_5+9Ee| zN^5p~2iru>aD8!+avx|DxsfwmGuzwWCUQNO4`$xCuT5miQC3~q_O^+1=(?^|WKWyO zHJtyNmEZ0*kyx^KxVOPpe4EIXoDQ22-_ACXIFItiemmMkq9X3bm2I_6j-tCk=yHawgoVizrmZuyX zTy_(lN~ix7C&J0oI5Oe2mahI+^(nrKx5unCvsBlTS?%7tG4IrUe`>nd68l-^FeZt}dK@AYdwUPZ;stLKxTMjE{ z#bqSflSL^lB0`}QHP@F{`o2#hDpOxdYs>sDdJjG;zLXBPjhOsWI?^^`;!El1vIzBP zXZGLF)9mCfkp9^l2|&MN)>e-@7z~};quu+WA0t%TogCvaygRvz$LMZ6$#lAr-N~JL zTqFG4?neFdZtlc~2`=ux9Wgyu^TFx6_eLkk+3Z5p5P%`fy-4j(@y~*J2(wNB`F3tf zu9O9fE{Vc*>c&knX9nOZv{P4n!N!FoXaI1h=mGLTgHoJ644-sL)=}oSl%S&4p{uCR z@^{x|A&pdjqQHl`-%ez9jPnC;PYsbLGcACWpln-YaUIdQIz3dGm4A??-;=Ie!;rl0`QmJs_!*I#Hs&?hI`?>VOd=lfgu+g;`x*7y$N!I`t1G z12XA=_imws>*Gk)Kk9PxjkJLVla=?7;Zx-!`%%4w+H0=F#h7 zX;v+&_lT-XFM#r!kim-;$MFyfx8e>x$n$mZTd6?!y#tj%_%H9T=T3DZ?tUB4HJGfR zS+n!hpS$W{0IAbVSR@+VIYd^8W_MLUib6+sRgSr2OXXIv%q^AOVksdPZlv>XLN46x zX)6Dva0&P;Fa2v%FK!^;blE=zpMLi{0P)IA|W>D!qs>Dim@z~<&>&E}@j?2?f) zmq^N&4_N!k%`2Scw9LKnZdS5$KmRPEFq7z9n355WRqI1s;P5eeS5 zu}~TXnIA1Z+Qqv;P|+uwOrRxazun@!#w2eb))1e&KY|Khc_=bKCmRDapSAgHI+^vq zVt}Zbt9)8Ml@}ztn#6j~VL_$qKhh zDcY?9V)B?!9?(qtro)%46I=?@p7unP97TBSD}Q zh@!&c1o(7{td|4P)2=dIEJnUB>kt+>$Wqd%j+!iQ*-~alzAVv-gf@95&Fm8vGR~N` z-bIm9S_F00z5&f^<0!GN?782=T;vo0W|r)QKmM(#_DPeJYmIo3R2K33)79RS37dhK z%|Kd#ZB(+e+vl@m$T6;mGss*I+=?{;;(I)*Y@m7AS|q2KKsOP!-4;cdH$&LjOlzxi zu`w*+e>}nc#6#UXS>Zds$?$6pSKXPg8_*0ZF2max5A4q(5idg@{r*ioVrD-qCA*C5 zMKljct>8I=e4*gC2$D|0=lkalJj52}ta0;-N_YXEhgzOJ$MeAdK-}}#LHnA3*f~1O zGh0ObiT3x;)t*C0Q!7CalL^AKTKj_JIv<{tyu8d#gcV{XI|WFhwU;+Qj{}nY@s$nG zl4Z_P6!cjgU1d|Ueph9265dvkg%a$hs_Kgut6Y+kFf}2*O7`t-2sOcS(*Z3~@c_s> zBOpo#{ri*aK!RAZHU5jdnIY*)_6)%R5B(ZJpPekTF0G^Cl}!}CEBP#8YkX4sYMghg z>a;j1?ShIpp+*J>k?5`3n`lw4T1z#Em8)+IrOQ(_X|BwhnP?>ExUqPaQw9w8uA{Rl+1rj7Gq|CHVI}Sn-kL8Os1AlWho(*4^tvhOY6KDLxP`Or#Nr;u#!Es zE-%ZncygV}QWjWSWT#tXgB_2DSQ_Y0pGk&BL9wfc0b)yE_=|*L5#rVKgM6P z!(cQePi5cTeFJ13sC9M&YliVeVF?gJS&xvllbp^mnmszt#U=+!KIf+D z8t5L=FHX&6&-7YUlp$G-RhqA&*46PGqGXH#4`AwV%=4fJu$vYe3g6Oci>(d)mK$!@qw6yBao!{HJ4Sxd`^@LPKk%hE}KHk{H&{(@neTbf3QEi8Zs6@VpT> zR1`ks3-=ESx4<`?e^B^PD4eN9h5K}&@S#%S9gksRxOu z-yz;O6P6YfN6ClovB>BUgH(ZA^NFkWTZ#Dy_|>+nK<4#dEv?!xJ1A5~_J_kq>-Ff} z(+b|sAXv73Q+ISWeJ}*d^*J99 zB3aDH{kU`tfgQxkCn=Cssm{U`VsQi4F>eG|!;^tzi|V#@?a_C=obbbP;zKYn*7s=J z@PTD?J>N4!_>AC?cW2QpfQ-I?g!QVQ8B zz_<@*jK+O*@~ND4ve%q5+(!y0YL+c>Tx?me^3f{X+Qq{ALfS=poSi+lHU*G1C2w}l z_KGIi{@T##Yn~T-f#|ei87(L8;i#mHNkFe$yo?h2)=TfI7w)cIf}3M(U~f{}q;_W> z89StQ@W{?e{5aFDk?V?kw1Bbv{93nm8jQ1u>-*;`XWe&1S*du~#z&_)X>s}OvpGyVSU1+$QrIB_wd#m7= z@$yxlT(YDn0$na}KjCm?t6NT8*}h5eD|k8Ulk1jK3PL*tmt1MM%GIr=u5#Zj_%0># z>2-xH#i8AToBa@fwX7>-UGcs}@I6Z8)0<^D((e^q_sQYvcS1qZ-zNAzUVg`?*VQtI zx86bB6ffaQc!h$bf2-18r9?ixS&}3D)q=xX^Q&U%I_RqSZG!LTv;)R&KndY z{W}D|PKkW_jRd9ObWre%cnMe0GYXRaoq}JlL_WQ)sHOOHNbt?PEW4t9m*9t$$fw^* zPzq5u2)>OMFLzs5N4Z__8>BaMD z8?Tm!xb>FDOI@&TnNJTbl+3;zMDyu-{9Y=>%zS#VoZ?!y(OtLT)+@z^`LvA>%-|o> z?y}SQ^gua}S?6$&>DDNZwe#t0ImOkS$L+@-rc$h$PuqCRyppR5-yqKE0%z#}3Ehc>(T63g$Tuvk4XIbCPH9 zLWi-(JEode!4xVY6h4;O=yW>(=t z`%gSvj7XYUCd(r3^P-1~;Yc&9@QM9r9xlehMMJ~)^-CTu1|rR@!pHTWd$<^dG_wj{ z)_>vQVhGaAGFMf$`zxHquvNW?y)?|xbJRE|R zW)`GsnpqbU?D7-Bsx9ry_QlQyWjg>6Ia2S-7HVVHh?^B9WyhiLWW+o7=4sqp!ypibKY?a+(oQp%PcQ&n@lIA7T6 za6H)90$rjPpIp14^BA(0c&crIE+tLa8fiCl9s}3K7U*))gsqWwL+3GkUF?8%k|yko zY%>H$E{rLLosMmWsEzG_c9T8`zuIPq^o5bdu+y>45b13Pw3qZ@XJnfp(ig@T!%oLG zL!`GI(3PYQJEN-zYR6Oy(7_ru=Bz zAwR>}W{C8*13E~eurspF5a~^L*S14Gy={g_Z#$qvqz^kI+YFK3lo@S1AZqQDsJ^$O{cS47> z6KcO&oAEoLgW3tTU$brSJE3c}6KcP5OTAR@0qum^uiw`Coe-n{e5<%sekXLbc0%pf za!7^>MOSJk)P6-b;derNwG(Q;t{e3`q21aEwO`%U{7z`6c0%oW=YZb{U9O!_`;}g= z-w9o+olyJrp2QDm%O%ObmEyD=;uK+wJy9u6+ab;mhS?L9;{d#|80C`xq zg?@L&1!wN6y^4`P*t8@F(~cw9P>nMT10vg??HrEIB{`V==-l8v-Q9isEBydUJTUI+ z?W^=O65s-@59e*?|G^c~EB^FKMtNIQ^EQUL8jSka=^V=&E%v605y99S)%sJPlB-z{ za1k=$iEppnp6X)~;a%6;N9Mv&cfGni>_@gTd?obc$yvC~&Le&Gj0uFzdKDM0@Ead; z^?{(^wY!kOl1vpJu7$2`#j8|f z%#L%ddzD1utJxpol8%e}dQ~bGG_TxqsmwQXzu%_Y{3 z9wViwJ#uxbeTT`9=LMw_apgK5Dd8j4lUZa|!$mzS^U|&J-biN{SM4POsIb&P;uu#p$mU&aTo$v^%P!P}0)be+VtUQg5q|Ju$1_MZTVQATMnZ2=SWir_mydcleCq zf(UWQz+{Sx?o)1NXT4ws-y2pyo<<=F^pN8dX_~5(ZIbN8$G>KnNoFE0$bR$JzS0Sv z@-|7%TXm(@p(W~KU(scqfOI>_)E(W{4JPegO?&c=K#0ezRHsQcV?7~#n7lK#`p%fC zW4XAm9(!67<<0oMU>Xn;XyNUuRHH8>yza3F50yF+CqY)_4p?CKVVY`+HqsjCo|m)^ zYPe|ob?E<%(*_xUm6;e<1-zhdCF}B}w+VKWs*Icuub2^52g+10wZ;apic01N;EYn+ z@oD0@KFaO9c>vS$lyMMy?Gz*n^Bt~tZY!w%^^-RYOvyfcK7%6jq)EUJrbXNdESnuy zi_#a9eX&G2kVVQ7(!c6Fd7LWep`>l|kd6#&ME=>W^&JNXXqo4gtS-`?Z1TndYUq0I z&He@Y!X}p_sV=o$=)medlL3mP%s#^gbDPSWZNam zm1J*a2Fylp9+2m6Myt*6Uxzzyi)OQ4C0RBKB%w9iG{gHTO@m=IY$Bfn@#KJm0Ij5K z9i@FQ|8JbG2c3)_s}>`Fm>9DZuSVk=!Z*6NsnLFZ&KupKMq`qm&&Ynw&k1d>AsHIAeW@bR~W+S?=-oYOB@|Mda_64_GgGz&mJ3=Vz=KiT7 zzs6cg3rUu4)FfvKOnAm77+1Cys`(LU%*Z%^^>bsIBiFX8HJk_hf9$;rm|fRZ=XuV# zx84t3Rh6WYN{@YyUZs~M+lo|v>qve(j-A8=2OOfrd7*NGWh=(eNu(r(@zD8bBh}1j z(-~5hGvE#Z44ugs+H}-(0;az-xI-pnARm~F!{lS~5jS}HGff)L@4xmwk9+SaSr%cM z@L6TwvtMVQ{a9=5wf0_X?MO^t4xfRGqb-eX(QEdLwhDF4(7|6smztHUQBC)3H zOR#lz&#n55Nn(Qi^|hLE`U&>>UOjIV&EuLheEkUZSMj34fyzW3fDqhq`2tW$EJxqh zicB`7F)WnUgwD7Ax!5f`Unvq+Bu&pNg36)jV0>uj>gSLQgRsV+NCx32i{dA6kZC2i5wz#*V46|Swd8c>qobpnwVQY)5e|Ut2&F+doEHgXK28}sUedV+r#|MxL@*Qd z;j}8~kjT{PL=M>Ow!`iL!a)g6hwM5TvV)|Ih&1Bt{AEZHe_k+5Q0GCWL8tQ$sllyM z>(tS32sBFYlN2(wxkE(cOxw=T#}x53>5Ts8DP$)_R}(3YZ=`@%QEYphLUufK4e4^T zU7WgCwAnsIAv+V&8Ho;R3XPR;u;WPA!HyjS>GVXWGsSs)IL*<1txj|7^hc*BI+7_4 z=PSx;Pf*B?d~~iN&9&mBzM`S_YZS6`o*OA7b+zKyzM_`)84B6q&P^23iHn`6=~yP{ zqUkvQvlOxuo!5eT9K*~N$1&+0^C=W7*HJ4r6>y_6$KEH$&no)b`Lxw>=pVeS>~K4k zebaopy*FEX!{&sABb=?h+1ei7qPK6DPdD{uYlql;t#G{4?#ov$aob zE>$@C>2xb@Enkh^{TjV}&3xMFS=_Rx+1VXeHpfEKy_K(mCmB`tq4~7a_qe^i5{fgd zY>tdp_P)IWZJ0r2XP{7T_7v30j!(d_sorb^NSGkrzG^=0^j~h@mU9-V9XO7fCVJoY zrz)|~O_bq}JSK@2NXe`?NdB5n7t%|~Y(V9O-GAcKh0ank8_v=8S)VSnm6F+*(uJO1 z_vyk%DVeQNx>QP^^XcmdO3AD^6a90ao|67e(#`SfW<`AZ7J`NQ?`?|s^c@7HWM+4JPInMvoXt#k9g^yxYi*Qv@yO4l*>^FCdt*-|oljnZ{i9hA&;RxKs7Ii>3$ zIw+ZO+$<$Cj+#x$OsC0GGP}ZEK|w{VT33TPbM6wiowEpLs)})udkq?kTRCy)$+*Z} z>^5=I(37#-?Qw065_&Rrg1qayoQ@lefR%2>?dW}DBN(}w3z2)O0@d(FkoIQCOAQ_l zdNaTuP^<>}hlM*`Uiqz6AO(0+1M&E{hi$BZb+H8vE=TTZZsacG#OCtujQo_O0RR8$ zr(NJLrLhA1zvI&d{!$t%!2j=jy1@Sg1hoMF6aL6v;QtZQ3-Aw0V*>vNNH4%YD2)mH zf0Fb9{Dab%!2dzg3-Aw0V*>x5BE2}W4@zSK|BsPgfPYXL6Zro$=>_-)r7?m3L!=kr zAC$%f{!$t%z&|LB3H+rrR)Bv{8Z+>}--AEOVFG{YkQLzXb;w=?f0cy0Y#i#&@Ex9Fkf)X&?AIF$-D|l9pL}xoPH@HL4v>M*w_3j|# zu7+;j>N2)PYWRg)9KvKB-F%(93IbU}H*a=V!X?zw%{w64oj0EVwP+!l78`7$m$E9p zsh4NTG26{XP{u1i28lyD$&y4& z!%J#!0Z~o(@U@6{lN@3zjh3%~z&8;L(uN5h6fyBhD^Sn}1FyZ5!D{W%J-r#jVg={A zv33r=r4&4BFmY$j-6MGH?0!3PJJ10!%M%2T8a8J;yo@yf zd=^C!bDW6aG25HH73*JforvI3Lyoo}QM@Pw6Ij`1Co_C4*d|bmP3f8hh63cH_Lf;8DmNCV|vo&LwURMXnmb zV;`c&jyl2PVs{auN{!&L2Q7?kb%Mt()U#&m1dkc;a&6rrjjzml!D9u;w$jyL!UPQd zWZkm93=C?y8tB&n^H`k>GXz@TxwRLhu~}vHu7Pz-he3uqC`a%>hqJpX6FmGh3j8}X zwSuf6@b55O39^R3zr%1P$QlBF$smQ{N{}@K{*plo!<8Uw2>d03*#4jvnjmWk{3V0f zUY^#GAZrNxC4&^;A7l-IzhsaC{DZ6^@RtlyfPauR1pbmi3h)oIhQMDkNCEyq))4qh z1}VTl$QlBF$si^8BXOAEeSbyp$n93V0RAfYR|Jp$j^KYkOaINb=EpAX#tku-wnJS= z%Cy9)xm;{WUCsN4Zj}s}7;ZsDGtC;w%PZP1N zaN)o&6De@u2_m*7Jx$K95m~Kw1p3-+EkIwJs_PI~){$E$FU%mUtaUZ~$!dg^HFX;> zs}NSE>%^NC2rDaH4L350urlRp_>koYD-(6Jb{WD-t8SBL3}I!wj@FJKtkjB7LkKIw zb+mQ>VP&w6*7hN+^w-ha2Et0Sj@H6ZKyB-2tqvCjJWCqZtOxEmax; za39x{C+X+0!yUk994>P9CAab5ocmTD9J}1kgQM*`;D^2%AIZO=16PC&bEEc*JjKD> zv)S6T<9D6P`Xi{m?26WZYH&_(f4aB*dU>kl-Pz=|**Hg+wCZQR`h`g6TRxPHw|=F` z!PeE0{gZn~9sCT)=mT!RHH(ba!;Lie@Ek?vAx0a%_GM(I&>FCXkKKmO1`VFMq;Xi@ zV57F$Jcl1P__(h`t^Whx8aw0yQrAcyV1L)T{#6R8?_buF5qTyK-;N?S4F|K~Ytx~b zOjpd}4a+z1D;zw!X6uOtSBMTszd#@O!~6rY{sVjd9v}F_;sfjX0H<{Nz?Go`c$!oP z+{@NKcwngxT$#6DJwnw&)n6W}A7sOt>Rabh{aQahu^*o}AD_$f>ahYT2Ggc4a-|R6 zcNmDcwU;zbXy}=>`+2Otq;WTob(b{W<3~H6;(XFu|E}RRA@Td%cqTp=zd?|u9dkLN z?fKq-_)q0jKCBbffebaP$Kx#Va0io(b3R;oQYm~U>OCIJi?9Bl4TGj%0XqidBw?5L zwT)AlVHX3{a!sCGo64)!W%1(zJZLY&+PV+bLOMh@7ehB$0S4Ua{f&q8T(iINpq>M> z(KGSB=odM}r9ND7afFHhWA45<${GhMk(yPo^X7fkQQ zhq8X~4z!80kN#giy-%KBeAF^+Fj)_z<~AVL*H6SgNE#lxk`LHnjQZLbi8cuSRz8K?CgXhDs@M#C*;_G`b9uX{RqeJ^KjK^$p zN9%VPEuL*n`a=!P2KlYW$jz8U?-1C)ArHP-rUD8FrGLr47q5~>9;PoT-eKoN3I$4q z2~*z{gg+EeJk;>zVdqGExFH&71*#Q_mdM+_h^5oZ&(O5r#Xt8K{LP4A8+nYo+F(73bjn| z{5EXN(6%VrAF1xgNuA^g0ZE6IYHeL4b&6C#Djg|OnRf1Kw>2_dS)@Kq>MBydTml8( z1)XV|Z$t7$ru&SAvp>K=yYx~1jYSRXlPA@@k5SFEsxiSyM&_alF;pRWu)%bW<^!ot zJwykYk$yK;O+7*CGfkM9RXKF3>=}LB24T=f#Aq^aZ z223{D0iFnhHS8wC*GAk_2w|jGZGq6lScOkARsBxVRNfPMfitNlLs}pL-O8fNqSph| zhLnbuIGT+FO+Y;G585*jHq(jgEVsw!Fz*RSBGkRLv%vMf0Kfpd6J>vZ!(GE~^!U~7gHfHRDw)qj|hEE|St5TP$JfNvv-Z5C#VvD_C?ms%^Bdk;Bm zcu)&qTh#j^DLG(UQNSenFsPgTkG8bHeyOY~%6^8Fks|g8vEd@NNGu0pB;)2~_}t;! zaCV2?4iaB{#!wgTlknh-k{A#|Nn2#~roXWmhp@{S7W07gixRG`;U zNm6c~7!zi|?lVv;*qZ>BP1$fjd&RByvUvmuAEgybD zeDODZ_^V2P&WG7k+m}4+!|Z?UOTOmA530NfI(4#dv z5xSJ3a;0%;(q}n)i)T`i!gTe)=Ibf4`WMI?$9*~04=O*XH;4UT6on5)Zy?Q<5f^c1 zi+);J)S4O{u6$80>bPe@wD?0uVA~J@^#4sWWVDAeM9FNfjW4ry(vUEMmZpKft#;=7d`r*d58 zB4FUbZ9bcOpVa8o&B!H0nStxAk@yn57B_+YL`STGgbFxrXJ$0mFeLqqGyDgS7HWC6 zY}Yt@i{M?1lGWsqRj@hjk|FiX3~0m3y;glO@O>io-hqMS&xm~s-hp9To8DhI3wYf( zerjbhethnOz#Y3>+mUrP5M=9D!R-pNb($y=HntROlg=`y;0^^TGNcFuS9@6srUbv` zgF6+Z$gt8^6M4v|ZzTA<59;hgd%7bkqU{29tQ6ct@C6^#iHNpwN0mN9&se6yQ_}+hea!$n7 zZSgg)JC$CzU=Hs2`kqtiB^@7F;Z~e<>-2$jZqGt`DUTJW&~n+r2UMkfV1?VV0Q0e; z@&U%mZT25ndn(DGwVsWRv%dFb}yut^O!otZuVwApepSHQ*QGD zJkM0+0|18G^zlb9Us8S?Mb&0QbBn-LyV1?RG4rSMz9{aywj` z52#A}K+Co9TuaFkiXi%Kga5#)Q)zp_{P*&K?WfXfIzE6q-;-{YKCsGdUr4XzvFsEl z85{V3sMtz~Krpw&& z1^gGdj=D;;DKN%SSHPGihgPn{m}aP};SK>WsJm|HsH?<~0yzY`0XZ6M;sU!lax_9+ zXtX-Ow(VAS)Kwxwfd?z8tAYnBy8$)=CZq#VKr~l`xxr=ZoN<@VP)LsVmToK33Kx?mwVkCo0#VpHO+NTkGqZ5-KZJt*b!4PE@WzKcVuBoAGr` z3Y8VB)>WWiCo0#VpHO*?TjT4R5GpHHt*b!4PE@WzKcVt!x7ydWT&S#AwXOpFI#Ia> z{e;Tg-{|XV36&MA)>WWiCo0#VpHO*~TjlGrWk|7VT}VME5&*`|WD!3Kt*ZxgBSTQT z8UhUA*^$RiP|^+QkfVne)_N0oVX?mjFD%9wxlUN5wI}exVt)%>Sd4Mtg|!X^URdmJ z!3&Eq4!p3|q`(V{{VjN5F~)%x*7_89VX?mjFD%A5@WNWF0xvA~x8Q}v7zbWh_#b#- z*x!;D-Xki|)bc4_7zSUwaH>bE4Wlkz7-n3&FbubNVVG(K;Dt-3_po^0oEI)xWO!kC z2xvBAa=S9swq(2g2j zSQkmb8NvR-3zv-XQoQhPw^qEc*kEIbi=`Pq!K~*sys*E&O6)JZaLE`i#S35HX2c7N z4K{|jSg&IU@npGPdvO6MsIb5A!X;z86feBXtyxG97#nO1aj}TU5ci345%(VuFRaT@ z7$VqTc;S*UUWymq=~jyu78`5~aj~+;EEvnnmEC_pys)mL-~+I~@WLfyyc93I!%d49 z78`5~ak1RTEJE;<`Eu_+AYRyRTQK$)Ubtk8m*R!DyH(F%Lu%%NK?)W>&?ImiyY;= zuy~BX3yTEhys%h|zzd7)cwqr;!3zsK11~J7EqGxuz=0PQ*cQC-UPb&W&ax<8c%L5d!Ykp0 z_rMFU^W5tgw0#Ri-dNdD= &FG=<%KVH`|_2s;Dz^TWmK%>dps|^S9o|f^xK=GU%?CS75XVw z*5!F&aQf`%2P$g=sKN_hB=oD}g+b-BqaUcOy`Bm$yiMp=#|wkXXGcF!S=%}lUU*jM zSH}y3%4bJEP+2=T6<&C&(65dc29?i_exR~Pzk(NbLccm*7*swx`W4Gi!3*0m^j+hH z|Mlwlg5w}autA6kVuN5NvO>D2O0CS?Fj~09p^r4a8U(R6DD=WOSywVUL^6LaG{k<( zC-;#oyMjVl3?iZ8(p(eqDD=jH1;GI6vLKN9nBAcP@lcRe-H1wI7WN-}I;_6g3YhUj zN(7>!@|=n(n&SzA#{gJBp|7C+Uj&1m~>VJBW$y3wv^1{i=S%N24r-nOPI*wr<#S9hFi~ug|hgmW^r)h*0RT;EPkq4@=3CWZ4qVh zQ_WiCnr>Q0Wn}SF&04{6&q_95l*LaqYtkidic=0{@l(yx?W7Yrp(2Z)YF5P}SgTgB z2o`Q=fk^}aT7_6(6clpEBG~jZC4~KnPZt*_ZG1DKl#Gd@fXYjjltr+qa7t?Yx=)vM zC^6Lh^h*vzJXLwgd(y@?El){yK}&x-6!XO=1Y=<7qLQGQ;HNqh<6yxOI4}l7xC9Q2!jmn510$?eOW*)n zn@i!q5EOd}92k_%eLW7KqP7$c^s^!^fdhRkN=x8C6Siy#9B8oZyaWzl@3s^UaR1Aa zIKaN_t~&I%oq3bCzUd|lJ%Yus(BnI#7wExWgr;BUA#MEvJ^s$83q4MtI#Zy>32$a8 z^!Nzr1$qQ6exb($q!;KBwD^S{($+7~BWUppJsu>zK#!osFZ7VMet{lAi(lyRG17>WOEq+6f`#pM~zc2KV z#jwyL7z@9O9+j2qA3J*7&%FIC^H-opFzFO}e4O+GJ%S;p(BtPwFVG{HZwft7;3?5# zu|$v4q!;KBEH#B5pCr9Nk6@lD^pNs@fgZsoQ|R$H=>>W`?&}wN$RwaZk6?W%^kA2v zM2}!{DfEz`K!F~?&Qj>{1nC8O1mjAfhs*~G^avJ}LXXdoUZ6)XqcrqD?bDWzhZDmO z85syaf=%?R`0+i29}gpLNcBll$C6eGEGzJ2xs`$$PXEs8#qO5y`K(9ZG6V9dk0m|wAV?;iG}@6 z-ARjbZ5tF88}H&9*^0w?T8;L z24$UF`)Io6>L~ns8{@F%H#Pci<H;u=#<5L$}S4$o&vq<zMxZVKXAQB7LR~7aJx!9nBgvbcB|oe3#esY}8Sc zwdd@${Y}H_7Qy<>~j%bhvq-aezV4*r7P5 zehFxY0Y*}k+)M{=Mp$^16cNIj}JMR?bzHN8kdIwXZ- zgCYeTTSx~gmHU#9hv!2)>0NR{Pda?;6saNPJEd5eOkqS6@B9}E#mun<7s6* zldB^4mkP>saWDaIFyp80pe`}_s&_)LGZS;U%Hq844w7ge3 zllD2#o{ygYOrq6L%p{;Fl1GDQZFvEv&GaCL?QBOdu~d;JK)@qPxg&loJAPwRWPD6C zJjO{nKs}blGBrZyo`yE5uG*hGsOJQC!|OSTLXDo|`!Mkv5G9f|CUfUW@qm$H zHu=0cPf4y#M_&Y;K@M~s(@IaJ2RxP59rBt9xB@IjhOZgps&xz=#_(~Q9hVW>Fno9G z6GScDL<79-yJ21jDOmD>=Qc?g=ZU!edOgp??KkLoxP1i({CR)g`9^{d_~2~>!CzJL zeFWLyH!ayWsWAMAX&HV$k*9r`+X;fUD*k4IV3mSDK#j5~;M+@j!H z2!i_x{t!X-2^4%QK~T%=2M((+Zw@QtZA4ht6?{9vhkWo(f^Zi~eFs7G7|dqiohr&Qavj~_c5>ATmA_)Cb@%IvhI4Jl& zf@ni5Q}{yPyj0QjqjX zMXn_BqEEj-LDHv`eie}yeEMz$NnfG#14N$p>3b9;eWlVfBH!}q7b-~lDy1JJ@=c$9 zk%FX~GW8(=OS64UkHPl)^%!m6r$?*(qk2rW@7H6x{bPEpZT~oUQtHN~uT{kA#X2Fq zdM;^_e@Hr#*UW*Vu{$UWhim7s9gSTkJB91!;8U2`&BuY+bcjk08VvCd<)y?!#ilw)3kZbgC_{__cg)Pe zRmbkf)wpTecr;XgPu__AMI$)C>uton_F_jPHk6InTQ=gdvp3>$8u4Qqt!W1By`d5B z%Nuc5(TKZMrh6oQ#9r)Zgex2Inz9j>pS=-tG~#|u-!!xMp3sON&KvRWq7m~d)7^+8 z_F_jP+GQj5m5tbb_D1Zb5kD$;ng*=y42^h4-iWssjd+*JbT{Ii_F_jP(y|d7%SP-t zdn5MHi2DTK)4=%;g+{zJZ^T=QM!ZdBx*KuWUhHVZrm_*6%SNm{dn0zzi1!QQra`Z*^w}nQ0U*3o}7LE9R zmFaH8o9xAoM$DFt*j6@T&Dk5ViAG$;AG&7lGBB5?;qf$EOB)QAc?y^Bpy1{Fy@tQb zDabPvbo>+2^G^kDr{H$}_VKr!WS*g5+qJDAPZhk4f;;%z$lneM@(cx2DF%_kQw49O zASyGQIc|1qN#+>}ZbHvR1$nCAYbl7H4(FCz-8zzahJssA)KNj6DtJ8wQFh_%bDLX3 zGS5(O7Ns^7{t@He_!K*_+F3U4yzVWN!)CTg&YCki8~k z&xY)6W%fJBzBFX757`%&*@wx7LuQ+TKSYOp$-_R#p5Q()!b(0cZ@h5qHq6QBH+F6= z`Kq4nx#Y`wrgO$!doE{%$`-4%<|;TI0E^(hjKq5Efg zell(|&fD2LX@5}9Psi;K>G_1*Uhw=(%(g7gC*w9N)Ar=4xZS4my`fRB360tp8nrPr zYIA7R*3hVJp-~sVT%%Hbghp-DlSYAS)~L;T(x@$Z(x|O^(kKXmHEJ7;x-2y6^3bU5 zp;0?Rqt=E-tqYA>6B>2t%Qb4dK0>2*=t-m2>d8p0)00N6(UV5a=t-ki>&Zw>bN&sZ zanjv*O5DYiIFOU>28*l^YjV%t?2xMPv?f(MflWMG}bKB`4k0 z7Ky~SoOCx4IgC}*wA+6ul5+Ev(u#L;K7y&@+`>sy7i__A+~rfRI+b3%;O_Pj^u(5ZCog1f^9cgXphswRtr@j_$YQcTKk6dypMNQI* zL{Q8(_|z*-rK@4gd<6Y*R3s^K08N5z=tADJ;O=$#I4pxsUG3ht;C{sA{l-->{<(g5 z!5wjVKhalm*SmKtxOcj|UqcYl8{JzM++mmZV*o0;*8RYO`$1`STBG`)$!pyAEx0#H zoinsEW$bTV!0noEmva$heZM=p0ITQQ#bGIH!PV})3ou^3UDG6Opk41-fDQ8P;>Z>f zdcC`I0j9*aO9xgTqFq0<0E^(;HA>P4Y1f+F$g%2^wE2V&O4yXhX!4_kO=L+EA0=%D!Bf&^5IiMq2EkLp zrbI@QA0=!eOPcs7X)_3(?M7()6DoarMtUJ%no#M} z50YNUmlq3^{vPt>B~1rsT^D-2sy|C137wSDCCS z`Es|r(qv7^mlwDzOx9$nK-2PalQkm?-z?_!a^yxrW^efzthejODKXP|ZBQ9|FRvK{u za%DSR*!-jo5kiMo7NAh?R{}nY%AE;w^b2 z?&xX6MecB=5f`!cbT(ph*@!J=Bi5e15t1)2W-X=ELHGX9h}-i zcAbsbS~g;~Y{a^=Hv)DN+u!d~BW`lXLL=UoH=^7E%2D(Z_ohlCE@6G`Y{a&*5!z@7 zD7xnCjmYIoiH(vkOR=#=zLbC{v9V3TQf!2mFcQE+l9uF4iH-aDli0{Jh-6)2qvXq- z{7FdMNkJ15Y3;O0oFXbFahCF>gha`gCL~%xNt`NZ5@#u2N=TG^X+okEl*FlmCUKVX zrQ~4AmpnroC2^{tNt~s8De+tKWhs82gM3*LAd!2p0W_lPa{00%KuW&s79jTrNPw-A ze7Q5cy)gjFrZT%KUv3WBTgvRJe7QAb&z9L$`Epyx-d<+c$(I$u`R^xRB3GJx`EsJ% zKbU-p2>6!R!La)h{h;k-ZBFb%+ zsD>zKawVdi$(4w5CRZZLAy=9xhX`26mq_5&DC9~Tshxjc`O@S{8U+b_#quSLMlMoL zi37<+$`xWwa*-1MKkh&-Qmzs+lZ%uMXzsyWq)ecFH=T5cf_w?z;zifP$Wha|NQu0N zZEFx7k-JK{YBgKMCW0a_9x8-K z;SqWC`cPyD`SOQ+5#+@i3gHoX^u|yGkEU!BA7eS6jzI?rpTwcnT6OgGk9FjX)$d@hX)FJp4cbCiiJr32o2JXSV+vWX~ zp}=*lkw3B=_DQ+U4cT>m>L7XlR$0FK>|CdtYc*E?*+|cFUK@z1{NV z&77fpcjU_lrjx^N$RgYCF+z;UdMDjjFa@eN}MrHRj@ z7l`9ML~}Hg^evpmMYJ+BD@74CO2_Z?3Zp}=b%}juIBVz~DXUU8&+fNuH`YeqE^FvM z+0izx|AnnAFFv~Wny`1;ZE&=tzGqd&X*h+9V0I!#B2)?v2V(OyOtTCzh_5#B}* z4n-M`)9rm~x|^C%Q+4CKt{Wcl%QuQe*ZuU|#d3zn^vt!H-5rftHYs^bvm>WDYp>A5 zv4hE@#daMJGn|s{?S!=LBL3I7g~4bK2&jn1ZjjrKnK(X%!hv3s^Hf^e&sR~4)u5$s z)7MwIbTL51vsayF3|2kb#-^pcl8x(0w=85u5rx;dsWz@ii^S)zQer6a{8et*qkt=a zr_<%9Q|Bg53yeyLBiXG3Ofi){jpvH-YR<^z ztvJ0n!fs?Myh(d$>Pj*iGcI|w-KOWu+K%~Zpr_;7p%{*m6>YW0$)9MqtYglNKPsvyZ=Xqf`rGR1ubWa2)Q6Tj3Zmuh@k5ZuK*`hTYM~-_=Af5~uMv`gYt^pL zoL*d9q#rAUa_b#$OghTp)>|1PC;-vN9C7cy@=hTAnhYlsZn}~e_^DUm#S zCzle_)kWqteFtSG+T-=}I)0XZ+Jw^2`~zXCtDUfZhRLUR=x6?d4TbNgzOz(6$Iq>w zOeBkfdiO2>SXycS#HSY8(E;(k^EmgeOl|)^fvJT&7gPIAfw`tP9$5;JmzRhv3=<-^ zmPX{|X8~|9697IdA_LJ?M4qWZumi5Gp(OFIMpDs^|M6e(9iq@L*((L`e_*>Okr(5$9wu&&i1=1vz;UJKhf#! zTLPKm3Nqs!u>HM0y?r&vJVL+DnXf3<*>hNboY1ob+i8!UHDD|L#nvC*m~@m|3%_FP z>~zUVr0qun!F}R#t+(QnN<@Ed z&za67w?8PLzrS7??>f#aojxSYxKZa;98jPK+Lm51rx|9e*iSh4kQg9{4+%3p93sqt zxJnNb#D|1g5+dDXzvYw16y&JFECZJj;k-%3k%>%=vADb__>e#lF&`3BDg+OzQzivv zQK^%t!be5$A+eft-8X4h5zFqLvn7>>VYTz8!WTvGApw(XJ|vt9wTW<|q+qHb^=wpR z6OrIUVzYvzZ&CVIBAg>BIIAG(g>Q+k`1Bp5%ZJ2H724$@+08#0>$me#NV$*L$#&wd zj_adj1F;QBxAPK5rEWot?YwAW^ksgC8O^Y%BTV%ybqr;}3GAog}%0ISqh zg2$egO#!u?_qD35c*M@DSCu;M#@w==8nF3sqdlp*sAs4rwNFx4Pig{0H+oVlJ|Bb} z!RLcuS!Z*_HP~PCb0lDv&j+)rQzGV*L}Lc z`8m?f`3jSGThF0xnmc)BrB$Gc|zAMW;1@ ziwlJsz!gu_3%GXAdr#kn9pZCOs@?G3lWNzy_oT)cgVX>nB%t#?waa3itrtET1kS-n zgTPs*#05BWdaRifILk*v0nWikgTVO&dm#llpYTTF0_TsAUVwA((I9X}1)v1y;G;p{ zEFTR8I0qjM0%s2XOK=W88U)TiMS20w!AFC@ndANvoP&=BfwO!x6yO|uGzgqIK2Xv;Z59vaL; zmY|*1@&kCHC+qlAAo%sAhE)a8XB2JUWh@&?jEKG;7@#fftN!cAI?2q$kw&~jLxWC=j zW3bIh>+X11y0*LHQ3MAb<84kvcgHOqi0+OjbRN1pp3-sX?s%n6LwCp1Z4N_s$7?`h z9&2@KxjSBO@&bV<-CZv*XpVXX2Cl~J;UQ!r+3dQIRnrP5Rl}p{zM9UfSXEXWR_8se zN`=3w;pgyQ)pY}_%8Kvmyy{x1a9uULA3M`-V-MFPZmjcWchvwdR>LRao}lZ#Rh7NK z;pD5Q-iUKvF}YnCV!d>idm-FPd?*$i$qeQZXN+PJ6bhkM(m^Q&5Gih@mK;#XvK`F7 zyu1~cQH#wlL|FNAD|mh}^y`HmbB<@PcHC@h)hVxb1>yiN!9cmiX#|YKfUHs8$CDEw;I!TH=)p zswD=wpjzUJ3#uhnxS(3%e+#N5rZ=ZryW{&s<&DE#5*}Wq7=y+jyfTW>aJ#$U7uMF( zk%!~195D&T^%j&wtZqR`#NQT_L`-c#NyNz(ltk=nK}p237L=reQ5APuP!h4E1tk$5 zT2K-(p9Lim$5~Jkv6%%W5ihwU>pK+71x54dDk^Z@7W*THBd+9lPQ`xLNg+`vtNX>R$+t2>=el_lhfNAK>@hfdr5 ze~VPF()IyM8szwR2I}6>alg)>71B33k@`fsiX-W=LTzfZt%quXE*7$q`uK!OuH;BQ zo#-kH^V@2@(5Te$u9P8^-!4`AELXdIJA0=zC0f7OZj3fYvf~+pJVQ8PJi$#l4$wgG zmeTumL!z5F*E)GK)Hu>^@S-`B@l~0d7|)<9Ba5z=z6Ntm1C#eVyS2HYmJPyD|B`F` z(udNKgYLm!AZ6qi;NDdfY;@8gp#n5iy!(#<^a!%JJ)}kt;Qr%3Hq#+<|Dj*lbJ*Ps zk3-+#4pun;fn%2X%XdC{;>4M&CTtrVpqj->7y?j0Lp7rmO<$E54Ny&roIC&5jDGy>?kq6vG2n3WdpxiHt^Z-!WmN#!XpWB?(9`Bzg)iiO!@B9 z<-2FP-o@M_e-~<*e;1OP4-6DJ?;!-;8k&Fi;qu)DUI;Vv5J7HpRcl!EvUcc(!1~)nE^NM( zFmJfr#GPmPC_i6JJzq^<((Lfx1c-P<+i}DEQFK-SOQd!mF$0tz-A#_j>TY zRPMR$0@De%{AW*_YRx3iNg=d9-k*5KOddj)pb0uRZKiT_5UspRI*f?Tq51ZlV|1Men&7@3ZN67Z&)8<)2NL zb!A*b`M#_cCxi>aiI>9#w`?vE{SehltU{P#y;05@0jn)UVyy#RY=a@M2#HuGoLNZz(L)V&Qr7ZjGm%Ma!2%x z(LU&s>uVjAr=w>eOrj%}l{N2a?GPsbA+irdTJZRWw$h+QtUZMM5`;3RPsd{;WFSg& z&B6%whlIg&auGZw)T;1FmNlKOSgf!wrx(-J1%*LZtx(5PO%sdh+K`EM%*w}5kzJJD zr!;QCnaT1+Y1V@O)r5}R98swi<=bj&Y3Mq%Y(u?R>*meji>n@kFLQYl^zO<~4(dJS z$Xi!_F`Wu|I38T%RxZL3qR}uR%|Q)>tMFzv5VPq-uIm{^C_VU&%^iV?O)b(pUY5#| z>M6Os(><@?^^=9>_rR9cry9^Mm^rwiI#*2$8xRqhgQ;jl5LQ=;_hD)pczqiAFH`YK zv?AD4Z6_rag`ks!k>xCoZur4VCN(?lwc=JbiXoN>oSZz&LL&uX_@9Ij%E}h{-`K&fwQm{amEmfxrGHSBedUdV(ESN-d#98weTe(ixYSd)G13O)-QIo~iup6z< zLSVvQVC`GnW@4*oO@%PnC|K9N#nv_4eQg%VqFXg;>bnx+Q=fCW7^9kZxEupM>ZSPJ zG`WlAqsblUFTqHj_`AkY_zmrBMc|{Z$hbG1lC{)icZoUXC+JED)U@+yn@WPPulYF_ zg#C#R3c_Hi1qp(%ult}N>^UD4g#Eb>3c}#TRaOx87d|Km`<4$1!v4|+1!2$opp+>7 z$_I5!_ks@sXr_q337zy3qzc4#r+zKJZftCK)J@iB!I`;<`YhPZrJ$8v*`=VB-P@(0 zm0jMYpcO81DQIQacqwQ_;bbXjWfyuWXoW*v3R>CKUJ6>-{jLXB7-QfKpzH4jDFL07 zEdaNb-Fezw54sEjH|aPO;PxFq)dIJ_^Fe{z34g>Za0^Nb0=J--AaDz+2m-gDeIRfP z3I_tWpkp9#3u*-dx1dQNa0|)<0=J+qVBm(LfPvfn25$c|u3vI(fqK9}uv-e;*sEO% z+>im60yp-4mjXA$#ihWFz2v39?Lo4ZAdc)!F9mMwVJ`)4>~${%ZYRiEf;h5wz7)8z z$Nt>}H+E-pT?2uebPx(~3%UjZx1e4ia9b?FEhrHP+=AYKz%8f>2;72pfWR#%1PI)M z4uHTd9QzC0!b!itEgbF(+`@Ujfg9)e25y||i@dQ1t6ytQJ-mH}5=)Rbwsx0-wv<`7V?$&qcw;MjDR^VcdntHhYkVnqW5;DFcw?)5DR^T` z{<{fp=cE|G<}XWfzS-N5V!;14)pMhpVAW~y6r2POFd;~b)3(yZdj)oo8ckouwEo0B z2HsFG&$xJvRw=gxMzN0|Lz!+;Jp#7CHEPjk^t~R6v=ajhDI8(Kyawzvk-$$1VVL7| ztLj-zBrumE)_{fAThYZPfzuQ!0ZCqCR?0Jh?G#=CeCc-8BemVYg9^!jSAR>Jv>yXQ zDvSffy@sunZ31^H^aCsW?QK%?^<1g(vfxu{M|r}=mtye|4`baI7}_ql7FUD{uYtU4 z&8Mxd{G6+`yWKX-r!}X`QW-YjckAcV^)>H{za3Re*3GBuYVyV8+Es6B=hL+{`Qmi7 zz2j!)(_ZymQ;9Z&aBJq%H8t;x=e3*PR?nxaYx2eT+VyYK^J%Xlu&HhvyXsbPZD7s& zVu9@l@BZf9X4(bIdWFJ`88gN0qV0l;h3Lh&V3aqPuD6p;qqQJTehyv>>APTIjfGDu8 z0;0gW3Wx&hDj*81tAHr5t^%UKx(bK_>nb1$tg8VLtgC>i%Cpu2(E`g~JrJEFryhtN zBBvgRewv(mAo>_N^+5Df zJrE($oHGzrxKja9U`Pc-fgu$T1%^~W6c|zgQD8^~M1dg{5Cw)*Kol5K0a0K`1w?@% z6%Yl6R6rCMQUOt5NDYW!NSC2Il{29=0JN(Xcy`tT&W>83*OkJbt#3%_GuakhC@oAvoXO8d(Y|PFzNe{kv^}^w7-lbAX)KoZU3phv z51ft7TXbYCANpJ|am!e&5D9jiwOv=A=mnO4YmW9j?YmFK_N}y^!fZAsQfD30V~_2L z=Eb_2*Ppkoqg6Vs&s)`~v}z4Apl02|L5?-5p+<4OcB%AO6P+@~t?v+Gv(~p^y4}c{ zBW+O3H7|{XGM8Q&fkcjzW1$sJWW~?1_0Nq63ehti(CS!>K3gH((%|;%txEA^Hrl!` zibnCTpq4UtjW9niHxIt24aT2~5;zKd`ET@%uuXkVtzqLifj!a`sLNa)(b>t+T{@}m znlgk33#Vxd5ReWl+@~AaG}!D~YphW~>~A-9(xm>P$E$v3@jdBiHgE*P+y1oCZmO~d z|M&idnM>t!q%+rQPlueJ%VpUQ9T^{M#8DJA_&;eTy18vxcB^(bk7mO+0FM=jGw`}@ ztT~DmBzH=5PJuu&6jkz0Bor8 zc@BfJ&#~dZh1T(J`I7%ae%`Ls&i&b^l@fK?Tuat~=&M3JsaWwpEoxd*n%9moHg3q! zFO0&FJZ$*x=GB^RHnUS!L^ZcmUcEq=+x5;8-$O0toWGYh+rBnjytobp0}0I!6J}GA&0aS)V&j7f`w&y;Q@2S6 z3VTA}Ahi=bEDNt4YcVdWiWwi*^+NS`IEfSl1`P_6q<2)j4q7CTOI)IigVFKO-Q zw#YQz6F2UOS&86kOa<)v0A6rTxO`4nZ+$P&PdEMaQ-h}1D;&9g`H^847Gq$Bp#R9u zC;~QL>&tLEkTQWEd#DWBG?g;oQA>=8gRp>t2b~jTF3@f@1 zbdoTi4arxJGFU}E{x3ft0YLUdJ{`h#K^ir-+%>WxY3OBfo0Z|5NxZcVa_NCU%WKL( zGz%=yEGjAs3r|IdMMXyqqWut6SGer5>&6Dv-kQ-FF2HZJ2K<`-%lfE*Z|GcsZ_qC} z=K!WGfU-4Uq+4H#ZJj!Yml%CU{pDA_hMFN7-Je(gazoGb8-L@W(Q#>8%%{Rar~_eE z@hLUa&bJjHUc3DbLns`)q0!>)dg7EXY$?4Sq2J7^G;=@+Bx#M70JNy zrt~@8d^!aCHdLtI$pe(vB^%OXP^*Kj5YZ#)*wvB!!#RM^I||V#dONgc%*7#o;>y#H zP#`8L=}l^MB?01aiqL$z(fXsLJrLHBj>;Q+y!c+F{&V;wmr4rQ5l!qv#b?ATFtY6N`_exj%`; z%kGr&pZS~kO(~9MjrV1z{_}tPa&qLC4!WQGoZ7>eXu#s4LP&FtpgN>?h`0#nP$ZpO zUYkXD>}UDkb8}?JY%Cbk(u}c~_Vnab;?2$INvp(Ycg<|fv zue($FS&1L9N=v=>Ux~ znCow_1k2xAGXd13yAyY}MT)h|_7Y$C7t*P{QR^!o^BT4{j@d=3Ip9D4xdNn~zbZ_* zV5pev=dVJYkLcTH9t+uLuDo*$T|D`3!vGMwTfz3A7(G(S*K%U>&0m?X0|`c0o1-yO%Ut83Yh6MuJ`0*)uhrjYDUJ%kkHZ+RTL725T4E23$D} zdJo78XbZ4*u~fhUI5XH#XWrMlqJ~k;q=|0yp<5;XoVoYkh9}Qy(X*d3SdAWO$F^J= zO|JCRua1=jIvCZ0p1NL7jC#8c&0}4p=@4FPdR)_Vi4H?93eY838yJgt0B3y-X(Ymd zW|H~nSR0yES-Se&h?YDpe{FQ(HGbxdQnV}w;wPSZhX#i&!>i*+{~$S*AUG}ny$E<1 zuws>92Ss4{2@}|kU9&w%BXL}*g&Oabx4=tt$D_F%vRNEfVcP}GF_;fKe z^8Gf}(6F7Y*WM1{#EBQL!khq^(Pl@?Nlmvy)sgWEjjWBeZ4@tVGh_Udwx@E&sitjR^HGjI?|C%yGb?msQe^x+gzn=ee36d4xI7*^ zp2Mk^%@M);t+wf~Z65jEL@&S&T5HWL0r_T-Ssp%uh#7VqDbtimy5VgsW1RfYB`N&B z9MwutO-B%M@c_$K5Sxpb(7aX<=@6{p7Ig6_c%*H$LB!x2;RX9d4F|JJjcKfG;;6)1 zk7^&sc9quLz&m5v8_~PW#t@XHz=^k1z@3d6R)kvFuMHN!xwxL<6rkR1=#{`aTcI;6tU5PM6qKh}|&dS@PLJREmjF$#Lif-#8+a z8)_$+s09gTj?azNady?w5vavrw&5s#HR1g^w$vz%ppVgi>>g@lqu@A8;E=C@l}0rr z!c+wOUF;N412tMhE4X?8;!prQ%vd-q^$FqrJa6!*UN2!We?_tDFoIq?2 z-EQ#Fa_TS_x|ud59V4G)fBMo(QP<$>JohLQ%M^?hQ=qCpAf{^$fl zr-?j+_^zCnKB1ZXeVp|wcH(hj&x?xaB~9{T$oY4Qgz(>4D?WCHDO0%*|Jaf2!@y^-Qj+F>KmamQ1rRI)Xj%*J!fP@% zr4^BZhxCI7D}dAFMPD?&VFn;NGGb82)H!W_f`UM%;0YBxHd1&!@o2-{z}{x8cH^gO zbBJq^VG-p2!5#uk=x(t)B1mzziw0_;R4-A|P|F@SE2-FSf;mrIr z{sVGXN37Zi3ilrYf~ji04GJs9H*r&8SGYso*zrJpx@rA$hWHJ$hGQE<_^;)HQe)Qe zbf_IOj5aU&$JDnS*>aEr4Tifj@uskJ`We_JzNUpw^P7OyMoP_gX<8IG< z+Sn9%>KkaVu{QXN(a|ZVF9=X8SDPB>=bK&7zoHu0>Kff zXLWW1+6z$Ifgw=`RRhZe^fc{D#TpyFOEGp4v!>XtX7&eP`@9yltO1(ODXU831!6Bxk5=~$SJ-4Tlgy$n zIIyOt`r3(U!yV?>)n_lLMo;kv1AinsX2{vo6!BHGOg$K(rV7I}sJdL=J?wFbWx96E z*lGMKaef8DvAA=-Eu*Eiii=Uu6CQy{W$~q6N?}R3-eRNo!SNAWYq9?OitKe+qunRM zS$$`N#U}2f8+Gp#Rp#GV2k`WXDV55&`ooApVvf@%&V}5lsM$c zOLd;c|3C>Fv@FVm+RUX()DK}&i^c%xK!XhKjJ8_8wTmDSViE`h&?x|B)`JglqmTEe z;q#+o0~~8~batJ^7?LyASvGWR*#WJU`vt}6?HAZ`j{V~EqwIC)s7Z}(WNT^pcZO;D zpxQ0sU;=}d7|(JU0cm;yLYqiliv0BFirWK(Hj�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

    d18^5;c^bIe4=n@ST^3pv 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

    Qrh^8n( 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%0DP2nfX1>>SMW(%rY|Qi7(hXT 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

    88PgZI-@cYE`e--srkhL& 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

    sAV@_T3?)HoQZkeRX-KKi5J*c(gVG@#DFe!c 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%0D{chiU^;!6Jsv4|X(;-+71GCg0FpljkY=@g`} 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 z z^A|2&x_sr&tJm(_y?6h?!@nOrev*}j)<^?0Sjy&+Ek};*IdU@%9@$cE)lR zXi(?e`u@c#*BhRvc<{7^Uv1A@C7{dg5^?s!`ASx;|3|euOopsyD~kI6mWUDmr&MGn z;x%dLs-{7dTP`RItTh8lg_tsX4=alofP4(DxMCL zCEmwwa=0u`$9q)8eW*F6_3<$~VyIoF*Q^D1A`j^g^Gsk4Qni@fiWak$YcVG-iMxbG zMMbpf5ZShMyXe+IAzh-PqaxaeMzoKLh-%$Ax^Ze7JyfGOpK{V0T|#bt9TQc9R70CQ0HCi$LhwwedV*wUb!A@>7( z8p*kDw#p-FUrYli^B|dVx(l(WO#`tukM99j)}(=0YkuF&oLFoAz|EXkYYrvkCI5*j zgGHWX2j*cME!LXna5E>?n!j)hpIB?20j%|(SZn?axQZrxVwRDJPZ@-#%|Bvo`pN=V z*4QW3nwN7kC#Lzks{@!JNO3u1;-JsUL*=Zr3_{u{KSbJ`z?4S<4+hre%?H4gPr`f# zuug-&1TL<@->U906)NS)oi|s$ocVJU$X+m8A&fgb@=76>e4fxzqtDGLP7<%TIsC<}ynSzy)!fr|oH(ct31 zZ2Q7okp)5LPCx^BuA}Cj4ZrO8<-ji|ey}V-Lq|k%Nx31D^Gf+J3z zaH=2<0hp8t!K8&ja!4bk#nKPb1*pkTclZxK`b=MQ=FF8VckVoS^5)H#FMs|51q$Lv zYf2co;eSE+Tn4%1kEt}hG+f#ax5MGwBfCcqk6a#kJPLRe@hI(~^YHU%|M4{a(^Z`UV>+U?=CD0y1HH8jjHQ*y8?z8h9hFkC}4{>O=%zYynW*a-wtn!ib$ zQ>+P`k!`4|9hkvRwpkI$9(Rh!<988OI`XF|!V2e9w=M+}I%ZDS$E9O_)sA@?qsgdC zF{ha9UmFq zwqU-pnePYT9m`MH8w=hC6mHWcLuJy%+w7@&JK|)wB|w#TV66nRKxS*^QVM6IG516_ z!jGBY>1Vtlx)YXET-GFAvKa}*0!y3;9>Q0|R578uG{mtgo*&~0@hKTfc}j@BRCtiwpc5c~MG(F95Sw7v>_b>Y}$`o!tR*hU0GD z0_N=Dg#DH(UJv_)USr62e}@htz}pt@9mhK3&}ZeeJ|)GZx1$#6<1t&Ji#OXHPK?|{ey6nS=}^n$f3eBM z7?aiJN=VeDV919B0YInSY;riegh#1<*bD|215?YjeY@6O6cdqG2a(Pun!Gp!o@sxJ zZB1Pe@y!$rBKurcvr|`76We%Z7OOPoGPxGyOiwZCYNCExv95(mjSRD3b%;wxi8f=F zNxa#@ymWufWh%A_lvt*j2wNL~co&E07)>cyHmT`e1h3>@l&QbVWJO$1)GP_KIGY{I zE_HRLv=oy8Q(C$zx&#=Yk&DqQWrQ9S2hzS{{=b9#9;htIil(hrlHkll*6?pwLquO$ zBW2F3){HuHvOdA&82+#bG&p6cmTgmD$^%Z;XS~ITyPRf=12Xw5XnQ^3ca!XjW-4$1 zF#GNGe=GgMXztO!y90*~;y~>SPzfM? zG1-GUn~14+Wfq=mZdj4cj34I-8-m_qmMJwKc_zw*{xeSm=4eBUS=Y3<8L$o{>=SFv z!`yJV8;)?po!xL3H{2Ci2NK~CYr~rW%ziNPaS?e`BJAzQJIZo_H-cyV6LILK1-u1W^deU~0p@C&b1jCyPUsPcc?ka-7MY z7GsN#$0m?;^=UL&^yxIyhG#^0ih&XRnpy7jVr(fd#nl8ma<>Nqt=o9K53)jLuzytJ z0Pkbu{?I`Vdr{IIFZsp!cdZ|ZZrJRG`?=vHH*9gklp$LGlYya>I?Z}Z2(_N}lyIR| zBXm9PE@>xk4v|fQv7^T-b6k`|=W3GeQiIK8+E`qUM66t3tHM)di%>Q2`9W{ezR_O| zkTul+v4;aiq0WXdE&O?a*sj|R^ps~SnNMsBT63;zr1bTaW%pU|)S*Q@7l3D61uhB? z*-i!Kx*hT0XNsIH44!LT0!M=P0=?CAChHwZkYmzwZJ0qfA7d8cRJLI)#rrUX%bEPQ z8n(e=PC?jj)z3`HjICWrQ#Zu|E3z}E3F2y24hT=DYP+*85^x2(yeBL*!;s> zp*ABli+H4onuWkMk!HqG;9y|pY;X=wWp1sUGQtt&tKi;SV}BhmMCf~T<>C@ z3j6!Omj=14nc8A#L>qNT03n(HG1~xcxrQR#jD#Omf%D;g9nJeuc<%+wwNwjw2%R#2 zO3lt`v*{ek+_8myLWwquQQjh?`rjM<9edxspf?>|zmorQ7;o65+=lF87@=%v3&-|G zb+Cm6FYKezr6!uJ*qsJ7%$TmzLnCK4Vn}3s$*NUnHKD`AfCwtPnO(t4t)3hCTq(ZD zI19E-nyn6uTDV`&ThBcn4eNVjPzGew+f&U}Untn});~VE_mi&q5*tFW8PsW1<^^rO zN{N_^WEekLo-4W}OC}ZDMNEjljS~&>DEtt9K6Jw`fSYQ}IfqM0EbQk1*16#p8eG<`O_cyb+bPkm~Bd!e*vu1V9tEib;E6e>!8h2GZeE1!u>Yb*M_$fm~yBn?3clFMRre# z8cDUB%32=;I=0x^T~-71e287)4`<*S!`{nn`CZj2)ODLdu2%z01~f3uEP%Y3l0!JT z=8HkC(hp^hf7`3uVde3!uQJ-jI62O2l{GhxW0g&^fjVeL)PI$B#C@J|P;IfnP>)@> z#;h3&F?W*$q>kYt3yceyJ1;|82AO zKdtYpatL{^%-uLsZSwS>LyV>MIxJ{o9*)}p5Dzg+)~C24&qcwgV?<;)mcwCB>~0wc zzK{k_al_M9>|amE2@7RsDdzvwU1gcEKt)M~ScLy^daU%Dt>{w@Vh0V|_?2Rw@{TR; z2vsIBX-}EEQi@+T;RK4j&lmGC*plXMN6a~zu}NETEAKg#=OyJ~uyzlyv;$#M>zt2g z6+GX^(+kf&>JtMiE5x-Nl1VdXCHo9}qVK){o*IrELv1EvnxY~6q8tpzlUnQR@*37M z^STFQ8vFfUi+alXz#Tk8f%#hpp7M#pQjS|zZpbq|S-aHZZOm)AZ&gf?mvp7gPt2ae zKgyxe>Qna9EyIx6S=**{dNjbS%=Guu#i8vdDf13tA?&-m!LQnQ4#N{-O5!llY1dnH zC~$C`_{s_Gv3<-q6`U$;mMT0qNVS5$kkAd0#w79YcKZUs#b9P;u-^3vr`-gzt`cLhS*359Y zs>uFdgiB1BFEI6wAUDjmAl%CxSf93uO}Oq6=#)?EVvM z_H^OzXt)d0gtHu28&6_wJSPEj>>=C}b8JurTYIT@WXF@Z2%eNpW$?_Wd4CQvoaQ(1 z_CKf9{xqcFMXxaPI|k(bw%pKII0Ujwi=c0*i9a>O!#n4CbOA zW;kFMy*Z`4s?*RlxgCuh1?}!D&1w$`139NVL5I>`0Ur$s`25mCdf}$GNl5Q z2vO_hR;@^RgM|~3)ZaD2F{?YzOq1|a+kML3C^2*EDzWkIA1s>Egm~BFO1tRSWL3Lp zkxw^}KI#+#Uw6YSUz%fQpAwswee2MseH$sLTYGHn;NhUm=BF;uVD{Akoi>@ehh9EC zgpLQ@TLSZ4x}EANnc;T;GMFob`wM%@`}I14XWxy@g;-AFq7o)^9Xu9*yoN*W$@k`d zd82%I3486SHrcEej2uNTB=&FeoxD^hcj@wS9Yu3y{TqVxv3*!=vR_Jgz@mP>0I$>F zLaCTuAcT7KC% z^JSLqs+5(YI@76KWQqop2tll4d8T3{B4$k#`|?|1j$%;VD~6aBP#k8Bw-pUOv%Rq% zpghEGcYpAd6EBs|TN*p4O&r;lRX>Vne_8&P1TLV7&ouB6pf+uEetv3gRuZMAQ=1_o zpZ`%=Lb+j)05buOK%G9Zd0o`^=9!LO)gHCh9S&G`m@=(Hp-^OuylWVxr7R*sKheH6 zx;O!cKGR)^Mr#z6L@wb>#Y(3!$x^cAGoVn3abgnU6593a?Bgt=DIOyodDxSwf{U1C zxlo2PtcG&X%8*A`dyT+`&ucEjlf zRU!&`HXHJbZA8pEPf{^;!aSfHAdbINK-zarfYXvKx4!-U<@f#ZzI;h##Ww|xxzYf8 zR!5@KnG)#ho0^*HlN#V-vnTl0^YiobmCc|K?2lJgKWd@>Xa6evmOf0^)z@F zF!P0RV_Zpg5Spaq1nG6HvGj!rWXybEu8;kUqNdwTPM4i^i{n(g9p#-hg{eyD} z*&($6MIwGlcz%pbVZT2gX{5gCQlBDz9T6Yua{?#3Va|g!*O;dRQ$7j%+%e_}{3h}W zBe`S?HfeEZw!c_;l102M;UO+?tVc<7Ap1{weD1Q!b3w{+X2{S$PBOYM$&9&GF%K&r z*hZG&G#;BHLQy&nP5h5R-WAs1hu}FMEzGx7nSY`_1fxJ3YH%1ZSGB$4 zZ3Y*1;y5vSP2{O-oQuW0s}T)2NuJ5^#vwk7(MQbJIMrQFfpEJDd`~>z12HZZtO<*E z9|KcA7uX1%_3KT_!y#8agTsOHsHZLjW^SL+gjEfdt(XS;0aMo!arqED<16q&@QiDZ z(w_2)R882Y`P+`GvhyS>+}UclNEW7{G4u^G_QOUVt1}9_>mWdJywcR#9b{W;QPm-i9btgTH}EHYt*->OV7buqlQq(uVhU2$aYEB@v4*2NrAjd8 zzS=7tYf`?bKOH0JBw@D?}w2i-8|qqO0%u(g=uS#9`i^V;ya zwx|uiu^VpXWi@>eGQx_397(CmM zz#-t-x4reaWvW>*m>$K5QXaazs#akU&)-Mh*sE*aTnAK7Mb)blY0Nm>QOt@|R8FOG z-kEyWKlqwx;#QzcZ&fJ#%`%leRv_e->Nn?W=(oVE&u=WZUsr~5KCxSrhbS-UZ(|WA z*CyO`x>wWdrQSKgbA<7(fdkWHI03=KguN?y%Db8<%b6a5dx2+qzK3~tJlUse@j_tg zP;WB-B*LQK%uj*oH}N~DbJhVi%K%dhhAwt<8glfl2ch({ua*GnYF0H))~CEwi?d9! zDlyW3QRgY|CSm*g$9n9ORZ;2fOSM=av>a_E7XIo~e+6y{%&@eWa_y~W5_ht3+b}hG zlm&PC$&isb-%I( z)13O8)|~d=dLEh0b|Jg}m)ew7XLO42`iEkd>Q+(mcopLN`ugO>wIEzwV~@dnj=auD ziQzCOSYxcF1Pr@KSKVQHfrd=z4#siZkfQ0N|8N8D`vQU64dYy>VNrc6;34BHk zn{gDn>qPLRNuXEr*2|vunne3mRj&Ea!OcJ9ojv`3aOb7Ed+YTCt9vQfr(#P;M=N?w zY8-NEUK0A{Yba^)|L3$g!6Ptrv2CCl3ToASCU!&vM#X>h;T|me`8-L za4BGIyoq%h^U`ki%edJm*4i)UX1~0fePXTs3U2m!c3vAFVy%77e{1uV`mGih0WPeG zzo#4KZdI*$F%`e{x{leNI2UHu45~7OIN{i7=8vah`Qyo0=`v-?mcxCE6)NJ!MP9jxI~V0EZRA@Q z)oT~kYx{VGV~dupl-v7w%}uAU@QBFHUF6GddcD`XPfV;HH{RgFn79=#ZFoWT^2i*_u@)|CEshjQD_;34l19X34kx|)fTCQtcb>NMQFqh7xA(MKPD z^6C8f3l=U~EMLRJdw5o?T(x@jnlHZi@~gGDk_UJ4@KT;lo4@^b%hs*mefRygZQFO? zhMt{2;*Or(dvHt7Py6=mKXBmS!JiKuI(+yD?(8{s{P-`w{QBz&T-K*4&aD#z#s*a~T ze^?jqs7ng$3tUcvc@GL@hARj>aDBKW?8d+@=RdxJTaF_Sjn^XK5%UkdZx zZss0vPjmQ*g_;4c3l3Sp&6K80KRdt;^_+ilpp9QgHGcnOH#70@PsF(s+%PTwa#1JxOVlg-*!s*%Txv6kB+%`Peq)ab$uyl z#z|O6&jmo=LP7lX01>w#z^^ulwYDz-e#HFI9$QWq^pk4;%X62dW8j(MjL#(LBzVR&19V2UKj-Nj=`wisqq?;# zqszzbEB6pKaui)r=J}$vsef`vw9-_l>twGZvMGKst%rd z><3#ukm{-Y^psOl3)TL-1NEf#;OWoFlwYI>@O1md&6`qh@Jug4mg2#)G}czGEZJ21 z85eg-F7S-onFVL0bntRMWZahCSM59*W|u~Rr`wcaQ>Dq^>F3m&Q>EFeotq!Qh#<8NVVu;F-pu8ONjv;N^HexG8-Io^GXsho$-I``gI> zrQlh|j;x;~tpLyXKe_&^v;jQ*lyH~qX7F;IG_;krfoJ?v$IX=vf@hqOh0;;*42vl~ z1zwcnMU~Guxk|IW1^O9R&~j5#U)yV-H@Jx`Aik z8Gm4f6c3(h{Bq}6$qAlmynT6+ln!3;XP7iZQAUYe-#bL;JwW`bw@ zA7ng{K2`Z6=8Do%)y_~f?61JfeuDoRJoA5Z*Q3&Q@XV`>+Yh9J;Hd`>O1vqZ0Wa6# zN!Z(~@{dse?|^4oGVt#ac)8p!evJ)xO8j{za8B@i&wMKgUa9}k;lVT9GG$VvO5hpi zdT8%8!85GeD2saFW&h3Vr6#JKjEjFr!Qe%Gh*aO7{7fhH1kX6PJG@^?1kZ4NCU%!n zz_T1Pp4^rOfv4My>j$Lq>U#)BX@;(uwFGkm4*R9^Z% zL)r_TalXGKRyqn^E<2?Cgvx(byS8)&yvVDIDo+`H9X#W_yToYe33!%E#*-(~3-EIN zM;Ya4qP%DQ%mbeB$q0qs0iJ%IF5XNkt-j|Zo0qV&VY^ftJoOXl$vmm4YX8LdC!}ET z^nXDYZ>gPXpYpsjc-Db-%_mBI!OQu!V4!3M&os`Ej!F*o{lw5>()-}$HaKyjGzL7= zj%Z2~Rr?PfJdkFp?;kukEzJYZ_$N)NB2~krSz1b(Avqb>!KGmHPO25>oUux0PKGv| zj$<%MNs0O-v(aY6)u@>KH}RFtf|(oH9&{tU#lg#oX_jJ3#nBgXc#T7~*yPRA=CVzB za>ZfNX8{I)6V{j?8h`*zb}Vt36KwRK2Yaw6FT2H|CX>}}GxEJ~&Wrb4$tf;7mhaPX zv$QQ$_SI&`0frcGdu3@9KToBAuJ=XE%Y*CT~keNRTh`%2DVX)l>B`x}NIq&EJ8UoGk>Sa&m0VV`C@XDB zEQP;vrMBt^q%%ai%qnfA7U42Grvcj^k`0MA>{LWS@s@q;puk$F1*?&Y_ljLnf#Ht> zw*s@qWi|;WQE3bbi8hB*&boM)A<<#hC*$r8J+{}$@8qmN%25zDn>E>Nv~n_%F=J?Q z2FNLp8(gBz$#`SI)|rmNS8JE3O_@2WL?yEzMRh^tK%C^9)Kw)DOg^ByyEho3boVkUBYY zGOHmDH>Ha9t546A83wyK*`ZYWtjNd-R`ND0np|Ud;zDMecfkG?<`^8vQY*6nlyX-R zh_X<^c3_lmQ6k8UXSI=Knw&~UG8U=hu$pI*-(gCCb*!c&<^}p;_&_-fw*q?3FuSM ze9!`ra90OBbp(Oyf@hg)u^+G*;l$tx4NTsnB+QwA>~jTf;D#Hj_-*Hho|jg{;7lWr zO22K-xwR6t$(b0V*TZ{Vkdk($l{$;SP+8@((*ml_ z8XN#zUV}O3Mm<*8=X?{(N8oT^mb<{b{hDPZaBX1fOag}hQ=bx;{*~5X`o}pvVIB?4 zF@(SdU~PO>z>IZ8n6C!Uy7bP917#t?DuK9oYr^JQffjS_zLv(kIB-D?=30X`Ewo=; z3flG@GbDRQd1#jFU%8dPQcGo7C>7p$f&>l(&mj1F)xCUPPJA-uZRb!t?rAZ`q}b56 zQ%GbLNdY9Qng-)`%9k+BwMEP&4Q-X-k_K^PD^GdiiN_9^tpan3meZL6$GTy?8;*0s zHsBH(_bG0;zlz^>hRKZ^{UA1!V>uEx{;BC3i}1AR9p{F}yWt6Lc%mDgbR}51`r!b09cUadyQSVBibjF?j-v2gq$7rxu3&tJ^t_4pdOJpCI0`Ro zG4`~xpU*H54zwP+4 z{Wq-dt3;dEsN+m5kCrGqL#b0>$^~)KBm9;iUy#79z*FTBI9SE+D30*9 zT(Ey0SASBBW`!l%k_fxG8n(cU7vmzZ7;Xqm*+O$MTsaD!Zp84UJNU|OI7oxpk1*eb z{Y3C=O9GqSFt^rJ(wGkb&w3{86F1Y~G2pfSjdjD5fNN>&vs?l+c!L|Jxi-E_fjOiT z;S*Cf2)x`4(?6~I&A?js#9H@TR4j(S(||c7YSlq$cNXw$rveWJUq*vb)UwlLqX(d^L?|4Z@)wRYj#Q@%#$37Q{M9J%DEG zKLEnHjfmq(0(qK7n1$_tl9<&X#9kc`V1867cN010>7x>+vJ)pgypFsOS z!d&~Tf%p6W!Ho6}fY=}W3_1il3_1eR`XPAcJ7pN@DCijIIOrG9ub>m4-#{lptk-ox z>^n|_&VbH>eg~Zc{Q)`;x&XQex&*omx&rzWbQN?BbRF~;=mzK}=oaWU=nm*E=pN`k z=mF><=x@*?&|}aO&{L2%=o#oa=mjVP#LDFX$_B~~$^ps=$_2^|;+NCdkLCmA2XXAi zepJ*&=2s!msxU=I_#SmLryFLz3G*8;&kOv{>L%vu-}G|A*Xf#>bzl8Js7U`GNDI@m z3T;!5XB$)sIsFQz(qCgE3?cs zxQZLD>W0OU8xekWH}e{9n8)h0{&Px+Smdb>a1l2wr$?=G38+)rI%sjj1%R0zQ3tsN zvb-Cne?oq;4R~rW<6BjO+0L43Fx#mXQ-0LbnEwF2oCZ^771LnKj8Y)1UpQmrO+kw6 zXB<&oq(TUvb0m3Gyc$o+Ab~kwLd-m(eQp6ICQsrPP%UQqNt~YId;Y*moZcdF%PilQ z2GKpIt+L`4lk9SKwVHVjFND{Qhd9$WaTW7WQjH(IyrG@&Y@VNQBGTmCgDmN zl{mLT`g9;K#1WS&M{;%!Ckc7}UgP5B^s#-X__f98)Wp)1zt=$dq0IxfdBuPy=wCKt z`;W$Te{hQ<{V|xxwwRQUchWnYOn|>yzbGHDI)Xw;>t2D&rgO$YXmIbAaa&Pu6!~-XynTF7ON3r;HQ$9x!EA4)_;?C;Mim z=WWMdp0muF<9plQ~g~c+;FOj#kimP zRxS7^Fw3%r22;LkG39v~jXCA5)|_%wYfhO-EYf!y`NRGvvb!Q{sngND7PJ3)>xIn~ zE?g69muJA_Rj$l+jG+jRWk@+8`W@;4Tu!P3stfW4Q5Wz9(Vpo4{DA%4-qiyRaC=uD zxPjX{9tY-YoB<0BhS4&E@p9QrxcvX8hl2S)>0F z@oA2>rHwE94z?X(9;n7g;7-8I1A+B!=B%fzyTY9KUDRD8_VQ4x7X8N<#DhAUz~g~g zZv~#B##`Vdq+4r0)(v+9W`8E^6W7w<>F|&BPMFUEW;qJ{iCg$9RQsaMZ--s>9|G@i z!#}84_{Zyk<$9|2mm7csU`Lp*1Fq_Zwf1Qqs4@QtxQZM0(cmdC*QS5kYp^yy0%2Z2 z<30$O@<7Co?Se8+;O~I7`OkK*4X-gU+nuqur>qAw1>Y7V=A1@>&kuUr?F8x>j&Kfq z)6d?%e#n}p9N+yOY3hl%v(8X%YB6QgoIc7ma09`!?FgN_C3yCO0=EOtG8VWqc;=zN z-N7>t1%40wJCQA_ddzMFr(rc(GBi)#Z5|tu!fRFo16|fsyFR66tyo?mqSwXp;*?mO zxN=Zj$wd90b2I{{gJ)R_%=r|KIRt(TzB=el>VnJdyA@m(rhKUqqv(fRGo?Hcm^uR6 zQ(Bt0d_}$bka=Yvn0zcI&0Be>PuZAXfx?LyJ8p@6`Pj^V+yUhtW$uW=&NW}5+Dcnv zmFsVB;OULHmenh`1D?#^0eJf3xfIU^c%H_yF`mWaJmvgtraq18a}u7E?d$NQ``_`T z`yvKUc{@-WJSmgX@npSTjb{@)FXKsBQP`+l{U3-Y`#>X}^lu`b^lzhz&*Dk@xlNw( zR+cKZGY$Bv;lFl(5i4&D zHQE15jNr(KPZZd&cQMj#lW*p@8p7;M|1SYy@*ySBY;gP+H*)0uFAl@73)N)*7kMkD zME-@$vTRZ~G8zPmDQegT+ zxgjI-I=%xKPqLqXlfLG)*AuFD%*`+>N3@u}CEz($q|Uco<+)z927GQj3xmD}p94?! zkDI__+DTr^{vJGay?mfU;8FDQIPI`%hr0c*;OS2_&{^>GhyCbz^*!BR1y8s9T?0=Y z-VbyaJhDRW-yf*33030C>ikdTStf#)mpXFnEq9Xx3G=?*-nV+UHzeKb2?L{lU{Mnt+t9zAp}b z7^0ySN4BYL;Au`hYnN)LB={rX8ArzT zH}DLLI{roQj1R{^f2nrZcJHZnX!Zg;^PwiFK$4P&I`Bonv#jWs7kJuXoP1R~Rlo5GT)Cb#-qae$b8sT0lX`PZ zf+IaS&W0;6Wy#A%uej-g^CM}P40a~Mvhpejav|Pewj1cLJn1caf+O3wyo__x@@H9a zvtLTQsjc3HZ!+ku!MJ=4t}Qt2l47&qtdbROL&WzAlnG_%&hj8bbQDTxZE>o{oPvE@ z_{(U-o5FC88?K{LY)(1gcvCQ@$&FBv=_Qs3l++_GnYU!nwsN13NUx#`!n4d8bvQW3oKn6d`|^kTFiMS=9*h3No%0WKHrbsZp+GRqk>M(b7}syXv#shu+rYCuGzaYi zPZ>n_`@!?cc>e~T>FNi%1fKC947v%Paj<}1fM=L&*OEhdZvGtBm&An=T5TTmPDbjx-bq1tH!zB_ovjcwNeo@t?sv4UsX-v^0y zOxfvF-*Zeq5Ipmovh#iLjC&8zRPgkZa`9vE43~a=2A*jg4O*(c4+sCH`aS^sTJVfR zRnS)Oj6Z1yc;;0{&=K(TzZvMP%8vwp4LrkQ+1~@tu*QQPfM?z70LtT3@+}H{N$|8Y z22>h6^LZSo40zT(_PA`+ zEf!=0&v^2e2A=*Tf<~(EgTPM$&$v|sO##n5pquI78MhG7C*T>M1kiHT{sizs9&_Gi zrE13nej|A14de8k%7=pg5j_3YfewOaJZ+#eDqk1;U#flP(LL~tn>Xlz%5!}DH+ZI< z^b|bvtt-gGrPNRMOGUx6UDO0s0?)V@K)$LS&I7ap&pctj(Gfh;-WL=Jp5c!Ibq3FP zvJJ$7XPBIKGJ>a{6G1|kae#N?J=;hP&}i^XFZ#CKgJ;}=LD$sxO~F3|&vG0Fk_ISo=mj}!9eCE&G|-RW^WaIHMLuSN(PJ<6;rJE>y417~d^_4| zvP8)rZ^9x!54t9I!cl1#2K0t>V>;HDaTELiT#t)$TbV%qq!M%poJdv`4aGlYEfOCq z#J${dADfELQ+Y#QF+fMhv0*1BQ=qr-)I%70ViBXBW+M*WniPHD@ZwUWPgZx?A%T_#g$z(N zk#Rke>dQ7#<*Q!hPhG$Q2icj6`AUwolP&PGk0=OlZW)k$!&!Gzy1(j#Ge+13BF79T zT9GIms+Un(Jstx_iFo52uu`yU2FQC16tnIq#6*^zx0=mJP!B3dT7R)EBgN#64;;zI z>l5U!8SooN_>u=wNG%idt&Su))c7>Hj^dJ|2!j(x@*ViTWow*^X0@}X*HgAX;A_>1 zIE$~`pRWe2WExfk)JRg1>xW$&vI46Kd?3Ds!|yQL)47#}${&ifh5UFpj`CGQD9S$H36D4RbjO)a1TcsKj;Ksg#+YC&vds&Cql?9GC31jG|I*e zr6s7kKa@>x9+5^{mDl~fnK*+U_fErrpBb^s*<()=b*YUq^NBVn*9$orEPu5?kqo<& z_tM9iv8_8Dt=(mDI?zJR)_R7tBwQ`U1gROD6N-EsuIm1cl1e&e-+t(pn(cHnveCxp=e*^*qlR+IpV%LE1hGG5-xIFl2s|S}FU^s> z#rYY{r)ZV64O9V(9^*aShk@G_@IhQFS}pFqz?Y`vZ_3Bvl?CVQ9Vwyc92_FO`w>T` z|D|~T$3+)AK2RusXClBSKyzFx^JC`hGg&`uas43bgL(Npnl$O5l1m+AbPxwQ=<2DDAH5tv#oMK5=ZsC)A zQ$63zdiT%HJ++gB>8dyuSE@U|MT;_q8D<2A;;rfqI*53DISLQqfz6eacTHw3D)b$1Co;UUZ0&~wBWxK!` zz|4nN=f9x^@#~xNG&ts{aAow);hyq5%yXofX%hA9Eco&o{4scr<%Ibs;A?5{58x@^ zg*o@hG2H_5Ts7;t9(7IrGNhH?OG5p@(Ne61@>4GUtNFwfFvj<2znq6@soKkdOE*XC!j|BiQqVFo?XuN5DYl*fUvCh7PGKNO|>qsqr$B@n|I z0-_nBDNn7TN0fhTGZgQkAY{EfG{Qsf0{G0sKlmXz@{gEPZFNAnF?ibqNQAjLsVs~J z6#!At^Cw)iR-invU<_EZ_-h5CPpKgOiYgCz!jATeff#ci5V~-v()jA%Ym`gBG0G;( zxvG6Uq}_N&cN6hsPJV+YY;9Gl1kYy&<9^k$c=yy|D13)7=K z)8+2-TkP&MvljduqH>*x6gggLYCVvRZ1Mtk1+Mkh^DbeaubNaOG;?g17e%Q0lq%sza;<{W%?_>XBUvdPHVqo?;V}<%^=~vk0D)K6Q1qsD(=HfP3LN z0>s)Xa11Q5HVNDhn3C#Es!8UTIB{_fzWAw3#bnm!tgzOraluTYyb-yJJSFMA5!tGX z#f3RyBQjMx%4o{@{vZ+WYv9>(D@|02kW!69I^4zT#N4w!#pbX$6W(aH;-8X*KFZ1x z%!~_<(J_z3wLr~U!l@4PJDlkE_i5Qe{v-oto;b6N3ov=hsRl zif$hf-ps36W?ZHs9_$&KdA%1x$M5y&(?V=X)BL5n@fI6p zmJaH)`>M0p$XIXh7T(@bJ)@#S!y>x|cWNI(VaM_(Q3{THyhv&tZk3+ZDj^;2UIRDR zKak>1ZIhbKohb!P4Ur6;Ur67cT`6tU|0o4ot4c@0f~EGk&PjQ%`AFqIJS<(W@ItEf zRe9;p7E5sh`v|G^w?5LxS4TcQKhER z*^Jpz;W;@aPv2WozFrfh8EZbq`k`=(xCIPQqrVt(*K)d^BiDV5bE$- z@h7Nv!=UR@0vcs$nBn#VG#Zl-c%}l>3~p$a{$L5D9TZfnKqCwdN==W!jTYI@nWjK4 zQ11b-{yXO{0{K92K-8YW@j1wF!v+ammyq9zoDLBBr9G71e@W4}zUC&A14un^qzY^R z@Kgn$#szbM8adc5oOgcx*T;^*aWjbT>cG6?k-h)!MAq~*cVULu&;HhUiM#kcl>gKI zQL4UDy>^uidyI&&+OkHQy{A7^b+8ve`4epzvN;QYgPWzvz`Vu80lGOCG@HrD5(FHh zW8eWwffhEWrsyVBGP8mbYO<`Mo{6QNfr3V=p@oG>qD88)f{}rdfv%yEu92lCTRCvp zv9y>CSZo1r#^nTFex9paoR?X^YM^JLXTadc51Dp|hpsU%X3^#bj-_Vn0?*_H9_Osh t51Cs?)lJXIPXZ3XY6}B9p};9f(AmQ2x@o{kLSQ#qn*($SnJ#by4FE)`Xxjh) diff --git a/utils/wasm/tiff.js b/utils/wasm/tiff.js index 68778e8..5849b24 100644 --- a/utils/wasm/tiff.js +++ b/utils/wasm/tiff.js @@ -3,16 +3,16 @@ const {version} = require('../../package.json'); let wasm; class mem { - static alloc(size) { return wasm.walloc(size); } - static free(ptr, size) { return wasm.wfree(ptr, size); } - static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } - static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } - static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; } - - static copy_and_free(ptr, size) { - let slice = mem.u8(ptr, size).slice(); - return (wasm.wfree(ptr, size), slice); - } + static length() { return wasm.wlen(); } + static alloc(size) { return wasm.walloc(size); } + static free(ptr, size) { return wasm.wfree(ptr, size); } + static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } + static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } + + static copy_and_free(ptr, size) { + let slice = mem.u8(ptr, size).slice(); + return (wasm.wfree(ptr, size), slice); + } } function decode(buffer) { diff --git a/utils/wasm/tiff.wasm b/utils/wasm/tiff.wasm index 197e389411cc61e1f978867efac576a305a10922..5e91acc8fed64e28a47a1e9670b781a5a43603f0 100644 GIT binary patch literal 190349 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≪yFe|AA_W6W+u2jqh+X+ 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 URu{l^8$#g30Fk~RwyyL41Hf*_F8}}l literal 187853 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

    KP0MRPl_jh0JD5)m=lCP$Otr#(OF>jX%_g;H!H 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 F{{gV$LmB`8 diff --git a/utils/wasm/zlib.js b/utils/wasm/zlib.js index 4bb6d6c..a7875ad 100644 --- a/utils/wasm/zlib.js +++ b/utils/wasm/zlib.js @@ -3,11 +3,11 @@ const {version} = require('../../package.json'); let wasm; class mem { + static length() { return wasm.wlen(); } static alloc(size) { return wasm.walloc(size); } static free(ptr, size) { return wasm.wfree(ptr, size); } static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } - static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; } static copy_and_free(ptr, size) { let slice = mem.u8(ptr, size).slice(); @@ -15,7 +15,6 @@ class mem { } } - function compress(buffer, level = 3) { const ptr = mem.alloc(buffer.length); mem.u8(ptr, buffer.length).set(buffer); diff --git a/utils/wasm/zlib.wasm b/utils/wasm/zlib.wasm index 2f4e23242318008c8d40ad04907f117e4371081a..33162ee30b8830a316bf07eeeeea172931e05a1c 100644 GIT binary patch literal 46748 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 From b93cb99c5369da0b4fe9c0d5c0b8d5bf7c0a8b11 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 20 Feb 2021 20:26:11 +0000 Subject: [PATCH 024/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index ac9213f..5a975ee 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),s=r(723),n=r(876),o=r(327),a=r(76),h=r(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return l.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)s=n=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;s=i(h,a,t+1/3),n=i(h,a,t),o=i(h,a,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*i)}static hslToColor(t,e,r){return l.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const s=Math.max(t,e,r),n=Math.min(t,e,r);let o,a,h=(s+n)/2;if(s===n)o=a=0;else{const i=s-n;switch(a=h>.5?i/(2-s-n):i/(s+n),s){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=l.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}__resize__(t,e,r=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(t,e,r,i))}__crop__(t,e,r,i){t=~~t,e=~~e;const s=new this.constructor(r,i);for(let n=0;nthis.width||o>this.height)continue;const a=s(i,n);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,s){t<0&&(r+=t,t=1),e<0&&(i+=e,e=1);const n=Math.max(Math.min(t+r,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const a=4*(n+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const s=r**2;for(let n=Math.max(1,e-r);n<=Math.min(e+r,this.height);n++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(n-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,n,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(r,i));return l.hslaToColor(s,t*(e?1:n),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(n+s*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,l.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,s=256-r;return(255&i*(t>>>24)+s*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,s,1-n,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(i,1-s,n,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(t,e,l.hslaToColor(1-i,s,n,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[s,n,o,a]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(e,r,l.hslaToColor(s+t/360,n,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let s=0;s~~(63*t)));if(t&&h63-r)continue;const _=o<<12|a<<6|h;i[_]=(i[_]||0)+1}let s=-1,n=0;if(i.forEach(((t,e)=>{t>>12&63,a=n>>>6&63,h=63&n;return l.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),s=Math.cos(r),n=e?Math.abs(this.width*i)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*i):this.height,a=l.new(n,o),h=n/2-.5,_=o/2-.5,c=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=c-i*(u-_),r=f+s*(u-_);do{const n=e+s*(t-h),o=r+i*(t-h);l.__interpolate__(this,a,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const s=Math.min(...r),n=Math.max(...r);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=1;s<=t;s++)i+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let s=this.height-t;s<=this.height;s++)i+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-s,l=(255&e)-n;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&s+t*h)<<8|255&n+t*l}async encode(t=1){return await i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),2303741511===r.getUint32(0,!1)){const{width:r,height:s,pixels:n}=await i.decode(t);e=new this(r,s),e.bitmap.set(n)}else if(r.getUint32(0,!1)>>>8==16767231){await o.init();const r=o.decode(t),i=r.width,s=r.height,n=r.format;e=new this(i,s);const a=r.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const i=n.rasterize(t,r,e),s=new this(i.width,i.height);return s.bitmap.set(i.buffer),s}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,r,i=4294967295,n=1/0,o=this.WRAP_STYLE_WORD){await s.init(),t=new s.Font(e,t);const[a,h,_,c]=l.colorToRGBA(i),f=new s.Layout;f.reset({wrap_style:o?"word":"letter",max_width:1/0===n?null:n}),f.append(t,r,e);const u=f.rasterize(a,h,_),w=new this(u.width,u.height);return w.bitmap.set(u.buffer),t.free(),f.free(),w.opacity(c/255)}}class _ extends l{constructor(t,e,r=100){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof l))throw new TypeError("Invalid image passed");const r=new _(t.width,t.height,e);return r.bitmap.set(t.bitmap),r}}class c extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){await h.init();const e=new h.Encoder(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(~~(r.duration/10),r.width,r.height,r.bitmap,t)}return e.u8()}static async decode(t){let e,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),r.getUint32(0,!1)>>>8!=4671814)throw new Error("Unsupported image type");{const r=new h.Decoder(t),i=[];for(const t of r.frames()){const e=new _(t.width,t.height,t.delay);e.bitmap.set(t.buffer),i.push(e)}e=new c(i)}return e}}t.exports={Image:l,GIF:c,Frame:_}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let r=0;for(const i of t)e.set(i,r),r+=i.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=4294967295;for(;r>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(883),s=r(354),{init:n,compress:o,decompress:a}=r(423),h=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),c=i(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:r,channels:s,depth:a=8,level:w=0}){let g=0,d=0;const m=e*s,p=new Uint8Array(r+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,r,i,s){let n=0;if(0===r){for(;n{const{version:i}=r(306);let s,n=null;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}const a="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),h="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const r=o.alloc(e.length);if(o.u8(r,e.length).set(e),this.ptr=s.font_new(r,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const r=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),i=JSON.parse(h(o.u8(s.font_metrics_buffer(r),o.length())));return s.font_metrics_free(r),i}rasterize(t,e=this.scale){const r=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),i={buffer:o.u8(s.font_rasterize_buffer(r),o.length()).slice(),metrics:JSON.parse(h(o.u8(s.font_rasterize_metrics(r),o.length())))};return s.font_rasterize_free(r),i}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=a(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,r){e=a(e),n&&this.refs.push(t);const i=o.alloc(e.length);o.u8(i,e.length).set(e),s.layout_append(this.ptr,t.ptr,i,e.length,null!=r?r:t.scale)}rasterize(t,e,r){const i=s.layout_rasterize(this.ptr,t,e,r),n={width:s.layout_rasterize_width(i),height:s.layout_rasterize_height(i),buffer:o.u8(s.layout_rasterize_buffer(i),o.length()).slice()};return s.layout_rasterize_free(i),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e);s=r.exports}}},667:(t,e,r)=>{const{version:i}=r(306);let s;const n=new Map;class o{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=o.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={Encoder:class{constructor(t,e,r=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,r)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,r,i,n){const a=o.alloc(i.length);o.u8(a,i.length).set(i),s.encoder_add(this.ptr,a,i.length,e,r,t,n)}},Decoder:class{constructor(t,e=0){const r=o.alloc(t.length);if(o.u8(r,t.length).set(t),this.ptr=s.decoder_new(r,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t;this.free()}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:o.u8(s.decoder_frame_buffer(t),o.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e,{env:{push_to_stream(t,e){n.get(t).cb(o.u8(e,o.length()).slice())}}});s=r.exports}}},327:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={encode:function(t,e,r,i){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,r,i),n.length())},decode:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.decode(i,t.length,e,r);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e);s=r.exports}}},876:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={rasterize:function(t,e,r){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const o=s.rasterize(i,t.length,e,r);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e);s=r.exports}}},76:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const r=s.decode(e,t.length);if(0===r)throw new Error("tiff: failed to decode");const i={width:s.decode_width(r),height:s.decode_height(r),buffer:n.u8(s.decode_buffer(r),n.length()).slice()};return s.decode_free(r),i},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e);s=r.exports}}},423:(t,e,r)=>{const{version:i}=r(306);let s;class n{static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static length(){return new Uint32Array(s.memory.buffer,s.cur_len.value,1)[0]}static copy_and_free(t,e){let r=n.u8(t,e).slice();return s.wfree(t,e),r}}t.exports={compress:function(t,e=3){const r=n.alloc(t.length);return n.u8(r,t.length).set(t),n.copy_and_free(s.compress(r,t.length,e),n.length())},decompress:function(t,e=0){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const i=s.decompress(r,t.length,e);if(0===i)throw new Error("zlib: failed to decompress");return n.copy_and_free(i,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),r=await WebAssembly.instantiate(e);s=r.exports}}}},e={},function r(i){if(e[i])return e[i].exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,i)=>{const r=i(347),s=i(723),n=i(876),o=i(327),a=i(76),h=i(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let i=1;i<=this.width;i++)yield[i,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,i,r){return((255&t)<<24|(255&e)<<16|(255&i)<<8|255&r)>>>0}static rgbToColor(t,e,i){return l.rgbaToColor(t,e,i,255)}static hslaToColor(t,e,i,r){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),i=Math.min(1,Math.max(0,i)),r=Math.min(1,Math.max(0,r)),0===e)s=n=o=i;else{const r=(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),a=i<.5?i*(1+e):i+e-i*e,h=2*i-a;s=r(h,a,t+1/3),n=r(h,a,t),o=r(h,a,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*r)}static hslToColor(t,e,i){return l.hslaToColor(t,e,i,1)}static rgbaToHSLA(t,e,i,r){t/=255,e/=255,i/=255;const s=Math.max(t,e,i),n=Math.min(t,e,i);let o,a,h=(s+n)/2;if(s===n)o=a=0;else{const r=s-n;switch(a=h>.5?r/(2-s-n):r/(s+n),s){case t:o=(e-i)/r+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const i=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(i,i+4)}setPixelAt(t,e,i){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,i),this}__set_pixel__(t,e,i){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),i,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let i=1;i<=this.height;i++)for(let r=1;r<=this.width;r++)this.__view__.setUint32(e,t(r,i),!1),e+=4}return this}clone(){const t=l.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__scale__(t,e);return this.__apply__(i)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__resize__(t,e,i);return this.__apply__(r)}__resize__(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let r;if(i!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return r=this.__resize_nearest_neighbor__(t,e),r}__resize_nearest_neighbor__(t,e){const i=new this.constructor(t,e);for(let r=0;rthis.width&&(i=this.width),r>this.height&&(r=this.height),this.__apply__(this.__crop__(t,e,i,r))}__crop__(t,e,i,r){t=~~t,e=~~e;const s=new this.constructor(i,r);for(let n=0;nthis.width||o>this.height)continue;const a=s(r,n);this.__set_pixel__(i,o,a)}return this}__fast_box__(t,e,i,r,s){t<0&&(i+=t,t=1),e<0&&(r+=e,e=1);const n=Math.max(Math.min(t+i,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const a=4*(n+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+r,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,i,r){const s=i**2;for(let n=Math.max(1,e-i);n<=Math.min(e+i,this.height);n++)for(let o=Math.max(1,t-i);o<=Math.min(t+i,this.width);o++)(o-t)**2+(n-e)**2i?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/i*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,i){for(let r=i;r{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,n,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((i,r)=>{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,t*(e?1:n),o,a)}))}composite(t,e=0,i=0){e=~~e,i=~~i;for(let r=0;r=this.height)break;for(let i=0;i=this.width)break;const o=4*(n+s*this.width),a=t.__view__.getUint32(4*(i+r*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,l.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const i=255&t,r=i+1,s=256-i;return(255&r*(t>>>24)+s*(e>>>24)>>8)<<24|(255&r*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&r*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(i,255&e)}invert(){for(const[t,e,i]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-i&4294967040|255&i);return this}invertValue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,s,1-n,o))}return this}invertSaturation(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,1-s,n,o))}return this}invertHue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(1-r,s,n,o))}return this}hueShift(t){for(const[e,i,r]of this.iterateWithColors()){const[s,n,o,a]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(e,i,l.hslaToColor(s+t/360,n,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let i=0;it/e)),255)}dominantColor(t=!0,e=!0,i=15){const r=new Array(262143);for(let s=0;s~~(63*t)));if(t&&h63-i)continue;const _=o<<12|a<<6|h;r[_]=(r[_]||0)+1}let s=-1,n=0;if(r.forEach(((t,e)=>{t>>12&63,a=n>>>6&63,h=63&n;return l.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const i=Math.PI*(t/180),r=Math.sin(i),s=Math.cos(i),n=e?Math.abs(this.width*r)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*r):this.height,a=l.new(n,o),h=n/2-.5,_=o/2-.5,c=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=c-r*(u-_),i=f+s*(u-_);do{const n=e+s*(t-h),o=i+r*(t-h);l.__interpolate__(this,a,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),i=e.map((t=>parseFloat(t[0]))),r=e.map((t=>t[1]));if(0===i.length)throw new RangeError("Invalid gradient point count");if(1===i.length)return()=>r[0];if(2===i.length){const t=this.__gradient__(r[0],r[1]);return e=>e<=i[0]?r[0]:e>=i[1]?r[1]:t((e-i[0])/(i[1]-i[0]))}const s=Math.min(...i),n=Math.max(...i);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}return this}static __gradient__(t,e){const i=t>>>24,r=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-i,a=(e>>16&255)-r,h=(e>>8&255)-s,l=(255&e)-n;return t=>(255&i+t*o)<<24|(255&r+t*a)<<16|(255&s+t*h)<<8|255&n+t*l}async encode(t=1){return await r.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),2303741511===i.getUint32(0,!1)){const{width:i,height:s,pixels:n}=await r.decode(t);e=new this(i,s),e.bitmap.set(n)}else if(i.getUint32(0,!1)>>>8==16767231){await o.init();const i=o.decode(t),r=i.width,s=i.height,n=i.format;e=new this(r,s);const a=i.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(i!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const r=n.rasterize(t,i,e),s=new this(r.width,r.height);return s.bitmap.set(r.buffer),s}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,i,r=4294967295,n=1/0,o=this.WRAP_STYLE_WORD){await s.init(),t=new s.Font(e,t);const[a,h,_,c]=l.colorToRGBA(r),f=new s.Layout;f.reset({wrap_style:o?"word":"letter",max_width:1/0===n?null:n}),f.append(t,i,{scale:e});const u=f.rasterize(a,h,_),w=new this(u.width,u.height);return w.bitmap.set(u.buffer),t.free(),f.free(),w.opacity(c/255)}}class _ extends l{constructor(t,e,i=100){if(isNaN(i)||i<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=i}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof l))throw new TypeError("Invalid image passed");const i=new _(t.width,t.height,e);return i.bitmap.set(t.bitmap),i}}class c extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){await h.init();const e=new h.Encoder(this.width,this.height,this.loopCount);for(const i of this){if(!(i instanceof _))throw new Error("GIF contains invalid frames");e.add(~~(i.duration/10),i.width,i.height,i.bitmap,t)}return e.u8()}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),i.getUint32(0,!1)>>>8!=4671814)throw new Error("Unsupported image type");{const i=new h.Decoder(t),r=[];for(const t of i.frames()){const e=new _(t.width,t.height,t.delay);e.bitmap.set(t.buffer),r.push(e)}e=new c(r)}return e}}t.exports={Image:l,GIF:c,Frame:_}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let i=0;for(const r of t)e.set(r,i),i+=r.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let i=0,r=4294967295;for(;i>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8;for(;i>>8;return(4294967295^r)>>>0}},347:(t,e,i)=>{const r=i(883),s=i(354),{init:n,compress:o,decompress:a}=i(423),h=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),c=r(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:i,channels:s,depth:a=8,level:w=0}){let g=0,d=0;const p=e*s,m=new Uint8Array(i+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,i,r,s){let n=0;if(0===i){for(;n{const{version:r}=i(306);let s,n=null;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}const a="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),h="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const i=o.alloc(e.length);if(o.u8(i,e.length).set(e),this.ptr=s.font_new(i,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const i=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),r=JSON.parse(h(o.u8(s.font_metrics_buffer(i),o.length())));return s.font_metrics_free(i),r}rasterize(t,e=this.scale){const i=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),r={buffer:o.u8(s.font_rasterize_buffer(i),o.length()).slice(),metrics:JSON.parse(h(o.u8(s.font_rasterize_metrics(i),o.length())))};return s.font_rasterize_free(i),r}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=a(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,i){e=a(e);const r=i||{};n&&this.refs.push(t);const h=o.alloc(e.length);o.u8(h,e.length).set(e);const l="r"in r||"g"in r||"b"in r;s.layout_append(this.ptr,t.ptr,h,e.length,null==r.scale?t.scale:r.scale,l,r.r,r.g,r.b)}rasterize(t,e,i){const r=s.layout_rasterize(this.ptr,t,e,i),n={width:s.layout_rasterize_width(r),height:s.layout_rasterize_height(r),buffer:o.u8(s.layout_rasterize_buffer(r),o.length()).slice()};return s.layout_rasterize_free(r),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},667:(t,e,i)=>{const{version:r}=i(306);let s;const n=new Map;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={Encoder:class{constructor(t,e,i=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,i)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const i of this.slices)e.set(i,t),t+=i.length;return e}add(t,e,i,r,n){const a=o.alloc(r.length);o.u8(a,r.length).set(r),s.encoder_add(this.ptr,a,r.length,e,i,t,n)}},Decoder:class{constructor(t,e=0){const i=o.alloc(t.length);if(o.u8(i,t.length).set(t),this.ptr=s.decoder_new(i,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t;this.free()}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:o.u8(s.decoder_frame_buffer(t),o.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e,{env:{push_to_stream(t,e){n.get(t).cb(o.u8(e,o.length()).slice())}}});s=i.exports}}},327:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={encode:function(t,e,i,r){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,i,r),n.length())},decode:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.decode(r,t.length,e,i);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},876:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={rasterize:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.rasterize(r,t.length,e,i);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},76:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const i=s.decode(e,t.length);if(0===i)throw new Error("tiff: failed to decode");const r={width:s.decode_width(i),height:s.decode_height(i),buffer:n.u8(s.decode_buffer(i),n.length()).slice()};return s.decode_free(i),r},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},423:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={compress:function(t,e=3){const i=n.alloc(t.length);return n.u8(i,t.length).set(t),n.copy_and_free(s.compress(i,t.length,e),n.length())},decompress:function(t,e=0){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const r=s.decompress(i,t.length,e);if(0===r)throw new Error("zlib: failed to decompress");return n.copy_and_free(r,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}}},e={},function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{}};return t[r](s,s.exports,i),s.exports}(655);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index ba1d314..39f87e4 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","framebuffer","pixelType","format","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","Font","layout","Layout","reset","wrap_style","max_width","append","free","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","decoder","Decoder","frameData","delay","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","wasm","registry","mem","walloc","ptr","wfree","memory","cur_len","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","options","stringify","layout_reset","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","instantiate","streams","Map","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32((~~y - 1) * this.width + (~~x - 1), false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new this(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new this(framebuffer.width, framebuffer.height);\n \n image.bitmap.set(framebuffer.buffer);\n \n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layout = new fontlib.Layout();\n\n layout.reset({\n wrap_style: wrapStyle ? 'word' : 'letter',\n max_width: Infinity === wrapWidth ? null : wrapWidth,\n });\n\n layout.append(font, text, scale);\n const framebuffer = layout.rasterize(r, g, b);\n const image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n font.free();\n layout.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded GIF\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if ((view.getUint32(0, false) >>> 8) === 0x474946) { // GIF\n const decoder = new giflib.Decoder(data);\n const frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, scale) {\n text = encode_utf8(text);\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, null != scale ? scale : font.scale);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n \n wasm = instance.exports;\n },\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(delay, width, height, buffer, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, width, height, delay, quality);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n\n this.free();\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n }\n }\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n\tstatic alloc(size) { return wasm.walloc(size); }\n\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\tstatic length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n\tstatic copy_and_free(ptr, size) {\n\t\tlet slice = mem.u8(ptr, size).slice();\n\t\treturn (wasm.wfree(ptr, size), slice);\n\t}\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = await WebAssembly.instantiate(module);\n\n\t\twasm = instance.exports;\n\t}\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n static length() { return new Uint32Array(wasm.memory.buffer, wasm.cur_len.value, 1)[0]; }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","framebuffer","pixelType","format","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","Font","layout","Layout","reset","wrap_style","max_width","append","free","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","decoder","Decoder","frameData","delay","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","wasm","registry","mem","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","options","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","instantiate","streams","Map","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__"],"mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,IAEzBD,EAAkB,YAAIC,IARxB,CASGK,MAAM,WACT,O,iBCVA,MAAMC,EAAM,EAAQ,KACdC,EAAU,EAAQ,KAClBC,EAAS,EAAQ,KACjBC,EAAU,EAAQ,KAClBC,EAAU,EAAQ,IAClBC,EAAS,EAAQ,KAKvB,MAAMC,EAOF,YAAYC,EAAOC,GAIf,GAFAA,IAAWA,GADXD,IAAUA,GAGE,EACR,MAAM,IAAIE,WAAW,yCACzB,GAAID,EAAS,EACT,MAAM,IAAIC,WAAW,yCAGzBC,KAAKC,UAAYJ,EAEjBG,KAAKE,WAAaJ,EAElBE,KAAKG,WAAa,IAAIC,YAAYP,EAAQC,EAAS,GAEnDE,KAAKK,SAAW,IAAIC,SAASN,KAAKG,YAElCH,KAAKO,QAAU,IAAIC,YAAYR,KAAKG,YAKpCH,KAAKS,OAAS,IAAIC,kBAAkBV,KAAKG,YAO7C,WACI,MAAO,SAASH,KAAKH,SAASG,KAAKF,UAIvC,WAAWD,EAAOC,GACd,OAAO,IAAIE,KAAKH,EAAOC,GAO3B,YACI,OAAOE,KAAKC,UAOhB,aACI,OAAOD,KAAKE,WAQhB,EAAGS,OAAOC,YACN,IAAK,IAAIC,EAAI,EAAGA,GAAKb,KAAKF,OAAQe,IAC9B,IAAK,IAAIC,EAAI,EAAGA,GAAKd,KAAKH,MAAOiB,SACvB,CAACA,EAAGD,GAUtB,qBACI,IAAIE,EAAS,EACb,IAAK,IAAIF,EAAI,EAAGA,GAAKb,KAAKF,OAAQe,IAC9B,IAAK,IAAIC,EAAI,EAAGA,GAAKd,KAAKH,MAAOiB,SACvB,CAACA,EAAGD,EAAGb,KAAKK,SAASW,UAAUD,GAAQ,IAC7CA,GAAU,EAatB,mBAAmBE,EAAGC,EAAGC,EAAGC,GACxB,QAAc,IAAJH,IAAa,IAAY,IAAJC,IAAa,IAAY,IAAJC,IAAa,EAAU,IAAJC,KAAe,EAU1F,kBAAkBH,EAAGC,EAAGC,GACpB,OAAOvB,EAAMyB,YAAYJ,EAAGC,EAAGC,EAAG,KAWtC,mBAAmBG,EAAGC,EAAGC,EAAGJ,GAMxB,IAAIH,EAAGC,EAAGC,EAEV,GAPAG,GAAK,EACLC,EAAIE,KAAKC,IAAI,EAAGD,KAAKE,IAAI,EAAGJ,IAC5BC,EAAIC,KAAKC,IAAI,EAAGD,KAAKE,IAAI,EAAGH,IAC5BJ,EAAIK,KAAKC,IAAI,EAAGD,KAAKE,IAAI,EAAGP,IAIlB,IAANG,EACAN,EAAIC,EAAIC,EAAIK,MACT,CACH,MAAMI,EAAU,CAACC,EAAGC,EAAGC,KACfA,EAAI,IAAGA,GAAK,GACZA,EAAI,IAAGA,GAAK,GACZA,EAAI,EAAI,EAAUF,EAAc,GAATC,EAAID,GAASE,EACpCA,EAAI,GAAcD,EAClBC,EAAI,EAAI,EAAUF,GAAKC,EAAID,IAAM,EAAI,EAAIE,GAAK,EAC3CF,GAGLC,EAAIN,EAAI,GAAMA,GAAK,EAAID,GAAKC,EAAID,EAAIC,EAAID,EACxCM,EAAI,EAAIL,EAAIM,EAElBb,EAAIW,EAAQC,EAAGC,EAAGR,EAAI,EAAI,GAC1BJ,EAAIU,EAAQC,EAAGC,EAAGR,GAClBH,EAAIS,EAAQC,EAAGC,EAAGR,EAAI,EAAI,GAG9B,OAAO1B,EAAMyB,YAAgB,IAAJJ,EAAa,IAAJC,EAAa,IAAJC,EAAa,IAAJC,GAUxD,kBAAkBE,EAAGC,EAAGC,GACpB,OAAO5B,EAAMoC,YAAYV,EAAGC,EAAGC,EAAG,GAWtC,kBAAkBP,EAAGC,EAAGC,EAAGC,GACvBH,GAAK,IACLC,GAAK,IACLC,GAAK,IAEL,MAAMQ,EAAMF,KAAKE,IAAIV,EAAGC,EAAGC,GAAIO,EAAMD,KAAKC,IAAIT,EAAGC,EAAGC,GACpD,IAAIG,EAAGC,EAAGC,GAAKG,EAAMD,GAAO,EAE5B,GAAIC,IAAQD,EACRJ,EAAIC,EAAI,MACL,CACH,MAAMU,EAAIN,EAAMD,EAEhB,OADAH,EAAIC,EAAI,GAAMS,GAAK,EAAIN,EAAMD,GAAOO,GAAKN,EAAMD,GACvCC,GACJ,KAAKV,EACDK,GAAKJ,EAAIC,GAAKc,GAAKf,EAAIC,EAAI,EAAI,GAC/B,MACJ,KAAKD,EACDI,GAAKH,EAAIF,GAAKgB,EAAI,EAClB,MACJ,KAAKd,EACDG,GAAKL,EAAIC,GAAKe,EAAI,EAI1BX,GAAK,EAGT,MAAO,CAACA,EAAGC,EAAGC,EAAGJ,EAAI,KAQzB,mBAAmBc,GACf,MAAO,CAAEA,GAAS,GAAM,IAAOA,GAAS,GAAM,IAAOA,GAAS,EAAK,IAAc,IAARA,GAQ7E,kBAAkBA,GACd,OAAOtC,EAAMuC,YAAYD,GAAOE,MAAM,EAAG,GAS7C,WAAWtB,EAAGD,GAEV,OADAb,KAAKqC,qBAAqBvB,EAAGD,GACtBb,KAAKK,SAASW,aAAaH,EAAI,GAAKb,KAAKH,SAAWiB,EAAI,IAAI,GASvE,UAAUA,EAAGD,GACTb,KAAKqC,qBAAqBvB,EAAGD,GAC7B,MAAMyB,EAA6C,MAAnCzB,EAAI,GAAKb,KAAKH,SAAWiB,EAAI,IAC7C,OAAOd,KAAKS,OAAO8B,SAASD,EAAKA,EAAM,GAS3C,WAAWxB,EAAGD,EAAG2B,GAKb,OAJA1B,IAAMA,EACND,IAAMA,EACNb,KAAKqC,qBAAqBvB,EAAGD,GAC7Bb,KAAKyC,cAAc3B,EAAGD,EAAG2B,GAClBxC,KASX,cAAcc,EAAGD,EAAG2B,GAChBxC,KAAKK,SAASqC,UAA6C,IAAjC7B,EAAI,GAAKb,KAAKH,OAASiB,EAAI,IAAS0B,GAAY,GAQ9E,qBAAqB1B,EAAGD,GACpB,GAAI8B,MAAM7B,GAAI,MAAM,IAAI8B,UAAU,gCAAgC9B,MAClE,GAAI6B,MAAM9B,GAAI,MAAM,IAAI+B,UAAU,gCAAgC/B,MAClE,GAAIC,EAAI,EACJ,MAAM,IAAIf,WAAW,GAAGH,EAAMiD,wBAAwB/B,QAC1D,GAAIA,EAAId,KAAKH,MACT,MAAM,IAAIE,WAAW,GAAGH,EAAMiD,wBAAwB/B,aAAad,KAAKH,UAC5E,GAAIgB,EAAI,EACJ,MAAM,IAAId,WAAW,GAAGH,EAAMiD,wBAAwBhC,QAC1D,GAAIA,EAAIb,KAAKF,OACT,MAAM,IAAIC,WAAW,GAAGH,EAAMiD,wBAAwBhC,cAAcb,KAAKF,WAMjF,+BACI,MAAO,8DAeX,KAAKoC,GAED,GAAa,mBADOA,EAEhBlC,KAAKK,SAASqC,UAAU,EAAGR,GAAO,GAClClC,KAAKO,QAAQuC,KAAK9C,KAAKO,QAAQ,QAC5B,CACH,IAAIQ,EAAS,EACb,IAAK,IAAIF,EAAI,EAAGA,GAAKb,KAAKF,OAAQe,IAC9B,IAAK,IAAIC,EAAI,EAAGA,GAAKd,KAAKH,MAAOiB,IAC7Bd,KAAKK,SAASqC,UAAU3B,EAAQmB,EAAMpB,EAAGD,IAAI,GAC7CE,GAAU,EAKtB,OAAOf,KAOX,QACI,MAAM+C,EAAQnD,EAAMoD,IAAIhD,KAAKH,MAAOG,KAAKF,QAEzC,OADAiD,EAAMtC,OAAOwC,IAAIjD,KAAKS,QACfsC,EAOX,qCACI,MAAO,0BAOX,yBACI,OAAQ,EASZ,MAAMG,EAAQC,EAAOvD,EAAMwD,yBACvB,MAAML,EAAQ/C,KAAKqD,UAAUH,EAAQC,GACrC,OAAOnD,KAAKsD,UAAUP,GAG1B,UAAUG,EAAQC,EAAOvD,EAAMwD,yBAC3B,OAAe,IAAXF,EAAqBlD,KAClBA,KAAKuD,WAAWvD,KAAKH,MAAQqD,EAAQlD,KAAKF,OAASoD,EAAQC,GAWtE,OAAOtD,EAAOC,EAAQqD,EAAOvD,EAAMwD,yBAC/B,MAAML,EAAQ/C,KAAKuD,WAAW1D,EAAOC,EAAQqD,GAC7C,OAAOnD,KAAKsD,UAAUP,GAG1B,WAAWlD,EAAOC,EAAQqD,EAAOvD,EAAMwD,yBACnC,GAAIvD,IAAUD,EAAM4D,aAAe1D,IAAWF,EAAM4D,YAAa,MAAM,IAAIC,MAAM,yEAMjF,GALS5D,IAAUD,EAAM4D,YAAa3D,EAAQG,KAAKH,MAAQG,KAAKF,OAASA,EAChEA,IAAWF,EAAM4D,cAAa1D,EAASE,KAAKF,OAASE,KAAKH,MAAQA,GAE3EA,EAAQ4B,KAAKiC,MAAM7D,GACnBC,EAAS2B,KAAKiC,MAAM5D,GAChBD,EAAQ,EACR,MAAM,IAAIE,WAAW,yCACzB,GAAID,EAAS,EACT,MAAM,IAAIC,WAAW,yCAEzB,IAAIgD,EACJ,GAAII,IAASvD,EAAMwD,wBAEd,MAAM,IAAIK,MAAM,uBAErB,OAHIV,EAAQ/C,KAAK2D,4BAA4B9D,EAAOC,GAG7CiD,EAQX,4BAA4BlD,EAAOC,GAC/B,MAAMiD,EAAQ,IAAI/C,KAAK4D,YAAY/D,EAAOC,GAE1C,IAAK,IAAIe,EAAI,EAAGA,EAAIf,EAAQe,IACxB,IAAK,IAAIC,EAAI,EAAGA,EAAIjB,EAAOiB,IAAK,CAC5B,MAAM+C,EAAOpC,KAAKiC,MAAO7C,EAAIb,KAAKF,OAAUA,GACtCgE,EAAOrC,KAAKiC,MAAO5C,EAAId,KAAKH,MAASA,GAErCkE,EAA4B,GAAjBlD,EAAIhB,EAAQiB,GACvBkD,EAAsC,GAA5BH,EAAO7D,KAAKH,MAAQiE,GAEpCf,EAAM1C,SAASqC,UAAUqB,EAAS/D,KAAKK,SAASW,UAAUgD,GAAQ,IAAQ,GAIlF,OAAOjB,EAWX,KAAKjC,EAAGD,EAAGhB,EAAOC,GAId,OAHID,EAAQG,KAAKH,QAAOA,EAAQG,KAAKH,OACjCC,EAASE,KAAKF,SAAQA,EAASE,KAAKF,QAEjCE,KAAKsD,UAAUtD,KAAKiE,SAASnD,EAAGD,EAAGhB,EAAOC,IAWrD,SAASgB,EAAGD,EAAGhB,EAAOC,GAClBgB,IAAMA,EACND,IAAMA,EAEN,MAAMkC,EAAQ,IAAI/C,KAAK4D,YAAY/D,EAAOC,GAE1C,IAAK,IAAIoE,EAAK,EAAGA,EAAKpE,EAAQoE,IAAM,CAChC,MAAM5B,GAAO4B,EAAKrD,GAAKb,KAAKH,MAAQiB,EACpCiC,EAAMxC,QAAQ0C,IAAIjD,KAAKO,QAAQgC,SAASD,EAAKA,EAAMzC,GAAQqE,EAAKrE,GAGpE,OAAOkD,EAYX,QAAQjC,EAAGD,EAAGhB,EAAOC,EAAQoC,GAIzB,GAHApB,GAAK,EACLD,GAAK,EAEgB,mBAAVqB,EAYJ,OAAOlC,KAAKmE,aAAarD,EAAGD,EAAGhB,EAAOC,EAAQoC,GAXjD,IAAK,IAAIgC,EAAK,EAAGA,GAAMpE,EAAQoE,IAC3B,IAAK,IAAIE,EAAK,EAAGA,GAAMvE,EAAOuE,IAAM,CAChC,MAAMC,EAAKD,EAAKtD,EACVwD,EAAKJ,EAAKrD,EAChB,GAAIY,KAAKC,IAAI2C,EAAIC,GAAM,GAAKD,EAAKrE,KAAKH,OAASyE,EAAKtE,KAAKF,OACrD,SAEJ,MAAMyE,EAAKrC,EAAMkC,EAAIF,GACrBlE,KAAKyC,cAAc4B,EAAIC,EAAIC,GAKvC,OAAOvE,KAWX,aAAac,EAAGD,EAAGhB,EAAOC,EAAQoC,GAC1BpB,EAAI,IACJjB,GAASiB,EACTA,EAAI,GAGJD,EAAI,IACJf,GAAUe,EACVA,EAAI,GAGR,MAAM2D,EAAQ/C,KAAKE,IAAIF,KAAKC,IAAIZ,EAAIjB,EAAOG,KAAKH,OAAQ,GACxD,IAAI4E,EAAOD,EACX,KAAO1D,KAAO2D,GACVzE,KAAKK,SAASqC,UAAU,GAAK+B,EAAO5D,EAAIb,KAAKH,OAAQqC,GACzD,MAAMwC,EAAM,GAAKF,EAAQ3D,EAAIb,KAAKH,OAC5B8E,EAAQ,GAAK7D,EAAID,EAAIb,KAAKH,OAEhC,IAAI+E,EAASnD,KAAKE,IAAIF,KAAKC,IAAIb,EAAIf,EAAQE,KAAKF,QAAS,GACzD,KAAOe,IAAM+D,GACT5E,KAAKS,OAAOoE,WAAW,GAAK/D,EAAI8D,EAAS5E,KAAKH,OAAQ8E,EAAOD,GAEjE,OAAO1E,KAWX,WAAWc,EAAGD,EAAGiE,EAAQ5C,GACrB,MAAM6C,EAAaD,GAAU,EAC7B,IAAK,IAAIE,EAAWvD,KAAKE,IAAI,EAAGd,EAAIiE,GAASE,GAAYvD,KAAKC,IAAIb,EAAIiE,EAAQ9E,KAAKF,QAASkF,IACxF,IAAK,IAAIC,EAAWxD,KAAKE,IAAI,EAAGb,EAAIgE,GAASG,GAAYxD,KAAKC,IAAIZ,EAAIgE,EAAQ9E,KAAKH,OAAQoF,KAClFA,EAAWnE,IAAM,GAAKkE,EAAWnE,IAAM,EAAIkE,GAC5C/E,KAAKyC,cAAcwC,EAAUD,EAA2B,mBAAV9C,EAAuBA,EAAM+C,EAAWnE,EAAIgE,EAAQE,EAAWnE,EAAIiE,GAAU5C,GAIvI,OAAOlC,KASX,WAAW2B,GAAM,EAAOuD,EAAa,GACjC,MACMH,GADMtD,KAAKE,EAAM,MAAQ,OAAO3B,KAAKH,MAAOG,KAAKF,QAAU,IACvC,EACpBqF,EAAUnF,KAAKH,MAAQ,EACvBuF,EAAUpF,KAAKF,OAAS,EAE9B,IAAK,MAAOgB,EAAGD,KAAMb,KAAM,CACvB,MAAMqF,GAAsBvE,EAAIqE,IAAY,GAAKtE,EAAIuE,IAAY,EAC3DE,EAA8C,IAAjCzE,EAAI,GAAKb,KAAKH,OAASiB,EAAI,IAAU,EACpDuE,EAAqBN,EACrB/E,KAAKS,OAAO6E,GAAY,EACnBJ,IACLlF,KAAKS,OAAO6E,IAAa7D,KAAKE,IAAI,EAAGF,KAAKC,IAAI,EAAG,EAAK2D,EAAqBN,EAAcG,GAAc,MAG/G,OAAOlF,KASX,QAAQuF,EAASC,GAAW,GACxB,GAAI7C,MAAM4C,IAAYA,EAAU,EAC5B,MAAM,IAAIxF,WAAW,yBAIzB,OAFAC,KAAKyF,sBAAsBF,EAASC,EAAU,GAEvCxF,KASX,IAAI0F,EAAYF,GAAW,GACvB,GAAI7C,MAAM+C,IAAeA,EAAa,EAClC,MAAM,IAAI3F,WAAW,4BAIzB,OAFAC,KAAKyF,sBAAsBC,EAAYF,EAAU,GAE1CxF,KASX,MAAM0F,EAAYF,GAAW,GACzB,GAAI7C,MAAM+C,IAAeA,EAAa,EAClC,MAAM,IAAI3F,WAAW,4BAIzB,OAFAC,KAAKyF,sBAAsBC,EAAYF,EAAU,GAE1CxF,KASX,KAAK0F,EAAYF,GAAW,GACxB,GAAI7C,MAAM+C,IAAeA,EAAa,EAClC,MAAM,IAAI3F,WAAW,4BAIzB,OAFAC,KAAKyF,sBAAsBC,EAAYF,EAAU,GAE1CxF,KASX,sBAAsB2F,EAAOH,EAAUzE,GACnC,IAAK,IAAI6E,EAAI7E,EAAQ6E,EAAI5F,KAAKS,OAAOoF,OAAQD,GAAK,EAC9C5F,KAAKS,OAAOmF,GAAKD,GAASH,EAAW,IAAMxF,KAAKS,OAAOmF,IAS/D,UAAUD,EAAOH,GAAW,GACxB,GAAI7C,MAAMgD,IAAUA,EAAQ,EACxB,MAAM,IAAI5F,WAAW,2BAEzB,OAAOC,KAAK8C,MAAK,CAAChC,EAAGD,KACjB,MAAOS,EAAGC,EAAGC,EAAGJ,GAAKxB,EAAMkG,cAAc9F,KAAK+F,UAAUjF,EAAGD,IAC3D,OAAOjB,EAAMoC,YAAYV,EAAGC,EAAGoE,GAASH,EAAW,EAAIhE,GAAIJ,MAUnE,WAAWuE,EAAOH,GAAW,GACzB,GAAI7C,MAAMgD,IAAUA,EAAQ,EACxB,MAAM,IAAI5F,WAAW,4BAEzB,OAAOC,KAAK8C,MAAK,CAAChC,EAAGD,KACjB,MAAOS,EAAGC,EAAGC,EAAGJ,GAAKxB,EAAMkG,cAAc9F,KAAK+F,UAAUjF,EAAGD,IAC3D,OAAOjB,EAAMoC,YAAYV,EAAGqE,GAASH,EAAW,EAAIjE,GAAIC,EAAGJ,MAWnE,UAAU4E,EAAQlF,EAAI,EAAGD,EAAI,GACzBC,IAAMA,EACND,IAAMA,EAEN,IAAK,IAAIoF,EAAK,EAAGA,EAAKD,EAAOlG,OAAQmG,IAAM,CACvC,IAAIC,EAAWrF,EAAIoF,EACnB,KAAIC,EAAW,GAAf,CACA,GAAIA,GAAYlG,KAAKF,OAAQ,MAE7B,IAAK,IAAIqG,EAAK,EAAGA,EAAKH,EAAOnG,MAAOsG,IAAM,CACtC,IAAIC,EAAWtF,EAAIqF,EACnB,GAAIC,EAAW,EAAG,SAClB,GAAIA,GAAYpG,KAAKH,MAAO,MAE5B,MAAMkB,EAAS,GAAKqF,EAAWF,EAAWlG,KAAKH,OACzCwG,EAAKL,EAAO3F,SAASW,UAAU,GAAKmF,EAAKF,EAAKD,EAAOnG,QAAQ,GAC7DyG,EAAKtG,KAAKK,SAASW,UAAUD,GAAQ,GAEvB,MAAV,IAALsF,GAAqBrG,KAAKK,SAASqC,UAAU3B,EAAQsF,GAAI,GACrC,IAAV,IAALA,GAAqBrG,KAAKK,SAASqC,UAAU3B,EAAQuF,GAAI,GAC9DtG,KAAKK,SAASqC,UAAU3B,EAAQnB,EAAM2G,gBAAgBF,EAAIC,IAAK,KAI5E,OAAOtG,KASX,uBAAuBqG,EAAIC,GACvB,MAAME,EAAU,IAALH,EACLI,EAAQD,EAAK,EACbE,EAAY,IAAMF,EAIxB,OAAc,IAHHC,GAASJ,IAAO,IAAMK,GAAaJ,IAAO,KAAQ,IAGtC,IAAY,IADxBG,GAASJ,GAAM,GAAK,KAAQK,GAAaJ,GAAM,GAAK,MAAU,IAC7B,IAAY,IAF7CG,GAASJ,GAAM,EAAI,KAAQK,GAAaJ,GAAM,EAAI,MAAU,IAEN,EAAgC,IAA1B7E,KAAKE,IAAI6E,EAAS,IAALF,GAOxF,SACI,IAAK,MAAOxF,EAAGD,EAAGqB,KAAUlC,KAAK2G,oBAC7B3G,KAAKyC,cAAc3B,EAAGD,EAAK,WAAaqB,EAAS,WAAuB,IAARA,GAEpE,OAAOlC,KAOX,cACI,IAAK,MAAOc,EAAGD,EAAGqB,KAAUlC,KAAK2G,oBAAqB,CAClD,MAAOrF,EAAGC,EAAGC,EAAGJ,GAAKxB,EAAMkG,cAAclG,EAAMuC,YAAYD,IAC3DlC,KAAKyC,cAAc3B,EAAGD,EAAGjB,EAAMoC,YAAYV,EAAGC,EAAG,EAAIC,EAAGJ,IAG5D,OAAOpB,KAOX,mBACI,IAAK,MAAOc,EAAGD,EAAGqB,KAAUlC,KAAK2G,oBAAqB,CAClD,MAAOrF,EAAGC,EAAGC,EAAGJ,GAAKxB,EAAMkG,cAAclG,EAAMuC,YAAYD,IAC3DlC,KAAKyC,cAAc3B,EAAGD,EAAGjB,EAAMoC,YAAYV,EAAG,EAAIC,EAAGC,EAAGJ,IAG5D,OAAOpB,KAOX,YACI,IAAK,MAAOc,EAAGD,EAAGqB,KAAUlC,KAAK2G,oBAAqB,CAClD,MAAOrF,EAAGC,EAAGC,EAAGJ,GAAKxB,EAAMkG,cAAclG,EAAMuC,YAAYD,IAC3DlC,KAAKyC,cAAc3B,EAAGD,EAAGjB,EAAMoC,YAAY,EAAIV,EAAGC,EAAGC,EAAGJ,IAG5D,OAAOpB,KAOX,SAAS4G,GACL,IAAK,MAAO9F,EAAGD,EAAGqB,KAAUlC,KAAK2G,oBAAqB,CAClD,MAAOrF,EAAGC,EAAGC,EAAGJ,GAAKxB,EAAMkG,cAAclG,EAAMuC,YAAYD,IAC3DlC,KAAKyC,cAAc3B,EAAGD,EAAGjB,EAAMoC,YAAYV,EAAIsF,EAAU,IAAKrF,EAAGC,EAAGJ,IAGxE,OAAOpB,KAOX,eACI,IAAI6G,EAAW,CAAC,EAAG,EAAG,GAClBC,EAAU,EACd,IAAK,IAAIxE,EAAM,EAAGA,EAAMtC,KAAKS,OAAOoF,OAAQvD,GAAO,EAAG,CAClD,MAAMyE,EAAO/G,KAAKS,OAAO8B,SAASD,EAAKA,EAAM,GAC7C,IAAK,IAAIsD,EAAI,EAAGA,EAAI,EAAGA,IACnBiB,EAASjB,IAAMmB,EAAKnB,GACxBkB,GAAWC,EAAK,GAAK,IAGzB,OAAOnH,EAAMyB,eAAewF,EAASG,KAAIC,GAAKA,EAAIH,IAAU,KAUhE,cAAcI,GAAc,EAAMC,GAAc,EAAMC,EAAc,IAChE,MAAMC,EAAc,IAAIC,MAAM,QAC9B,IAAK,IAAI1B,EAAI,EAAGA,EAAI5F,KAAKS,OAAOoF,OAAQD,GAAK,EAAG,CAC5C,MAAM1D,EAAQlC,KAAKK,SAASW,UAAU4E,GAAG,IAClCtE,EAAGC,EAAGC,GAAK5B,EAAMkG,cAAclG,EAAMuC,YAAYD,IAAQ8E,KAAIC,MAAa,GAAJA,KAC7E,GAAIC,GAAe1F,EAAI4F,EAAa,SACpC,GAAID,GAAe3F,EAAI,GAAO4F,EAAa,SAC3C,MAAMG,EAAMjG,GAAK,GAAKC,GAAK,EAAIC,EAC/B6F,EAAYE,IAAQF,EAAYE,IAAQ,GAAK,EAGjD,IAAIC,GAAiB,EACjBC,EAAqB,EAOzB,GANAJ,EAAYK,SAAQ,CAACC,EAAI/B,KACjB+B,EAAKH,IACTA,EAAgBG,EAChBF,EAAqB7B,OAGG,IAAxB6B,EACA,OAAOzH,KAAK4H,cAAcV,EAAaC,EAAaC,EAAc,GAEtE,MAAM9F,EAAKmG,IAAuB,GAAM,GAClClG,EAAKkG,IAAuB,EAAK,GACjCjG,EAAyB,GAArBiG,EAEV,OAAO7H,EAAMoC,YAAYV,EAAI,GAAMC,EAAI,GAAMC,EAAI,GAAM,GAQ3D,OAAOqG,EAAOC,GAAS,GACnB,GAAID,EAAQ,KAAQ,EAAG,OAAO7H,KAC9B,GAAI6H,EAAQ,KAAQ,EAAG,OAAO7H,KAAK+H,iBAEnC,MAAMC,EAAMvG,KAAKwG,IAAMJ,EAAQ,KAEzBK,EAAMzG,KAAKyG,IAAIF,GACfG,EAAM1G,KAAK0G,IAAIH,GAEfnI,EAAQiI,EACRrG,KAAK2G,IAAIpI,KAAKH,MAAQqI,GAAOzG,KAAK2G,IAAIpI,KAAKF,OAASqI,GACpDnI,KAAKH,MACLC,EAASgI,EACTrG,KAAK2G,IAAIpI,KAAKH,MAAQsI,GAAO1G,KAAK2G,IAAIpI,KAAKF,OAASoI,GACpDlI,KAAKF,OAELuI,EAAMzI,EAAMoD,IAAInD,EAAOC,GAEvBwI,EAASzI,EAAQ,EAAI,GACrB0I,EAASzI,EAAS,EAAI,GACtB0I,EAASxI,KAAKH,MAAQ,EAAI,GAC1B4I,EAASzI,KAAKF,OAAS,EAAI,GAEjC,IAAIwB,EAAI,EACR,EAAG,CACC,IAAIoH,EAAI,EACR,MAAMC,EAAOH,EAASN,GAAO5G,EAAIiH,GAC3BK,EAAOH,EAASN,GAAO7G,EAAIiH,GAEjC,EAAG,CACC,MAAMM,EAAKF,EAAOR,GAAOO,EAAIJ,GACvBQ,EAAKF,EAAOV,GAAOQ,EAAIJ,GAC7B1I,EAAMmJ,gBAAgB/I,KAAMqI,EAAKK,EAAGpH,EAAGuH,EAAIC,SACtCJ,IAAM7I,SACVyB,IAAMxB,GAEf,OAAOE,KAAKsD,UAAU+E,GAO1B,iBACI,IAAItH,EAAS,EAEb,IADAf,KAAKS,OAAOuI,UACLjI,EAASf,KAAKS,OAAOoF,QAAQ7F,KAAKS,OAAO8B,SAASxB,EAAQA,GAAU,GAAGiI,UAE9E,OAAOhJ,KAYX,uBAAuBiJ,EAAKZ,EAAKa,EAAIC,EAAIC,EAAIC,GACzC,MAAMC,IAAOF,EACPG,IAAOF,EACPG,EAAKJ,EAAKE,EACVG,EAAKJ,EAAKE,EACVG,EAAYrB,EAAI5H,OAAO8B,SAAS,GAAK2G,EAAKC,EAAKd,EAAIxI,QAAS,GAE5D8J,EAAM,CACR1I,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,GAGPxB,EAAMgK,SAASN,EAAIC,GAAK,EAAIC,IAAO,EAAIC,GAAKE,EAAKV,GACjDrJ,EAAMgK,SAAS,EAAIN,EAAIC,EAAIC,GAAM,EAAIC,GAAKE,EAAKV,GAC/CrJ,EAAMgK,SAASN,EAAI,EAAIC,GAAK,EAAIC,GAAMC,EAAIE,EAAKV,GAC/CrJ,EAAMgK,SAAS,EAAIN,EAAI,EAAIC,EAAIC,EAAKC,EAAIE,EAAKV,GAE7CS,EAAU,GAAKC,EAAIvI,EACnBsI,EAAU,GAAKC,EAAI1I,EAAI0I,EAAIvI,EAC3BsI,EAAU,GAAKC,EAAIzI,EAAIyI,EAAIvI,EAC3BsI,EAAU,GAAKC,EAAIxI,EAAIwI,EAAIvI,EAI/B,gBAAgByI,EAAQC,EAAQC,EAAQJ,EAAKV,GACzC,GACIY,EAAS,GACNC,EAAS,GACTD,EAASZ,EAAIpJ,OACbiK,EAASb,EAAInJ,OAClB,CACE,MAAMiB,EAAS,GAAK8I,EAASC,EAASb,EAAIpJ,OACpCmK,EAAYf,EAAIxI,OAAO8B,SAASxB,EAAQA,EAAS,GAEjDkJ,EAAKF,EAASC,EAAU,GAE9BL,EAAIvI,GAAK6I,EACTN,EAAI1I,GAAKgJ,EAAKD,EAAU,GACxBL,EAAIzI,GAAK+I,EAAKD,EAAU,GACxBL,EAAIxI,GAAK8I,EAAKD,EAAU,IAShC,UAAUjH,GAON,OANA/C,KAAKC,UAAY8C,EAAM9C,UACvBD,KAAKE,WAAa6C,EAAM7C,WACxBF,KAAKK,SAAW0C,EAAM1C,SACtBL,KAAKO,QAAUwC,EAAMxC,QACrBP,KAAKS,OAASsC,EAAMtC,OAEbT,KAQX,gBAAgBkK,GACZ,MAAMC,EAAUC,OAAOD,QAAQD,GAAQG,MAAK,CAACjJ,EAAGD,IAAMC,EAAE,GAAKD,EAAE,KACzDmJ,EAAYH,EAAQnD,KAAIuD,GAAKC,WAAWD,EAAE,MAC1CE,EAASN,EAAQnD,KAAIuD,GAAKA,EAAE,KAElC,GAAyB,IAArBD,EAAUzE,OAAc,MAAM,IAAI9F,WAAW,gCAC5C,GAAyB,IAArBuK,EAAUzE,OACf,MAAO,IAAM4E,EAAO,GACjB,GAAyB,IAArBH,EAAUzE,OAAc,CAC/B,MAAM6E,EAAW1K,KAAK2K,aAAaF,EAAO,GAAIA,EAAO,IACrD,OAAOG,GACCA,GAAYN,EAAU,GAAWG,EAAO,GACxCG,GAAYN,EAAU,GAAWG,EAAO,GACrCC,GAAUE,EAAWN,EAAU,KAAOA,EAAU,GAAKA,EAAU,KAI9E,MAAMO,EAASpJ,KAAKC,OAAO4I,GACrBQ,EAASrJ,KAAKE,OAAO2I,GAC3B,IAAIS,EAAY,GAEhB,IAAK,IAAInF,EAAI,EAAGA,EAAI0E,EAAUzE,OAAQD,IAAK,CACvC,IAAIoF,EAASV,EAAU1E,EAAI,GAC3B,QAAeqF,IAAXD,EAAsB,SAE1B,IAAIE,EAASZ,EAAU1E,GAEnBuF,EAASV,EAAO7E,EAAI,QACTqF,IAAXE,IAAsBA,EAASV,EAAO7E,IAE1C,MAAMwF,EAASX,EAAO7E,GAChB8E,EAAW1K,KAAK2K,aAAaQ,EAAQC,GAE3CL,EAAUM,KAAK,CAAC3J,IAAKsJ,EAAQrJ,IAAKuJ,EAAQR,aAG9C,OAAOE,IACH,GAAIA,GAAYC,EAAQ,OAAOE,EAAU,GAAGL,SAAS,GACrD,GAAIE,GAAYE,EAAQ,OAAOC,EAAUA,EAAUlF,OAAS,GAAG6E,SAAS,GAExE,IAAK,MAAMA,KAAYK,EACnB,GAAIH,GAAYF,EAAShJ,KAAOkJ,GAAYF,EAAS/I,IACjD,OAAO+I,EAASA,UAAUE,EAAWF,EAAShJ,MAAQgJ,EAAS/I,IAAM+I,EAAShJ,MACtF,MAAM,IAAI3B,WAAW,8BAA8B6K,MAS3D,aAAa9F,EAASrD,KAAKC,IAAI1B,KAAKH,MAAOG,KAAKF,QAAU,GACtD,MAAMiF,EAAaD,GAAU,EAC7B,IAAK,IAAIhE,EAAI,EAAGA,GAAKgE,EAAQhE,IAAK,CAC9B,MAAMwK,GAAQxK,EAAIgE,IAAW,EAC7B,IAAK,IAAIjE,EAAI,EAAGA,GAAKiE,EAAQjE,IACrByK,GAAQzK,EAAIiE,IAAW,EAAIC,IAC3B/E,KAAKS,OAAwC,IAA/BI,EAAI,GAAKb,KAAKH,MAAQiB,EAAI,GAAS,GAAK,GAIlE,IAAK,IAAIA,EAAI,EAAGA,GAAKgE,EAAQhE,IAAK,CAC9B,MAAMwK,GAAQxK,EAAIgE,IAAW,EAC7B,IAAK,IAAIjE,EAAIb,KAAKF,OAASgF,EAAQjE,GAAKb,KAAKF,OAAQe,IAC7CyK,GAAStL,KAAKF,OAASe,EAAKiE,IAAW,EAAIC,IAC3C/E,KAAKS,OAAwC,IAA/BI,EAAI,GAAKb,KAAKH,MAAQiB,EAAI,GAAS,GAAK,GAIlE,IAAK,IAAIA,EAAId,KAAKH,MAAQiF,EAAQhE,GAAKd,KAAKH,MAAOiB,IAAK,CACpD,MAAMwK,GAAStL,KAAKH,MAAQiB,EAAKgE,IAAW,EAC5C,IAAK,IAAIjE,EAAI,EAAGA,GAAKiE,EAAQjE,IACrByK,GAAQzK,EAAIiE,IAAW,EAAIC,IAC3B/E,KAAKS,OAAwC,IAA/BI,EAAI,GAAKb,KAAKH,MAAQiB,EAAI,GAAS,GAAK,GAIlE,IAAK,IAAIA,EAAId,KAAKH,MAAQiF,EAAQhE,GAAKd,KAAKH,MAAOiB,IAAK,CACpD,MAAMwK,GAAStL,KAAKH,MAAQiB,EAAKgE,IAAW,EAC5C,IAAK,IAAIjE,EAAIb,KAAKF,OAASgF,EAAQjE,GAAKb,KAAKF,OAAQe,IAC7CyK,GAAStL,KAAKF,OAASe,EAAKiE,IAAW,EAAIC,IAC3C/E,KAAKS,OAAwC,IAA/BI,EAAI,GAAKb,KAAKH,MAAQiB,EAAI,GAAS,GAAK,GAIlE,OAAOd,KAMX,oBAAoBuL,EAAYC,GAC5B,MAAMC,EAAKF,IAAe,GACpBG,EAAKH,GAAc,GAAK,IACxBI,EAAKJ,GAAc,EAAI,IACvBK,EAAkB,IAAbL,EACLM,GAAML,IAAa,IAAMC,EACzBK,GAAMN,GAAY,GAAK,KAAQE,EAC/BK,GAAMP,GAAY,EAAI,KAAQG,EAC9BK,GAAiB,IAAXR,GAAmBI,EAE/B,OAAOhB,IAKW,IAJJa,EAAKb,EAAWiB,IAIH,IAAY,IAHzBH,EAAKd,EAAWkB,IAGkB,IAAY,IAF9CH,EAAKf,EAAWmB,IAEuC,EAAU,IADjEH,EAAKhB,EAAWoB,EAUlC,aAAaC,EAAc,GACvB,aAAa3M,EAAI4M,OAAOlM,KAAKS,OAAQ,CAACZ,MAAOG,KAAKH,MAAOC,OAAQE,KAAKF,OAAQqM,MAAOF,EAAaG,SAAU,IAQhH,iBAAiBC,EAAU,IAEvB,aADM5M,EAAQ6M,OACP7M,EAAQyM,OAAOlM,KAAKS,OAAQT,KAAKH,MAAOG,KAAKF,OAAQ2B,KAAKE,IAAI,EAAGF,KAAKC,IAAI,IAAK2K,KAQ1F,oBAAoBE,GAChB,IAAIxJ,EAEAyJ,EASJ,GARKpM,YAAYqM,OAAOF,IAIpBA,EAAO,IAAIG,WAAWH,EAAKI,OAAQJ,EAAKK,WAAYL,EAAKM,YACzDL,EAAO,IAAIlM,SAASiM,EAAKI,OAAQJ,EAAKK,WAAYL,EAAKM,cAJvDN,EAAO,IAAIG,WAAWH,GACtBC,EAAO,IAAIlM,SAASiM,EAAKI,SAMI,aAA7BH,EAAKxL,UAAU,GAAG,GAAuB,CACzC,MAAM,MAACnB,EAAK,OAAEC,EAAM,OAAEgN,SAAgBxN,EAAIyN,OAAOR,GACjDxJ,EAAQ,IAAI/C,KAAKH,EAAOC,GACxBiD,EAAMtC,OAAOwC,IAAI6J,QACd,GAAKN,EAAKxL,UAAU,GAAG,KAAW,GAAO,SAAU,OAChDvB,EAAQ6M,OACd,MAAMU,EAAcvN,EAAQsN,OAAOR,GAE7B1M,EAAQmN,EAAYnN,MACpBC,EAASkN,EAAYlN,OACrBmN,EAAYD,EAAYE,OAE9BnK,EAAQ,IAAI/C,KAAKH,EAAOC,GACxB,MAAM6M,EAASK,EAAYL,OAE3B,GAAkB,IAAdM,EAAiB,CACjB,MAAMT,EAAO,IAAIlM,SAASyC,EAAMtC,OAAOkM,QAEvC,IAAK,IAAI/G,EAAI,EAAGA,EAAI+G,EAAO9G,OAAQD,IAAK,CACpC,MAAMuH,EAAQR,EAAO/G,GACrB4G,EAAK9J,UAAc,EAAJkD,EAAOuH,GAAS,GAAKA,GAAS,GAAKA,GAAS,EAAI,KAAM,SAEtE,GAAkB,IAAdF,EAAiB,CACxBlK,EAAMtC,OAAOqC,KAAK,KAClB,IAAK,IAAI8C,EAAI,EAAGA,EAAI/F,EAAQC,EAAQ8F,IAChC7C,EAAMtC,OAAOwC,IAAI0J,EAAOpK,SAAa,EAAJqD,EAAW,EAAJA,EAAQ,GAAQ,EAAJA,QACrD,GAAkB,IAAdqH,EACP,IAAK,IAAIrH,EAAI,EAAGA,EAAI+G,EAAO9G,OAAQD,GAAK,EACpC7C,EAAMtC,OAAOmF,GAAK,KAAQ,EAAI+G,EAAO/G,GAAK,MAAS,EAAI+G,EAAO/G,EAAI,GAAK,KACvE7C,EAAMtC,OAAOmF,EAAI,GAAK,KAAQ,EAAI+G,EAAO/G,EAAI,GAAK,MAAS,EAAI+G,EAAO/G,EAAI,GAAK,KAC/E7C,EAAMtC,OAAOmF,EAAI,GAAK,KAAQ,EAAI+G,EAAO/G,EAAI,GAAK,MAAS,EAAI+G,EAAO/G,EAAI,GAAK,KAC/E7C,EAAMtC,OAAOmF,EAAI,GAAK,QAG3B,IAAiC,aAA7B4G,EAAKxL,UAAU,GAAG,GAMtB,MAAM,IAAIyC,MAAM,0BAN6B,OAC1C/D,EAAQ4M,OACd,MAAMU,EAActN,EAAQqN,OAAOR,GACnCxJ,EAAQ,IAAI/C,KAAKgN,EAAYnN,MAAOmN,EAAYlN,QAEhDiD,EAAMtC,OAAOwC,IAAI+J,EAAYL,SAGjC,OAAO5J,EAOX,4BACI,OAAO,EAOX,4BACI,OAAO,EAOX,6BACI,OAAO,EAUX,uBAAuBqK,EAAKC,EAAO,EAAGlK,EAAOnD,KAAKsN,gBAC9C,IAAK,CAACtN,KAAKuN,eAAgBvN,KAAKwN,gBAAiBxN,KAAKsN,gBAAgBG,SAAStK,GAC3E,MAAM,IAAIM,MAAM,4BAEpB,GAAIN,IAASnD,KAAKsN,gBAAkBD,GAAQ,EACxC,MAAM,IAAItN,WAAW,yBACzB,GAAIoD,IAASnD,KAAKsN,gBAAkBD,EAAO,EACvC,MAAM,IAAItN,WAAW,yBAEF,iBAARqN,IAAkBA,GAAM,IAAIM,aAAcxB,OAAOkB,UAEtD5N,EAAO8M,OACb,MAAMU,EAAcxN,EAAOmO,UAAUP,EAAKjK,EAAMkK,GAC1CtK,EAAQ,IAAI/C,KAAKgN,EAAYnN,MAAOmN,EAAYlN,QAItD,OAFAiD,EAAMtC,OAAOwC,IAAI+J,EAAYL,QAEtB5J,EAOf,6BACI,OAAO,EAOX,6BACI,OAAO,EAaX,wBAAwB6K,EAAMC,EAAOC,EAAM5L,EAAQ,WAAY6L,EAAYC,IAAUC,EAAYjO,KAAKkO,uBAC5F3O,EAAQ+M,OACdsB,EAAO,IAAIrO,EAAQ4O,KAAKN,EAAOD,GAC/B,MAAO3M,EAAGC,EAAGC,EAAGC,GAAKxB,EAAMuC,YAAYD,GAEjCkM,EAAS,IAAI7O,EAAQ8O,OAE3BD,EAAOE,MAAM,CACTC,WAAYN,EAAY,OAAS,SACjCO,UAAWR,MAAaD,EAAY,KAAOA,IAG/CK,EAAOK,OAAOb,EAAME,EAAM,CAAED,UAC5B,MAAMb,EAAcoB,EAAOT,UAAU1M,EAAGC,EAAGC,GACrC4B,EAAQ,IAAI/C,KAAKgN,EAAYnN,MAAOmN,EAAYlN,QAMtD,OAJAiD,EAAMtC,OAAOwC,IAAI+J,EAAYL,QAE7BiB,EAAKc,OACLN,EAAOM,OACA3L,EAAMwC,QAAQnE,EAAI,MASjC,MAAMuN,UAAc/O,EAQhB,YAAYC,EAAOC,EAAQ8O,EAAW,KAClC,GAAIjM,MAAMiM,IAAaA,EAAW,EAC9B,MAAM,IAAI7O,WAAW,0BAEzB8O,MAAMhP,EAAOC,GACbE,KAAK4O,SAAWA,EAGpB,WACI,MAAO,SAAS5O,KAAKH,SAASG,KAAKF,UAAUE,KAAK4O,cAStD,YAAY7L,EAAO6L,GACf,KAAM7L,aAAiBnD,GACnB,MAAM,IAAIgD,UAAU,wBACxB,MAAMkM,EAAQ,IAAIH,EAAM5L,EAAMlD,MAAOkD,EAAMjD,OAAQ8O,GAGnD,OAFAE,EAAMrO,OAAOwC,IAAIF,EAAMtC,QAEhBqO,GAQf,MAAMC,UAAYzH,MAOd,YAAY0H,EAAQC,GAAY,GAC5BJ,SAASG,GAEThP,KAAKH,MAAQmP,EAAO,GAAGnP,MACvBG,KAAKF,OAASkP,EAAO,GAAGlP,OAExB,IAAK,MAAMgP,KAAS9O,KAAM,CACtB,KAAM8O,aAAiBH,GACnB,MAAM,IAAI/L,UAAU,SAAS5C,KAAKkP,QAAQJ,kCAE9C,GAAIA,EAAMjP,QAAUG,KAAKH,MAAO,MAAM,IAAI4D,MAAM,gCAChD,GAAIqL,EAAMhP,SAAWE,KAAKF,OAAQ,MAAM,IAAI2D,MAAM,iCAGtD,GAAIwL,GAAa,GAAKtM,MAAMsM,GACxB,MAAM,IAAIlP,WAAW,sBAEzBC,KAAKiP,UAAYA,EAGrB,WACI,MAAO,OAAOjP,KAAKH,SAASG,KAAKF,UAAUE,KAAK4O,cAOpD,eACI,MAAO,IAAI5O,MAAMmP,QAAO,CAACC,EAAKN,IAAUM,EAAMN,EAAMF,UAAU,GAQlE,aAAavC,EAAU,UACb1M,EAAO2M,OACb,MAAM+C,EAAU,IAAI1P,EAAO2P,QAAQtP,KAAKH,MAAOG,KAAKF,OAAQE,KAAKiP,WAEjE,IAAK,MAAMH,KAAS9O,KAAM,CACtB,KAAM8O,aAAiBH,GAAQ,MAAM,IAAIlL,MAAM,+BAC/C4L,EAAQE,OAAOT,EAAMF,SAAW,IAAKE,EAAMjP,MAAOiP,EAAMhP,OAAQgP,EAAMrO,OAAQ4L,GAGlF,OAAOgD,EAAQG,KAQnB,oBAAoBjD,GAChB,IAAIxJ,EAEAyJ,EASJ,GARKpM,YAAYqM,OAAOF,IAIpBA,EAAO,IAAIG,WAAWH,EAAKI,OAAQJ,EAAKK,WAAYL,EAAKM,YACzDL,EAAO,IAAIlM,SAASiM,EAAKI,OAAQJ,EAAKK,WAAYL,EAAKM,cAJvDN,EAAO,IAAIG,WAAWH,GACtBC,EAAO,IAAIlM,SAASiM,EAAKI,SAMxBH,EAAKxL,UAAU,GAAG,KAAW,GAAO,QAUlC,MAAM,IAAIyC,MAAM,0BAV4B,CAC/C,MAAMgM,EAAU,IAAI9P,EAAO+P,QAAQnD,GAC7ByC,EAAS,GACf,IAAK,MAAMW,KAAaF,EAAQT,SAAU,CACtC,MAAMF,EAAQ,IAAIH,EAAMgB,EAAU9P,MAAO8P,EAAU7P,OAAQ6P,EAAUC,OACrEd,EAAMrO,OAAOwC,IAAI0M,EAAUhD,QAC3BqC,EAAO3D,KAAKyD,GAGhB/L,EAAQ,IAAIgM,EAAIC,GAGpB,OAAOjM,GAIf7D,EAAOD,QAAU,CAACW,QAAOmP,MAAKJ,U,ilBCx3C9BzP,EAAOD,QAAU,MACb,iBAAiB4Q,GACb,MAAMC,EAAQ,IAAIpD,WACdmD,EAAOV,QAAO,CAACtJ,EAAQiK,IAAUjK,EAASiK,EAAMjK,QAAQ,IAG5D,IAAI9E,EAAS,EACb,IAAK,MAAMD,KAAK+O,EACZC,EAAM7M,IAAInC,EAAGC,GACbA,GAAUD,EAAE+E,OAGhB,OAAOiK,K,QCZf,MAAMC,EAAQ,IAAIvP,YAAY,CAC1B,EAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,WAAY,SAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,SAAY,WAC5D,WAAY,WAAY,SAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,SAAY,WAAY,WAC5D,WAAY,SAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,SAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,YAExCtB,EAAOD,QAAU,SAAe0N,GAC5B,IAAI5L,EAAS,EACTiP,EAAM,WAEV,KAAOjP,EAAS4L,EAAO9G,OAAS,GAC5BmK,EAAMD,EAAiC,KAA1BC,EAAMrD,EAAO5L,OAAsBiP,IAAQ,EACxDA,EAAMD,EAAiC,KAA1BC,EAAMrD,EAAO5L,OAAsBiP,IAAQ,EACxDA,EAAMD,EAAiC,KAA1BC,EAAMrD,EAAO5L,OAAsBiP,IAAQ,EACxDA,EAAMD,EAAiC,KAA1BC,EAAMrD,EAAO5L,OAAsBiP,IAAQ,EAG5D,KAAOjP,EAAS4L,EAAO9G,QACnBmK,EAAMD,EAAiC,KAA1BC,EAAMrD,EAAO5L,OAAsBiP,IAAQ,EAG5D,OAAc,WAANA,KAAsB,I,cC3DlC,MAAMC,EAAQ,EAAQ,KAChBC,EAAS,EAAQ,MACjB,KAAC5D,EAAI,SAAE6D,EAAQ,WAAEC,GAAc,EAAQ,KAEvCC,EAAW,IAAI3D,WAAW,CAAC,GAAI,GAAI,GAAI,KACvC4D,EAAW,IAAI5D,WAAW,CAAC,GAAI,GAAI,GAAI,KACvC6D,EAAW,IAAI7D,WAAW,CAAC,GAAI,GAAI,GAAI,KACvC8D,EAAeP,EAAM,IAAIvD,WAAW,CAAC,GAAI,GAAI,GAAI,MACjD+D,EAAO,IAAI/D,WAAW,CAAC,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,KAUpDgE,EAAyB,CAC3BC,EARW,EASXC,EANiB,EAQjBC,EAVW,EAWXC,EARiB,GAWrB5R,EAAOD,QAAU,CACb,aAAasN,GAAM,MAAC1M,EAAK,OAAEC,EAAM,SAAEsM,EAAQ,MAAE2E,EAAQ,EAAC,MAAE5E,EAAQ,IAC5D,IAAIpL,EAAS,EACTiQ,EAAa,EACjB,MAAMC,EAAapR,EAAQuM,EACrB8E,EAAM,IAAIxE,WAAW5M,EAASyM,EAAK1G,QAEzC,KAAO9E,EAASwL,EAAK1G,QACjBqL,EAAIF,KAAgB,EACpBE,EAAIjO,IAAIsJ,EAAKhK,SAASxB,EAASA,GAAUkQ,GAAcD,GAEvDA,GAAcC,QAGZ3E,IACN,MAAM6E,EAAahB,EAASe,EAAK/E,GAC3B2D,EAAQ,IAAIpD,WAAW,GAAK+D,EAAK5K,OAASsL,EAAWtL,QAE3DiK,EAAM,IAAM,EACZA,EAAM,IAAM,EACZA,EAAM,IAAM,EACZA,EAAM,IAAMiB,EACZjB,EAAM7M,IAAIwN,EAAM,GAChBX,EAAM7M,IAAIoN,EAAU,IACpBP,EAAM7M,IAAIqN,EAAU,IACpBR,EAAM7M,IAAIkO,EAAY,IACtBrB,EAAM7M,IAAIsN,EAAU,GAAKY,EAAWtL,QACpCiK,EAAM,IAAMY,EAAuBtE,GAEnC,MAAMI,EAAO,IAAIlM,SAASwP,EAAMnD,QAWhC,OATAH,EAAK9J,UAAU,EAAG,IAClB8J,EAAK9J,UAAU,GAAI7C,GACnB2M,EAAK9J,UAAU,GAAI5C,GACnB0M,EAAK9J,UAAU,GAAIyO,EAAWtL,QAC9B2G,EAAK9J,UAAU,GAAKyO,EAAWtL,OAAQ,GACvC2G,EAAK9J,UAAU,GAAKyO,EAAWtL,OAAQ2K,GACvChE,EAAK9J,UAAU,GAAIuN,EAAM,IAAIvD,WAAWoD,EAAMnD,OAAQ,GAAI,MAC1DH,EAAK9J,UAAU,GAAKyO,EAAWtL,OAAQoK,EAAM,IAAIvD,WAAWoD,EAAMnD,OAAQ,GAAI,EAAIwE,EAAWtL,UAEtFiK,GAEX,aAAaA,GACT,IAAItD,EAAO,IAAIlM,SAASwP,EAAMnD,OAAQmD,EAAMlD,WAAYkD,EAAMjD,YAE9D,MAAMhN,EAAQ2M,EAAKxL,UAAU,IACvBlB,EAAS0M,EAAKxL,UAAU,IACxBoQ,EAAMtB,EAAM,IACZuB,EAAavB,EAAM,IACzB,IAAI1D,EAAW,CAAEyE,EAAG,EAAGS,EAAG,EAAGR,EAAG,EAAGF,EAAG,EAAGW,EAAG,GAAIF,GAChD,MAAMG,EAAUpF,EAAWgF,EAAM,EAE3BH,EAAapR,EAAQ2R,EAC3B,IAAI1E,EAAS,IAAIJ,WAAW5M,EAASmR,GAEjClQ,EAAS,EACT0Q,EAAW,EAEXC,EAAW,GACf,MAAMC,EAAS,GAEf,IAAIC,EAASC,EAETC,EACJ,KAAgB,aAATA,GAAqB,CAIxB,GAHAA,EAAOtF,EAAKxL,UAAU,EAAI0Q,GAGb,aAATI,EACAH,EAAOtG,KAAKyE,EAAMvN,SAAS,EAAImP,EAAU,EAAIA,EAAWlF,EAAKxL,UAAU0Q,UACtE,GAAa,aAATI,EAAqB,CAC1B,GAAIF,EACA,MAAM,IAAInO,MAAM,wCACpBmO,EAAU,IAAIpR,YAAYgM,EAAKxL,UAAU0Q,IACzC,IAAK,IAAIK,EAAY,EAAGA,EAA6B,EAAjBH,EAAQ/L,OAAYkM,GAAa,EACjEH,EAAQG,EAAY,GAAKjC,EAAM,EAAI4B,EAAWK,IAAc,GAAKjC,EAAM,EAAI4B,EAAWK,EAAY,IAAM,GAAKjC,EAAM,EAAI4B,EAAWK,EAAY,IAAM,EAAI,SACzJ,GAAa,aAATD,EAAqB,CAC5B,GAAID,EACA,MAAM,IAAIpO,MAAM,wCACpBoO,EAAe,IAAInF,WAAWF,EAAKxL,UAAU0Q,IAC7C,IAAK,IAAI9L,EAAI,EAAGA,EAAIiM,EAAahM,OAAQD,IACrCiM,EAAajM,GAAKkK,EAAM,EAAI4B,EAAW9L,GAG/C8L,GAAY,GAAYlF,EAAKxL,UAAU0Q,GAM3C,UAHMpF,IACNwD,EAAQM,EAA6B,IAAlBuB,EAAO9L,OAAe8L,EAAO,GAAKzB,EAAO8B,UAAUL,IAE/D5Q,EAAS+O,EAAMjD,YAAY,CAC9B,MAAMoF,EAASnC,EAAM/O,KACfqB,EAAQ0N,EAAMvN,SAASxB,EAAQA,GAAUkQ,GAE3C,IAAMgB,EAAQnF,EAAO7J,IAAIb,EAAOqP,GAC3B,IAAMQ,EAAQjS,KAAKkS,SAAS9P,EAAO0K,EAAQ2E,EAAUD,EAASP,GAC9D,IAAMgB,EAAQjS,KAAKmS,SAAS/P,EAAO0K,EAAQ2E,EAAUD,EAASP,GAC9D,IAAMgB,EAAQjS,KAAKoS,SAAShQ,EAAO0K,EAAQ2E,EAAUD,EAASP,GAC9D,IAAMgB,GAAQjS,KAAKqS,SAASjQ,EAAO0K,EAAQ2E,EAAUD,EAASP,GAEvEQ,GAAYR,EAGhB,GAAmB,IAAfI,EAAkB,CAClB,IAAKO,EACD,MAAM,IAAInO,MAAM,iCAEpB,GAAIoO,EACA,IAAK,IAAIjM,EAAI,EAAGA,EAAIiM,EAAahM,OAAQD,IACrCgM,EAAQhM,IAAM,WAAaiM,EAAajM,GAEhDwG,EAAW,EACX,MAAMkG,EAAY,IAAI5F,WAAW7M,EAAQC,EAAS,GAC5CyS,EAAY,IAAIjS,SAASgS,EAAU3F,OAAQ2F,EAAU1F,WAAY0F,EAAUzF,YACjF,IAAK,IAAIjH,EAAI,EAAGA,EAAIkH,EAAOjH,OAAQD,IAC/B2M,EAAU7P,UAAc,EAAJkD,EAAOgM,EAAQ9E,EAAOlH,KAAK,GACnDkH,EAASwF,EAGb,GAAY,IAARlB,EAAW,CACX,MAAMkB,EAAY,IAAI5F,WAAWI,EAAOjH,OAASuL,EAAM,GACvD,IAAK,IAAIxL,EAAI,EAAGA,EAAIkH,EAAOjH,OAAQD,GAAK,EACpC0M,EAAU1M,EAAI,GAAKkH,EAAOlH,GAC9BkH,EAASwF,EAGb,GAAiB,IAAblG,EAAgB,CAChB,MAAMkG,EAAY,IAAI5F,WAAW7M,EAAQC,EAAS,GAC5C0M,EAAO,IAAIlM,SAASgS,EAAU3F,QAEpC,GAAiB,IAAbP,EACA,IAAK,IAAIxG,EAAI,EAAGA,EAAI/F,EAAQC,EAAQ8F,IAAK,CACrC,MAAMuH,EAAQL,EAAOlH,GACrB4G,EAAK9J,UAAc,EAAJkD,EAAOuH,GAAS,GAAKA,GAAS,GAAKA,GAAS,EAAI,KAAM,QAEtE,GAAiB,IAAbf,EACP,IAAK,IAAIxG,EAAI,EAAGA,EAAI/F,EAAQC,EAAS,EAAG8F,GAAK,EAAG,CAC5C,MAAMuH,EAAQL,EAAOlH,GACrB4G,EAAK9J,UAAc,EAAJkD,EAAOuH,GAAS,GAAKA,GAAS,GAAKA,GAAS,EAAIL,EAAOlH,EAAI,IAAI,QAE/E,GAAiB,IAAbwG,EAAgB,CACvBkG,EAAUxP,KAAK,KACf,IAAK,IAAI8C,EAAI,EAAGA,EAAI/F,EAAQC,EAAQ8F,IAChC0M,EAAUrP,IAAI6J,EAAOvK,SAAa,EAAJqD,EAAW,EAAJA,EAAQ,GAAQ,EAAJA,GAGzDkH,EAASwF,EAGb,MAAO,CAACzS,QAAOC,SAAQgN,WAG3B,SAAS1K,EAAO0K,EAAQ2E,EAAUD,EAASP,GACvC,IAAIrL,EAAI,EACR,KAAOA,EAAI4L,GAAS1E,EAAOlH,EAAI6L,GAAYrP,EAAMwD,KACjD,KAAOA,EAAIqL,GAAYnE,EAAOlH,EAAI6L,GAAYrP,EAAMwD,GAAKkH,EAAOlH,IAAM6L,EAAWD,IAGrF,SAASpP,EAAO0K,EAAQ2E,EAAUD,EAASP,GACvC,GAAI,IAAMQ,EAAU3E,EAAO7J,IAAIb,EAAOqP,OACjC,CACD,IAAI7L,EAAI,EACR,KAAOA,EAAIqL,GAAYnE,EAAOlH,EAAI6L,GAAYrP,EAAMwD,GAAKkH,EAAOlH,IAAM6L,EAAWR,KAIzF,SAAS7O,EAAO0K,EAAQ2E,EAAUD,EAASP,GACvC,IAAIrL,EAAI,EAER,GAAI,IAAM6L,EAAU,CAChB,KAAO7L,EAAI4L,GAAS1E,EAAOlH,GAAKxD,EAAMwD,KACtC,KAAOA,EAAIqL,GAAYnE,EAAOlH,GAAKxD,EAAMwD,IAAMkH,EAAOlH,IAAM4L,IAAY,OACrE,CACH,KAAO5L,EAAI4L,GAAS1E,EAAOlH,EAAI6L,GAAYrP,EAAMwD,IAAMkH,EAAOlH,IAAM6L,EAAWR,IAAe,GAC9F,KAAOrL,EAAIqL,GAAYnE,EAAOlH,EAAI6L,GAAYrP,EAAMwD,IAAMkH,EAAOlH,EAAI6L,EAAWD,GAAW1E,EAAOlH,IAAM6L,EAAWR,IAAe,KAI1I,SAAS7O,EAAO0K,EAAQ2E,EAAUD,EAASP,GACvC,IAAIrL,EAAI,EAER,GAAI,IAAM6L,EAAU,CAChB,KAAO7L,EAAI4L,GAAS1E,EAAOlH,GAAKxD,EAAMwD,KACtC,KAAOA,EAAIqL,GAAYnE,EAAOlH,GAAKxD,EAAMwD,GAAKkH,EAAOlH,IAAM4L,OACxD,CACH,KAAO5L,EAAI4L,GAAS1E,EAAOlH,EAAI6L,GAAYrP,EAAMwD,GAAKkH,EAAOlH,IAAM6L,EAAWR,GAE9E,KAAOrL,EAAIqL,GAAY,CACnB,MAAM7P,EAAI0L,EAAOlH,EAAI6L,EAAWD,GAC1BrQ,EAAI2L,EAAOlH,EAAI6L,EAAWR,GAC1BuB,EAAI1F,EAAOlH,EAAI6L,EAAWD,EAAUP,GAEpCpP,EAAIT,EAAID,EAAIqR,EACZC,EAAKhR,KAAK2G,IAAIvG,EAAIT,GAClBsR,EAAKjR,KAAK2G,IAAIvG,EAAIV,GAClBwR,EAAKlR,KAAK2G,IAAIvG,EAAI2Q,GAExB1F,EAAOlH,EAAI6L,GAAYrP,EAAMwD,MAAS6M,GAAMC,GAAMD,GAAME,EAAMvR,EAAMsR,GAAMC,EAAMxR,EAAIqR,Q,cChOpG,MAAM,QAACI,GAAW,EAAQ,KAE1B,IAAIC,EACAC,EAAW,KAEf,MAAMC,EACJ,gBAAkB,OAAOF,EAAKG,OAC9B,aAAa3F,GAAQ,OAAOwF,EAAKI,OAAO5F,GACxC,YAAY6F,EAAK7F,GAAQ,OAAOwF,EAAKM,MAAMD,EAAK7F,GAChD,UAAU6F,EAAK7F,GAAQ,OAAO,IAAIX,WAAWmG,EAAKO,OAAOzG,OAAQuG,EAAK7F,GACtE,WAAW6F,EAAK7F,GAAQ,OAAO,IAAI7M,YAAYqS,EAAKO,OAAOzG,OAAQuG,EAAK7F,GAExE,qBAAqB6F,EAAK7F,GACxB,IAAIjL,EAAQ2Q,EAAIvD,GAAG0D,EAAK7F,GAAMjL,QAC9B,OAAQyQ,EAAKM,MAAMD,EAAK7F,GAAOjL,GAInC,MAAMiR,EAAc,SAAUC,WAAaC,KAAKC,KAAKtH,OAAS,MAC5D,MAAMmD,EAAU,IAAI3B,YACpB,OAAO+F,GAAUpE,EAAQnD,OAAOuH,IAF4B,GAKxDC,EAAc,SAAUJ,WAAaC,KAAKC,KAAKzG,OAAS,MAC5D,MAAM0C,EAAU,IAAIkE,YACpB,OAAOhH,GAAU8C,EAAQ1C,OAAOJ,IAF4B,GAK1D,yBAA0B2G,aAC5BR,EAAW,IAAIc,sBAAqB,EAAE7R,EAAGmR,MAC7B,IAANnR,GAAS8Q,EAAKgB,UAAUX,GAClB,IAANnR,GAAS8Q,EAAKiB,YAAYZ,OAiGlChU,EAAOD,QAAU,CACfkP,KA9FF,MACE,YAAYN,EAAOlB,GACjB3M,KAAK6N,MAAQA,EACb,MAAMqF,EAAMH,EAAIgB,MAAMpH,EAAO9G,QAI7B,GAHAkN,EAAIvD,GAAG0D,EAAKvG,EAAO9G,QAAQ5C,IAAI0J,GAC/B3M,KAAKkT,IAAML,EAAKmB,SAASd,EAAKvG,EAAO9G,OAAQgI,IAExC7N,KAAKkT,IAAK,MAAM,IAAIzP,MAAM,gBAC3BqP,GAAUA,EAASmB,SAASjU,KAAM,CAAC,EAAGA,KAAKkT,KAAMlT,MAGvD,OACEA,KAAKkT,IAAML,EAAKgB,UAAU7T,KAAKkT,KAC3BJ,GAAUA,EAASoB,WAAWlU,MAGpC,IAAImU,GACF,OAAOtB,EAAKuB,SAASpU,KAAKkT,IAAKmB,OAAOC,UAAUC,WAAWC,KAAKL,EAAM,IAGxE,QAAQA,EAAMtG,EAAQ7N,KAAK6N,OACzB,MAAMqF,EAAML,EAAK4B,aAAazU,KAAKkT,IAAKmB,OAAOC,UAAUC,WAAWC,KAAKL,EAAM,GAAItG,GAC7E6G,EAAUC,KAAKC,MAAMlB,EAAYX,EAAIvD,GAAGqD,EAAKgC,oBAAoB3B,GAAMH,EAAIlN,YAEjF,OAAQgN,EAAKiC,kBAAkB5B,GAAMwB,EAGvC,UAAUP,EAAMtG,EAAQ7N,KAAK6N,OAC3B,MAAMqF,EAAML,EAAKkC,eAAe/U,KAAKkT,IAAKmB,OAAOC,UAAUC,WAAWC,KAAKL,EAAM,GAAItG,GAE/EmH,EAAQ,CACZrI,OAAQoG,EAAIvD,GAAGqD,EAAKoC,sBAAsB/B,GAAMH,EAAIlN,UAAUzD,QAC9DsS,QAASC,KAAKC,MAAMlB,EAAYX,EAAIvD,GAAGqD,EAAKqC,uBAAuBhC,GAAMH,EAAIlN,aAG/E,OAAQgN,EAAKsC,oBAAoBjC,GAAM8B,IA4DzC3G,OAxDF,MACE,cACErO,KAAKkT,IAAML,EAAKuC,aACZtC,IAAU9S,KAAKqV,KAAO,IACtBvC,GAAUA,EAASmB,SAASjU,KAAM,CAAC,EAAGA,KAAKkT,KAAMlT,MAGvD,QACE6S,EAAKyC,aAAatV,KAAKkT,KACnBJ,IAAU9S,KAAKqV,KAAKxP,OAAS,GAGnC,QACE,OAAOgN,EAAK0C,aAAavV,KAAKkT,KAGhC,OACMJ,IAAU9S,KAAKqV,KAAKxP,OAAS,GACjC7F,KAAKkT,IAAML,EAAKiB,YAAY9T,KAAKkT,KAC7BJ,GAAUA,EAASoB,WAAWlU,MAGpC,MAAMwV,EAAU,IACdA,EAAUnC,EAAYsB,KAAKc,UAAUD,IAEjC1C,IAAU9S,KAAKqV,KAAKxP,OAAS,GACjC,MAAMqN,EAAMH,EAAIgB,MAAMyB,EAAQ3P,QAC9BkN,EAAIvD,GAAG0D,EAAKsC,EAAQ3P,QAAQ5C,IAAIuS,GAChC3C,EAAK6C,aAAa1V,KAAKkT,IAAKA,EAAKsC,EAAQ3P,QAG3C,OAAO+H,EAAME,EAAMxB,GACjBwB,EAAOuF,EAAYvF,GACnB,MAAM0H,EAAUlJ,GAAQ,GACpBwG,GAAU9S,KAAKqV,KAAKhK,KAAKuC,GAC7B,MAAMsF,EAAMH,EAAIgB,MAAMjG,EAAKjI,QAC3BkN,EAAIvD,GAAG0D,EAAKpF,EAAKjI,QAAQ5C,IAAI6K,GAC7B,MAAM6H,EAAa,MAAOH,GAAa,MAAOA,GAAa,MAAOA,EAClE3C,EAAK+C,cAAc5V,KAAKkT,IAAKtF,EAAKsF,IAAKA,EAAKpF,EAAKjI,OAAyB,MAAjB2P,EAAQ3H,MAAgBD,EAAKC,MAAQ2H,EAAQ3H,MAAO8H,EAAWH,EAAQvU,EAAGuU,EAAQtU,EAAGsU,EAAQrU,GAGxJ,UAAUF,EAAGC,EAAGC,GACd,MAAM+R,EAAML,EAAKgD,iBAAiB7V,KAAKkT,IAAKjS,EAAGC,EAAGC,GAE5C6L,EAAc,CAClBnN,MAAOgT,EAAKiD,uBAAuB5C,GACnCpT,OAAQ+S,EAAKkD,wBAAwB7C,GACrCvG,OAAQoG,EAAIvD,GAAGqD,EAAKmD,wBAAwB9C,GAAMH,EAAIlN,UAAUzD,SAGlE,OAAQyQ,EAAKoD,sBAAsB/C,GAAMlG,IAQ3C,aACE,GAAI6F,EAAM,OACV,MAAMqD,EAAY,qBAAsBC,YAClCjX,QAAeiX,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiCxD,0BAAgCyD,MAAKvV,GAAKoV,EAAYpV,EAAIA,EAAEwV,iBACjLC,QAAiBJ,YAAYK,YAAYtX,GAE/C2T,EAAO0D,EAAStX,W,cC1IpB,MAAM,QAAC2T,GAAW,EAAQ,KAE1B,IAAIC,EACJ,MAAM4D,EAAU,IAAIC,IAEpB,MAAM3D,EACJ,gBAAkB,OAAOF,EAAKG,OAC9B,aAAa3F,GAAQ,OAAOwF,EAAKI,OAAO5F,GACxC,YAAY6F,EAAK7F,GAAQ,OAAOwF,EAAKM,MAAMD,EAAK7F,GAChD,UAAU6F,EAAK7F,GAAQ,OAAO,IAAIX,WAAWmG,EAAKO,OAAOzG,OAAQuG,EAAK7F,GACtE,WAAW6F,EAAK7F,GAAQ,OAAO,IAAI7M,YAAYqS,EAAKO,OAAOzG,OAAQuG,EAAK7F,GAExE,qBAAqB6F,EAAK7F,GACxB,IAAIjL,EAAQ2Q,EAAIvD,GAAG0D,EAAK7F,GAAMjL,QAC9B,OAAQyQ,EAAKM,MAAMD,EAAK7F,GAAOjL,GA+EnClD,EAAOD,QAAU,CACfqQ,QA5EF,MACE,YAAYzP,EAAOC,EAAQ6W,GAAQ,GACjC3W,KAAK4W,OAAS,GACdH,EAAQxT,IAAI,EAAGjD,MACfA,KAAKkT,IAAML,EAAKgE,YAAY,EAAGhX,EAAOC,EAAQ6W,GAGhD,GAAGhK,GACD3M,KAAK4W,OAAOvL,KAAKsB,GAGnB,OACE3M,KAAKkT,IAAML,EAAKiE,aAAa9W,KAAKkT,KAClCuD,EAAQM,OAAO,GAGjB,KACE/W,KAAK0O,OACL,IAAI3N,EAAS,EACb,MAAMyO,EAAK,IAAI9C,WAAW1M,KAAK4W,OAAOzH,QAAO,CAAC6H,EAAKlH,IAAUkH,EAAMlH,EAAMjK,QAAQ,IAEjF,IAAK,MAAM/E,KAAKd,KAAK4W,OACnBpH,EAAGvM,IAAInC,EAAGC,GACVA,GAAUD,EAAE+E,OAGd,OAAO2J,EAGT,IAAII,EAAO/P,EAAOC,EAAQ6M,EAAQN,GAChC,MAAM6G,EAAMH,EAAIgB,MAAMpH,EAAO9G,QAC7BkN,EAAIvD,GAAG0D,EAAKvG,EAAO9G,QAAQ5C,IAAI0J,GAC/BkG,EAAKoE,YAAYjX,KAAKkT,IAAKA,EAAKvG,EAAO9G,OAAQhG,EAAOC,EAAQ8P,EAAOvD,KA6CvEqD,QAzCF,MACE,YAAY/C,EAAQuK,EAAQ,GAC1B,MAAMC,EAAOpE,EAAIgB,MAAMpH,EAAO9G,QAG9B,GAFAkN,EAAIvD,GAAG2H,EAAMxK,EAAO9G,QAAQ5C,IAAI0J,GAChC3M,KAAKkT,IAAML,EAAKuE,YAAYD,EAAMxK,EAAO9G,OAAQqR,GAC7C,IAAMlX,KAAKkT,IAAK,MAAM,IAAIzP,MAAM,mCAEpCzD,KAAKH,MAAQgT,EAAKwE,cAAcrX,KAAKkT,KACrClT,KAAKF,OAAS+S,EAAKyE,eAAetX,KAAKkT,KAGzC,OACElT,KAAKkT,IAAML,EAAK0E,aAAavX,KAAKkT,KAGpC,UACE,IAAIpE,EACJ,KAAOA,EAAQ9O,KAAK8O,eAAeA,EAEnC9O,KAAK0O,OAGP,QACE,MAAMwE,EAAML,EAAK2E,cAAcxX,KAAKkT,KAEpC,GAAI,IAAMA,EAAK,OAAO,KACtB,GAAI,IAAMA,EAAK,MAAOlT,KAAK0O,OAAQ,IAAIjL,MAAM,+BAE7C,MAAMuJ,EAAc,CAClB4C,MAAOiD,EAAK4E,oBAAoBvE,GAChCrT,MAAOgT,EAAK6E,oBAAoBxE,GAChCpT,OAAQ+S,EAAK8E,qBAAqBzE,GAClCvG,OAAQoG,EAAIvD,GAAGqD,EAAK+E,qBAAqB1E,GAAMH,EAAIlN,UAAUzD,SAG/D,OAAQyQ,EAAKgF,mBAAmB3E,GAAMlG,IAQxC,aACA,GAAI6F,EAAM,OACV,MAAMqD,EAAY,qBAAsBC,YAClCjX,QAAeiX,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiCxD,yBAA+ByD,MAAKvV,GAAKoV,EAAYpV,EAAIA,EAAEwV,iBAC9KC,QAAiBJ,YAAYK,YAAYtX,EAAQ,CACrD4Y,IAAK,CACH,eAAeC,EAAI7E,GACjBuD,EAAQuB,IAAID,GAAIE,GAAGlF,EAAIvD,GAAG0D,EAAKH,EAAIlN,UAAUzD,aAKnDyQ,EAAO0D,EAAStX,W,cC7GpB,MAAM,QAAC2T,GAAW,EAAQ,KAE1B,IAAIC,EAEJ,MAAME,EACJ,gBAAkB,OAAOF,EAAKG,OAC9B,aAAa3F,GAAQ,OAAOwF,EAAKI,OAAO5F,GACxC,YAAY6F,EAAK7F,GAAQ,OAAOwF,EAAKM,MAAMD,EAAK7F,GAChD,UAAU6F,EAAK7F,GAAQ,OAAO,IAAIX,WAAWmG,EAAKO,OAAOzG,OAAQuG,EAAK7F,GACtE,WAAW6F,EAAK7F,GAAQ,OAAO,IAAI7M,YAAYqS,EAAKO,OAAOzG,OAAQuG,EAAK7F,GAExE,qBAAqB6F,EAAK7F,GACxB,IAAIjL,EAAQ2Q,EAAIvD,GAAG0D,EAAK7F,GAAMjL,QAC9B,OAAQyQ,EAAKM,MAAMD,EAAK7F,GAAOjL,GA4BnClD,EAAOD,QAAU,CACfiN,OAzBF,SAAgBS,EAAQ9M,EAAOC,EAAQuM,GACrC,MAAM6G,EAAMH,EAAIgB,MAAMpH,EAAO9G,QAE7B,OADAkN,EAAIvD,GAAG0D,EAAKvG,EAAO9G,QAAQ5C,IAAI0J,GACxBoG,EAAImF,cAAcrF,EAAK3G,OAAOgH,EAAKrT,EAAOC,EAAQuM,GAAU0G,EAAIlN,WAuBvEkH,OApBF,SAAgBJ,EAAQ9M,EAAOC,GAC7B,MAAMqX,EAAOpE,EAAIgB,MAAMpH,EAAO9G,QAC9BkN,EAAIvD,GAAG2H,EAAMxK,EAAO9G,QAAQ5C,IAAI0J,GAChC,MAAMuG,EAAML,EAAK9F,OAAOoK,EAAMxK,EAAO9G,OAAQhG,EAAOC,GAEpD,GAAI,IAAMoT,EAAK,MAAM,IAAIzP,MAAM,yBAC/B,GAAI,IAAMyP,EAAK,MAAM,IAAIzP,MAAM,gCAE/B,MAAMuJ,EAAc,CAClBnN,MAAOgT,EAAKsF,aAAajF,GACzBpT,OAAQ+S,EAAKuF,cAAclF,GAC3BhG,OAAQ2F,EAAKwF,cAAcnF,GAC3BvG,OAAQoG,EAAIvD,GAAGqD,EAAKyF,cAAcpF,GAAMH,EAAIlN,UAAUzD,SAGxD,OAAQyQ,EAAK0F,YAAYrF,GAAMlG,GAO/B,aACE,GAAI6F,EAAM,OACV,MAAMqD,EAAY,qBAAsBC,YAClCjX,QAAeiX,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiCxD,0BAAgCyD,MAAKvV,GAAKoV,EAAYpV,EAAIA,EAAEwV,iBACjLC,QAAiBJ,YAAYK,YAAYtX,GAE/C2T,EAAO0D,EAAStX,W,cCnDpB,MAAM,QAAC2T,GAAW,EAAQ,KAE1B,IAAIC,EAEJ,MAAME,EACJ,gBAAkB,OAAOF,EAAKG,OAC9B,aAAa3F,GAAQ,OAAOwF,EAAKI,OAAO5F,GACxC,YAAY6F,EAAK7F,GAAQ,OAAOwF,EAAKM,MAAMD,EAAK7F,GAChD,UAAU6F,EAAK7F,GAAQ,OAAO,IAAIX,WAAWmG,EAAKO,OAAOzG,OAAQuG,EAAK7F,GACtE,WAAW6F,EAAK7F,GAAQ,OAAO,IAAI7M,YAAYqS,EAAKO,OAAOzG,OAAQuG,EAAK7F,GAExE,qBAAqB6F,EAAK7F,GACxB,IAAIjL,EAAQ2Q,EAAIvD,GAAG0D,EAAK7F,GAAMjL,QAC9B,OAAQyQ,EAAKM,MAAMD,EAAK7F,GAAOjL,GAqBnClD,EAAOD,QAAU,CACb0O,UAlBJ,SAAmBhB,EAAQ6L,EAAK3K,GAC5B,MAAMsJ,EAAOpE,EAAIgB,MAAMpH,EAAO9G,QAC9BkN,EAAIvD,GAAG2H,EAAMxK,EAAO9G,QAAQ5C,IAAI0J,GAChC,MAAMuG,EAAML,EAAKlF,UAAUwJ,EAAMxK,EAAO9G,OAAQ2S,EAAK3K,GAErD,GAAI,IAAMqF,EAAK,MAAM,IAAIzP,MAAM,wBAC/B,GAAI,IAAMyP,EAAK,MAAM,IAAIzP,MAAM,4BAE/B,MAAMuJ,EAAc,CAClBnN,MAAOgT,EAAK4F,gBAAgBvF,GAC5BpT,OAAQ+S,EAAK6F,iBAAiBxF,GAC9BvG,OAAQoG,EAAIvD,GAAGqD,EAAK8F,iBAAiBzF,GAAMH,EAAIlN,UAAUzD,SAG3D,OAAQyQ,EAAK+F,eAAe1F,GAAMlG,GAMlC,aACI,GAAI6F,EAAM,OACV,MAAMqD,EAAY,qBAAsBC,YAClCjX,QAAeiX,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiCxD,yBAA+ByD,MAAKvV,GAAKoV,EAAYpV,EAAIA,EAAEwV,iBAChLC,QAAiBJ,YAAYK,YAAYtX,GAE/C2T,EAAO0D,EAAStX,W,aC3CxB,MAAM,QAAC2T,GAAW,EAAQ,KAE1B,IAAIC,EAEJ,MAAME,EACJ,gBAAkB,OAAOF,EAAKG,OAC9B,aAAa3F,GAAQ,OAAOwF,EAAKI,OAAO5F,GACxC,YAAY6F,EAAK7F,GAAQ,OAAOwF,EAAKM,MAAMD,EAAK7F,GAChD,UAAU6F,EAAK7F,GAAQ,OAAO,IAAIX,WAAWmG,EAAKO,OAAOzG,OAAQuG,EAAK7F,GACtE,WAAW6F,EAAK7F,GAAQ,OAAO,IAAI7M,YAAYqS,EAAKO,OAAOzG,OAAQuG,EAAK7F,GAExE,qBAAqB6F,EAAK7F,GACxB,IAAIjL,EAAQ2Q,EAAIvD,GAAG0D,EAAK7F,GAAMjL,QAC9B,OAAQyQ,EAAKM,MAAMD,EAAK7F,GAAOjL,GAmBnClD,EAAOD,QAAU,CAChB8N,OAhBD,SAAgBJ,GACf,MAAMwK,EAAOpE,EAAIgB,MAAMpH,EAAO9G,QAC9BkN,EAAIvD,GAAG2H,EAAMxK,EAAO9G,QAAQ5C,IAAI0J,GAChC,MAAMuG,EAAML,EAAK9F,OAAOoK,EAAMxK,EAAO9G,QACrC,GAAI,IAAMqN,EAAK,MAAM,IAAIzP,MAAM,0BAE/B,MAAMuJ,EAAc,CACnBnN,MAAOgT,EAAKsF,aAAajF,GACzBpT,OAAQ+S,EAAKuF,cAAclF,GAC3BvG,OAAQoG,EAAIvD,GAAGqD,EAAKyF,cAAcpF,GAAMH,EAAIlN,UAAUzD,SAGvD,OAAQyQ,EAAK0F,YAAYrF,GAAMlG,GAM/B,aACC,GAAI6F,EAAM,OACV,MAAMqD,EAAY,qBAAsBC,YAClCjX,QAAeiX,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiCxD,0BAAgCyD,MAAKvV,GAAKoV,EAAYpV,EAAIA,EAAEwV,iBACjLC,QAAiBJ,YAAYK,YAAYtX,GAE/C2T,EAAO0D,EAAStX,W,cCzClB,MAAM,QAAC2T,GAAW,EAAQ,KAE1B,IAAIC,EAEJ,MAAME,EACJ,gBAAkB,OAAOF,EAAKG,OAC9B,aAAa3F,GAAQ,OAAOwF,EAAKI,OAAO5F,GACxC,YAAY6F,EAAK7F,GAAQ,OAAOwF,EAAKM,MAAMD,EAAK7F,GAChD,UAAU6F,EAAK7F,GAAQ,OAAO,IAAIX,WAAWmG,EAAKO,OAAOzG,OAAQuG,EAAK7F,GACtE,WAAW6F,EAAK7F,GAAQ,OAAO,IAAI7M,YAAYqS,EAAKO,OAAOzG,OAAQuG,EAAK7F,GAExE,qBAAqB6F,EAAK7F,GACxB,IAAIjL,EAAQ2Q,EAAIvD,GAAG0D,EAAK7F,GAAMjL,QAC9B,OAAQyQ,EAAKM,MAAMD,EAAK7F,GAAOjL,GAmBnClD,EAAOD,QAAU,CACfkR,SAhBF,SAAkBxD,EAAQR,EAAQ,GAChC,MAAM+G,EAAMH,EAAIgB,MAAMpH,EAAO9G,QAE7B,OADAkN,EAAIvD,GAAG0D,EAAKvG,EAAO9G,QAAQ5C,IAAI0J,GACxBoG,EAAImF,cAAcrF,EAAK1C,SAAS+C,EAAKvG,EAAO9G,OAAQsG,GAAQ4G,EAAIlN,WAcvEuK,WAXF,SAAoBzD,EAAQuK,EAAQ,GAClC,MAAMhE,EAAMH,EAAIgB,MAAMpH,EAAO9G,QAC7BkN,EAAIvD,GAAG0D,EAAKvG,EAAO9G,QAAQ5C,IAAI0J,GAC/B,MAAM7L,EAAI+R,EAAKzC,WAAW8C,EAAKvG,EAAO9G,OAAQqR,GAC9C,GAAI,IAAMpW,EAAG,MAAM,IAAI2C,MAAM,8BAE7B,OAAOsP,EAAImF,cAAcpX,EAAGiS,EAAIlN,WAOhC,aACE,GAAIgN,EAAM,OACV,MAAMqD,EAAY,qBAAsBC,YAClCjX,QAAeiX,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiCxD,0BAAgCyD,MAAKvV,GAAKoV,EAAYpV,EAAIA,EAAEwV,iBACjLC,QAAiBJ,YAAYK,YAAYtX,GAE/C2T,EAAO0D,EAAStX,YCzChB4Z,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,GAAGF,EAAyBE,GAC3B,OAAOF,EAAyBE,GAAU9Z,QAG3C,IAAIC,EAAS2Z,EAAyBE,GAAY,CAGjD9Z,QAAS,IAOV,OAHA+Z,EAAoBD,GAAU7Z,EAAQA,EAAOD,QAAS6Z,GAG/C5Z,EAAOD,QCjBW6Z,CAAoB,K,MDF1CD","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32((~~y - 1) * this.width + (~~x - 1), false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new this(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new this(framebuffer.width, framebuffer.height);\n \n image.bitmap.set(framebuffer.buffer);\n \n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layout = new fontlib.Layout();\n\n layout.reset({\n wrap_style: wrapStyle ? 'word' : 'letter',\n max_width: Infinity === wrapWidth ? null : wrapWidth,\n });\n\n layout.append(font, text, { scale });\n const framebuffer = layout.rasterize(r, g, b);\n const image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n font.free();\n layout.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded GIF\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if ((view.getUint32(0, false) >>> 8) === 0x474946) { // GIF\n const decoder = new giflib.Decoder(data);\n const frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n \n wasm = instance.exports;\n },\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(delay, width, height, buffer, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, width, height, delay, quality);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n\n this.free();\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n }\n }\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = await WebAssembly.instantiate(module);\n\n\t\twasm = instance.exports;\n\t}\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file From 627d43423f53bdc43bff56f5f6093a8bcf95a591 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sat, 13 Mar 2021 16:29:49 +0100 Subject: [PATCH 025/120] fix text rendering wrap style (cherry picked from commit 7fe0cdbb95196f06e61305b921fc312546e27367) --- ImageScript.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ImageScript.js b/ImageScript.js index cdf01f8..04056cf 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1248,7 +1248,7 @@ class Image { const layout = new fontlib.Layout(); layout.reset({ - wrap_style: wrapStyle ? 'word' : 'letter', + wrap_style: wrapStyle === this.WRAP_STYLE_WORD ? 'word' : 'letter', max_width: Infinity === wrapWidth ? null : wrapWidth, }); From 9630e56c4712cd84d34f5cb757589a0b72eef767 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 13 Mar 2021 15:34:00 +0000 Subject: [PATCH 026/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index 5a975ee..2ca4699 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,i)=>{const r=i(347),s=i(723),n=i(876),o=i(327),a=i(76),h=i(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let i=1;i<=this.width;i++)yield[i,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,i,r){return((255&t)<<24|(255&e)<<16|(255&i)<<8|255&r)>>>0}static rgbToColor(t,e,i){return l.rgbaToColor(t,e,i,255)}static hslaToColor(t,e,i,r){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),i=Math.min(1,Math.max(0,i)),r=Math.min(1,Math.max(0,r)),0===e)s=n=o=i;else{const r=(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),a=i<.5?i*(1+e):i+e-i*e,h=2*i-a;s=r(h,a,t+1/3),n=r(h,a,t),o=r(h,a,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*r)}static hslToColor(t,e,i){return l.hslaToColor(t,e,i,1)}static rgbaToHSLA(t,e,i,r){t/=255,e/=255,i/=255;const s=Math.max(t,e,i),n=Math.min(t,e,i);let o,a,h=(s+n)/2;if(s===n)o=a=0;else{const r=s-n;switch(a=h>.5?r/(2-s-n):r/(s+n),s){case t:o=(e-i)/r+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const i=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(i,i+4)}setPixelAt(t,e,i){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,i),this}__set_pixel__(t,e,i){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),i,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let i=1;i<=this.height;i++)for(let r=1;r<=this.width;r++)this.__view__.setUint32(e,t(r,i),!1),e+=4}return this}clone(){const t=l.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__scale__(t,e);return this.__apply__(i)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__resize__(t,e,i);return this.__apply__(r)}__resize__(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let r;if(i!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return r=this.__resize_nearest_neighbor__(t,e),r}__resize_nearest_neighbor__(t,e){const i=new this.constructor(t,e);for(let r=0;rthis.width&&(i=this.width),r>this.height&&(r=this.height),this.__apply__(this.__crop__(t,e,i,r))}__crop__(t,e,i,r){t=~~t,e=~~e;const s=new this.constructor(i,r);for(let n=0;nthis.width||o>this.height)continue;const a=s(r,n);this.__set_pixel__(i,o,a)}return this}__fast_box__(t,e,i,r,s){t<0&&(i+=t,t=1),e<0&&(r+=e,e=1);const n=Math.max(Math.min(t+i,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const a=4*(n+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+r,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,i,r){const s=i**2;for(let n=Math.max(1,e-i);n<=Math.min(e+i,this.height);n++)for(let o=Math.max(1,t-i);o<=Math.min(t+i,this.width);o++)(o-t)**2+(n-e)**2i?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/i*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,i){for(let r=i;r{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,n,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((i,r)=>{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,t*(e?1:n),o,a)}))}composite(t,e=0,i=0){e=~~e,i=~~i;for(let r=0;r=this.height)break;for(let i=0;i=this.width)break;const o=4*(n+s*this.width),a=t.__view__.getUint32(4*(i+r*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,l.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const i=255&t,r=i+1,s=256-i;return(255&r*(t>>>24)+s*(e>>>24)>>8)<<24|(255&r*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&r*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(i,255&e)}invert(){for(const[t,e,i]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-i&4294967040|255&i);return this}invertValue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,s,1-n,o))}return this}invertSaturation(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,1-s,n,o))}return this}invertHue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(1-r,s,n,o))}return this}hueShift(t){for(const[e,i,r]of this.iterateWithColors()){const[s,n,o,a]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(e,i,l.hslaToColor(s+t/360,n,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let i=0;it/e)),255)}dominantColor(t=!0,e=!0,i=15){const r=new Array(262143);for(let s=0;s~~(63*t)));if(t&&h63-i)continue;const _=o<<12|a<<6|h;r[_]=(r[_]||0)+1}let s=-1,n=0;if(r.forEach(((t,e)=>{t>>12&63,a=n>>>6&63,h=63&n;return l.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const i=Math.PI*(t/180),r=Math.sin(i),s=Math.cos(i),n=e?Math.abs(this.width*r)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*r):this.height,a=l.new(n,o),h=n/2-.5,_=o/2-.5,c=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=c-r*(u-_),i=f+s*(u-_);do{const n=e+s*(t-h),o=i+r*(t-h);l.__interpolate__(this,a,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),i=e.map((t=>parseFloat(t[0]))),r=e.map((t=>t[1]));if(0===i.length)throw new RangeError("Invalid gradient point count");if(1===i.length)return()=>r[0];if(2===i.length){const t=this.__gradient__(r[0],r[1]);return e=>e<=i[0]?r[0]:e>=i[1]?r[1]:t((e-i[0])/(i[1]-i[0]))}const s=Math.min(...i),n=Math.max(...i);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}return this}static __gradient__(t,e){const i=t>>>24,r=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-i,a=(e>>16&255)-r,h=(e>>8&255)-s,l=(255&e)-n;return t=>(255&i+t*o)<<24|(255&r+t*a)<<16|(255&s+t*h)<<8|255&n+t*l}async encode(t=1){return await r.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),2303741511===i.getUint32(0,!1)){const{width:i,height:s,pixels:n}=await r.decode(t);e=new this(i,s),e.bitmap.set(n)}else if(i.getUint32(0,!1)>>>8==16767231){await o.init();const i=o.decode(t),r=i.width,s=i.height,n=i.format;e=new this(r,s);const a=i.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(i!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const r=n.rasterize(t,i,e),s=new this(r.width,r.height);return s.bitmap.set(r.buffer),s}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,i,r=4294967295,n=1/0,o=this.WRAP_STYLE_WORD){await s.init(),t=new s.Font(e,t);const[a,h,_,c]=l.colorToRGBA(r),f=new s.Layout;f.reset({wrap_style:o?"word":"letter",max_width:1/0===n?null:n}),f.append(t,i,{scale:e});const u=f.rasterize(a,h,_),w=new this(u.width,u.height);return w.bitmap.set(u.buffer),t.free(),f.free(),w.opacity(c/255)}}class _ extends l{constructor(t,e,i=100){if(isNaN(i)||i<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=i}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof l))throw new TypeError("Invalid image passed");const i=new _(t.width,t.height,e);return i.bitmap.set(t.bitmap),i}}class c extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){await h.init();const e=new h.Encoder(this.width,this.height,this.loopCount);for(const i of this){if(!(i instanceof _))throw new Error("GIF contains invalid frames");e.add(~~(i.duration/10),i.width,i.height,i.bitmap,t)}return e.u8()}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),i.getUint32(0,!1)>>>8!=4671814)throw new Error("Unsupported image type");{const i=new h.Decoder(t),r=[];for(const t of i.frames()){const e=new _(t.width,t.height,t.delay);e.bitmap.set(t.buffer),r.push(e)}e=new c(r)}return e}}t.exports={Image:l,GIF:c,Frame:_}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let i=0;for(const r of t)e.set(r,i),i+=r.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let i=0,r=4294967295;for(;i>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8;for(;i>>8;return(4294967295^r)>>>0}},347:(t,e,i)=>{const r=i(883),s=i(354),{init:n,compress:o,decompress:a}=i(423),h=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),c=r(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:i,channels:s,depth:a=8,level:w=0}){let g=0,d=0;const p=e*s,m=new Uint8Array(i+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,i,r,s){let n=0;if(0===i){for(;n{const{version:r}=i(306);let s,n=null;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}const a="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),h="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const i=o.alloc(e.length);if(o.u8(i,e.length).set(e),this.ptr=s.font_new(i,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const i=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),r=JSON.parse(h(o.u8(s.font_metrics_buffer(i),o.length())));return s.font_metrics_free(i),r}rasterize(t,e=this.scale){const i=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),r={buffer:o.u8(s.font_rasterize_buffer(i),o.length()).slice(),metrics:JSON.parse(h(o.u8(s.font_rasterize_metrics(i),o.length())))};return s.font_rasterize_free(i),r}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=a(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,i){e=a(e);const r=i||{};n&&this.refs.push(t);const h=o.alloc(e.length);o.u8(h,e.length).set(e);const l="r"in r||"g"in r||"b"in r;s.layout_append(this.ptr,t.ptr,h,e.length,null==r.scale?t.scale:r.scale,l,r.r,r.g,r.b)}rasterize(t,e,i){const r=s.layout_rasterize(this.ptr,t,e,i),n={width:s.layout_rasterize_width(r),height:s.layout_rasterize_height(r),buffer:o.u8(s.layout_rasterize_buffer(r),o.length()).slice()};return s.layout_rasterize_free(r),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},667:(t,e,i)=>{const{version:r}=i(306);let s;const n=new Map;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={Encoder:class{constructor(t,e,i=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,i)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const i of this.slices)e.set(i,t),t+=i.length;return e}add(t,e,i,r,n){const a=o.alloc(r.length);o.u8(a,r.length).set(r),s.encoder_add(this.ptr,a,r.length,e,i,t,n)}},Decoder:class{constructor(t,e=0){const i=o.alloc(t.length);if(o.u8(i,t.length).set(t),this.ptr=s.decoder_new(i,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t;this.free()}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:o.u8(s.decoder_frame_buffer(t),o.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e,{env:{push_to_stream(t,e){n.get(t).cb(o.u8(e,o.length()).slice())}}});s=i.exports}}},327:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={encode:function(t,e,i,r){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,i,r),n.length())},decode:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.decode(r,t.length,e,i);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},876:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={rasterize:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.rasterize(r,t.length,e,i);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},76:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const i=s.decode(e,t.length);if(0===i)throw new Error("tiff: failed to decode");const r={width:s.decode_width(i),height:s.decode_height(i),buffer:n.u8(s.decode_buffer(i),n.length()).slice()};return s.decode_free(i),r},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},423:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={compress:function(t,e=3){const i=n.alloc(t.length);return n.u8(i,t.length).set(t),n.copy_and_free(s.compress(i,t.length,e),n.length())},decompress:function(t,e=0){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const r=s.decompress(i,t.length,e);if(0===r)throw new Error("zlib: failed to decompress");return n.copy_and_free(r,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}}},e={},function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{}};return t[r](s,s.exports,i),s.exports}(655);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,i)=>{const r=i(347),s=i(723),n=i(876),o=i(327),a=i(76),h=i(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let i=1;i<=this.width;i++)yield[i,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,i,r){return((255&t)<<24|(255&e)<<16|(255&i)<<8|255&r)>>>0}static rgbToColor(t,e,i){return l.rgbaToColor(t,e,i,255)}static hslaToColor(t,e,i,r){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),i=Math.min(1,Math.max(0,i)),r=Math.min(1,Math.max(0,r)),0===e)s=n=o=i;else{const r=(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),a=i<.5?i*(1+e):i+e-i*e,h=2*i-a;s=r(h,a,t+1/3),n=r(h,a,t),o=r(h,a,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*r)}static hslToColor(t,e,i){return l.hslaToColor(t,e,i,1)}static rgbaToHSLA(t,e,i,r){t/=255,e/=255,i/=255;const s=Math.max(t,e,i),n=Math.min(t,e,i);let o,a,h=(s+n)/2;if(s===n)o=a=0;else{const r=s-n;switch(a=h>.5?r/(2-s-n):r/(s+n),s){case t:o=(e-i)/r+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const i=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(i,i+4)}setPixelAt(t,e,i){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,i),this}__set_pixel__(t,e,i){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),i,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let i=1;i<=this.height;i++)for(let r=1;r<=this.width;r++)this.__view__.setUint32(e,t(r,i),!1),e+=4}return this}clone(){const t=l.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__scale__(t,e);return this.__apply__(i)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__resize__(t,e,i);return this.__apply__(r)}__resize__(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let r;if(i!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return r=this.__resize_nearest_neighbor__(t,e),r}__resize_nearest_neighbor__(t,e){const i=new this.constructor(t,e);for(let r=0;rthis.width&&(i=this.width),r>this.height&&(r=this.height),this.__apply__(this.__crop__(t,e,i,r))}__crop__(t,e,i,r){t=~~t,e=~~e;const s=new this.constructor(i,r);for(let n=0;nthis.width||o>this.height)continue;const a=s(r,n);this.__set_pixel__(i,o,a)}return this}__fast_box__(t,e,i,r,s){t<0&&(i+=t,t=1),e<0&&(r+=e,e=1);const n=Math.max(Math.min(t+i,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const a=4*(n+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+r,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,i,r){const s=i**2;for(let n=Math.max(1,e-i);n<=Math.min(e+i,this.height);n++)for(let o=Math.max(1,t-i);o<=Math.min(t+i,this.width);o++)(o-t)**2+(n-e)**2i?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/i*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,i){for(let r=i;r{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,n,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((i,r)=>{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,t*(e?1:n),o,a)}))}composite(t,e=0,i=0){e=~~e,i=~~i;for(let r=0;r=this.height)break;for(let i=0;i=this.width)break;const o=4*(n+s*this.width),a=t.__view__.getUint32(4*(i+r*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,l.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const i=255&t,r=i+1,s=256-i;return(255&r*(t>>>24)+s*(e>>>24)>>8)<<24|(255&r*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&r*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(i,255&e)}invert(){for(const[t,e,i]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-i&4294967040|255&i);return this}invertValue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,s,1-n,o))}return this}invertSaturation(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,1-s,n,o))}return this}invertHue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(1-r,s,n,o))}return this}hueShift(t){for(const[e,i,r]of this.iterateWithColors()){const[s,n,o,a]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(e,i,l.hslaToColor(s+t/360,n,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let i=0;it/e)),255)}dominantColor(t=!0,e=!0,i=15){const r=new Array(262143);for(let s=0;s~~(63*t)));if(t&&h63-i)continue;const _=o<<12|a<<6|h;r[_]=(r[_]||0)+1}let s=-1,n=0;if(r.forEach(((t,e)=>{t>>12&63,a=n>>>6&63,h=63&n;return l.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const i=Math.PI*(t/180),r=Math.sin(i),s=Math.cos(i),n=e?Math.abs(this.width*r)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*r):this.height,a=l.new(n,o),h=n/2-.5,_=o/2-.5,c=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=c-r*(u-_),i=f+s*(u-_);do{const n=e+s*(t-h),o=i+r*(t-h);l.__interpolate__(this,a,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),i=e.map((t=>parseFloat(t[0]))),r=e.map((t=>t[1]));if(0===i.length)throw new RangeError("Invalid gradient point count");if(1===i.length)return()=>r[0];if(2===i.length){const t=this.__gradient__(r[0],r[1]);return e=>e<=i[0]?r[0]:e>=i[1]?r[1]:t((e-i[0])/(i[1]-i[0]))}const s=Math.min(...i),n=Math.max(...i);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}return this}static __gradient__(t,e){const i=t>>>24,r=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-i,a=(e>>16&255)-r,h=(e>>8&255)-s,l=(255&e)-n;return t=>(255&i+t*o)<<24|(255&r+t*a)<<16|(255&s+t*h)<<8|255&n+t*l}async encode(t=1){return await r.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),2303741511===i.getUint32(0,!1)){const{width:i,height:s,pixels:n}=await r.decode(t);e=new this(i,s),e.bitmap.set(n)}else if(i.getUint32(0,!1)>>>8==16767231){await o.init();const i=o.decode(t),r=i.width,s=i.height,n=i.format;e=new this(r,s);const a=i.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(i!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const r=n.rasterize(t,i,e),s=new this(r.width,r.height);return s.bitmap.set(r.buffer),s}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,i,r=4294967295,n=1/0,o=this.WRAP_STYLE_WORD){await s.init(),t=new s.Font(e,t);const[a,h,_,c]=l.colorToRGBA(r),f=new s.Layout;f.reset({wrap_style:o===this.WRAP_STYLE_WORD?"word":"letter",max_width:1/0===n?null:n}),f.append(t,i,{scale:e});const u=f.rasterize(a,h,_),w=new this(u.width,u.height);return w.bitmap.set(u.buffer),t.free(),f.free(),w.opacity(c/255)}}class _ extends l{constructor(t,e,i=100){if(isNaN(i)||i<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=i}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof l))throw new TypeError("Invalid image passed");const i=new _(t.width,t.height,e);return i.bitmap.set(t.bitmap),i}}class c extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){await h.init();const e=new h.Encoder(this.width,this.height,this.loopCount);for(const i of this){if(!(i instanceof _))throw new Error("GIF contains invalid frames");e.add(~~(i.duration/10),i.width,i.height,i.bitmap,t)}return e.u8()}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),i.getUint32(0,!1)>>>8!=4671814)throw new Error("Unsupported image type");{const i=new h.Decoder(t),r=[];for(const t of i.frames()){const e=new _(t.width,t.height,t.delay);e.bitmap.set(t.buffer),r.push(e)}e=new c(r)}return e}}t.exports={Image:l,GIF:c,Frame:_}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let i=0;for(const r of t)e.set(r,i),i+=r.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let i=0,r=4294967295;for(;i>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8;for(;i>>8;return(4294967295^r)>>>0}},347:(t,e,i)=>{const r=i(883),s=i(354),{init:n,compress:o,decompress:a}=i(423),h=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),c=r(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:i,channels:s,depth:a=8,level:w=0}){let g=0,d=0;const p=e*s,m=new Uint8Array(i+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,i,r,s){let n=0;if(0===i){for(;n{const{version:r}=i(306);let s,n=null;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}const a="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),h="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const i=o.alloc(e.length);if(o.u8(i,e.length).set(e),this.ptr=s.font_new(i,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const i=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),r=JSON.parse(h(o.u8(s.font_metrics_buffer(i),o.length())));return s.font_metrics_free(i),r}rasterize(t,e=this.scale){const i=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),r={buffer:o.u8(s.font_rasterize_buffer(i),o.length()).slice(),metrics:JSON.parse(h(o.u8(s.font_rasterize_metrics(i),o.length())))};return s.font_rasterize_free(i),r}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=a(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,i){e=a(e);const r=i||{};n&&this.refs.push(t);const h=o.alloc(e.length);o.u8(h,e.length).set(e);const l="r"in r||"g"in r||"b"in r;s.layout_append(this.ptr,t.ptr,h,e.length,null==r.scale?t.scale:r.scale,l,r.r,r.g,r.b)}rasterize(t,e,i){const r=s.layout_rasterize(this.ptr,t,e,i),n={width:s.layout_rasterize_width(r),height:s.layout_rasterize_height(r),buffer:o.u8(s.layout_rasterize_buffer(r),o.length()).slice()};return s.layout_rasterize_free(r),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},667:(t,e,i)=>{const{version:r}=i(306);let s;const n=new Map;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={Encoder:class{constructor(t,e,i=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,i)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const i of this.slices)e.set(i,t),t+=i.length;return e}add(t,e,i,r,n){const a=o.alloc(r.length);o.u8(a,r.length).set(r),s.encoder_add(this.ptr,a,r.length,e,i,t,n)}},Decoder:class{constructor(t,e=0){const i=o.alloc(t.length);if(o.u8(i,t.length).set(t),this.ptr=s.decoder_new(i,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t;this.free()}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:o.u8(s.decoder_frame_buffer(t),o.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e,{env:{push_to_stream(t,e){n.get(t).cb(o.u8(e,o.length()).slice())}}});s=i.exports}}},327:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={encode:function(t,e,i,r){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,i,r),n.length())},decode:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.decode(r,t.length,e,i);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},876:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={rasterize:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.rasterize(r,t.length,e,i);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},76:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const i=s.decode(e,t.length);if(0===i)throw new Error("tiff: failed to decode");const r={width:s.decode_width(i),height:s.decode_height(i),buffer:n.u8(s.decode_buffer(i),n.length()).slice()};return s.decode_free(i),r},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},423:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={compress:function(t,e=3){const i=n.alloc(t.length);return n.u8(i,t.length).set(t),n.copy_and_free(s.compress(i,t.length,e),n.length())},decompress:function(t,e=0){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const r=s.decompress(i,t.length,e);if(0===r)throw new Error("zlib: failed to decompress");return n.copy_and_free(r,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}}},e={},function i(r){var s=e[r];if(void 0!==s)return s.exports;var n=e[r]={exports:{}};return t[r](n,n.exports,i),n.exports}(655);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index 39f87e4..a5c507a 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","framebuffer","pixelType","format","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","Font","layout","Layout","reset","wrap_style","max_width","append","free","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","decoder","Decoder","frameData","delay","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","wasm","registry","mem","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","options","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","instantiate","streams","Map","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32((~~y - 1) * this.width + (~~x - 1), false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new this(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new this(framebuffer.width, framebuffer.height);\n \n image.bitmap.set(framebuffer.buffer);\n \n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layout = new fontlib.Layout();\n\n layout.reset({\n wrap_style: wrapStyle ? 'word' : 'letter',\n max_width: Infinity === wrapWidth ? null : wrapWidth,\n });\n\n layout.append(font, text, { scale });\n const framebuffer = layout.rasterize(r, g, b);\n const image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n font.free();\n layout.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded GIF\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if ((view.getUint32(0, false) >>> 8) === 0x474946) { // GIF\n const decoder = new giflib.Decoder(data);\n const frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n \n wasm = instance.exports;\n },\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(delay, width, height, buffer, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, width, height, delay, quality);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n\n this.free();\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n }\n }\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = await WebAssembly.instantiate(module);\n\n\t\twasm = instance.exports;\n\t}\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","framebuffer","pixelType","format","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","Font","layout","Layout","reset","wrap_style","max_width","append","free","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","decoder","Decoder","frameData","delay","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","wasm","registry","mem","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","options","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","instantiate","streams","Map","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32((~~y - 1) * this.width + (~~x - 1), false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new this(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new this(framebuffer.width, framebuffer.height);\n \n image.bitmap.set(framebuffer.buffer);\n \n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layout = new fontlib.Layout();\n\n layout.reset({\n wrap_style: wrapStyle === this.WRAP_STYLE_WORD ? 'word' : 'letter',\n max_width: Infinity === wrapWidth ? null : wrapWidth,\n });\n\n layout.append(font, text, { scale });\n const framebuffer = layout.rasterize(r, g, b);\n const image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n font.free();\n layout.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded GIF\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if ((view.getUint32(0, false) >>> 8) === 0x474946) { // GIF\n const decoder = new giflib.Decoder(data);\n const frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n \n wasm = instance.exports;\n },\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(delay, width, height, buffer, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, width, height, delay, quality);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n\n this.free();\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n }\n }\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = await WebAssembly.instantiate(module);\n\n\t\twasm = instance.exports;\n\t}\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file From 85b26316a36d2538353dde7d2935bb8bf1a84017 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Mon, 15 Mar 2021 21:48:19 +0100 Subject: [PATCH 027/120] fix getPixelAt (cherry picked from commit c77881b897a24d9bc28a68ac2570d62019946f8c) --- ImageScript.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ImageScript.js b/ImageScript.js index 04056cf..ccb51a1 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -236,7 +236,7 @@ class Image { */ getPixelAt(x, y) { this.__check_boundaries__(x, y); - return this.__view__.getUint32((~~y - 1) * this.width + (~~x - 1), false); + return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false); } /** From 2154f3edeec697387619991b5cda08e09b22201d Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Mon, 15 Mar 2021 21:55:16 +0100 Subject: [PATCH 028/120] sync versions --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5fe679b..b0c803b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "imagescript", - "version": "1.1.16", + "version": "1.1.19", "description": "zero-dependency javascript image manipulation", "main": "ImageScript.js", "type": "commonjs", From 0b33d38b56a27b0837e613f2815cc7a7e7e7e26e Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sat, 27 Mar 2021 09:09:17 +0100 Subject: [PATCH 029/120] lol --- example/index.html | 1 - 1 file changed, 1 deletion(-) diff --git a/example/index.html b/example/index.html index 016e336..cd780c2 100644 --- a/example/index.html +++ b/example/index.html @@ -18,7 +18,6 @@

    ImageScript example

    const encoded = await image.encode(); - // need to pass data to main thread as blob URI, cannot access document directly const blob = new Blob([encoded], {type: 'image/png'}); document.querySelector('#image').src = URL.createObjectURL(blob); })(); From d900ef2776341109f29e18b4fad5829e5423b691 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 27 Mar 2021 08:09:58 +0000 Subject: [PATCH 030/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index 2ca4699..6b2f0de 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,i)=>{const r=i(347),s=i(723),n=i(876),o=i(327),a=i(76),h=i(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let i=1;i<=this.width;i++)yield[i,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,i,r){return((255&t)<<24|(255&e)<<16|(255&i)<<8|255&r)>>>0}static rgbToColor(t,e,i){return l.rgbaToColor(t,e,i,255)}static hslaToColor(t,e,i,r){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),i=Math.min(1,Math.max(0,i)),r=Math.min(1,Math.max(0,r)),0===e)s=n=o=i;else{const r=(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),a=i<.5?i*(1+e):i+e-i*e,h=2*i-a;s=r(h,a,t+1/3),n=r(h,a,t),o=r(h,a,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*r)}static hslToColor(t,e,i){return l.hslaToColor(t,e,i,1)}static rgbaToHSLA(t,e,i,r){t/=255,e/=255,i/=255;const s=Math.max(t,e,i),n=Math.min(t,e,i);let o,a,h=(s+n)/2;if(s===n)o=a=0;else{const r=s-n;switch(a=h>.5?r/(2-s-n):r/(s+n),s){case t:o=(e-i)/r+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32((~~e-1)*this.width+(~~t-1),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const i=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(i,i+4)}setPixelAt(t,e,i){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,i),this}__set_pixel__(t,e,i){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),i,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let i=1;i<=this.height;i++)for(let r=1;r<=this.width;r++)this.__view__.setUint32(e,t(r,i),!1),e+=4}return this}clone(){const t=l.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__scale__(t,e);return this.__apply__(i)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__resize__(t,e,i);return this.__apply__(r)}__resize__(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let r;if(i!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return r=this.__resize_nearest_neighbor__(t,e),r}__resize_nearest_neighbor__(t,e){const i=new this.constructor(t,e);for(let r=0;rthis.width&&(i=this.width),r>this.height&&(r=this.height),this.__apply__(this.__crop__(t,e,i,r))}__crop__(t,e,i,r){t=~~t,e=~~e;const s=new this.constructor(i,r);for(let n=0;nthis.width||o>this.height)continue;const a=s(r,n);this.__set_pixel__(i,o,a)}return this}__fast_box__(t,e,i,r,s){t<0&&(i+=t,t=1),e<0&&(r+=e,e=1);const n=Math.max(Math.min(t+i,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const a=4*(n+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+r,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,i,r){const s=i**2;for(let n=Math.max(1,e-i);n<=Math.min(e+i,this.height);n++)for(let o=Math.max(1,t-i);o<=Math.min(t+i,this.width);o++)(o-t)**2+(n-e)**2i?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/i*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,i){for(let r=i;r{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,n,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((i,r)=>{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,t*(e?1:n),o,a)}))}composite(t,e=0,i=0){e=~~e,i=~~i;for(let r=0;r=this.height)break;for(let i=0;i=this.width)break;const o=4*(n+s*this.width),a=t.__view__.getUint32(4*(i+r*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,l.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const i=255&t,r=i+1,s=256-i;return(255&r*(t>>>24)+s*(e>>>24)>>8)<<24|(255&r*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&r*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(i,255&e)}invert(){for(const[t,e,i]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-i&4294967040|255&i);return this}invertValue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,s,1-n,o))}return this}invertSaturation(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,1-s,n,o))}return this}invertHue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(1-r,s,n,o))}return this}hueShift(t){for(const[e,i,r]of this.iterateWithColors()){const[s,n,o,a]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(e,i,l.hslaToColor(s+t/360,n,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let i=0;it/e)),255)}dominantColor(t=!0,e=!0,i=15){const r=new Array(262143);for(let s=0;s~~(63*t)));if(t&&h63-i)continue;const _=o<<12|a<<6|h;r[_]=(r[_]||0)+1}let s=-1,n=0;if(r.forEach(((t,e)=>{t>>12&63,a=n>>>6&63,h=63&n;return l.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const i=Math.PI*(t/180),r=Math.sin(i),s=Math.cos(i),n=e?Math.abs(this.width*r)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*r):this.height,a=l.new(n,o),h=n/2-.5,_=o/2-.5,c=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=c-r*(u-_),i=f+s*(u-_);do{const n=e+s*(t-h),o=i+r*(t-h);l.__interpolate__(this,a,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),i=e.map((t=>parseFloat(t[0]))),r=e.map((t=>t[1]));if(0===i.length)throw new RangeError("Invalid gradient point count");if(1===i.length)return()=>r[0];if(2===i.length){const t=this.__gradient__(r[0],r[1]);return e=>e<=i[0]?r[0]:e>=i[1]?r[1]:t((e-i[0])/(i[1]-i[0]))}const s=Math.min(...i),n=Math.max(...i);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}return this}static __gradient__(t,e){const i=t>>>24,r=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-i,a=(e>>16&255)-r,h=(e>>8&255)-s,l=(255&e)-n;return t=>(255&i+t*o)<<24|(255&r+t*a)<<16|(255&s+t*h)<<8|255&n+t*l}async encode(t=1){return await r.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),2303741511===i.getUint32(0,!1)){const{width:i,height:s,pixels:n}=await r.decode(t);e=new this(i,s),e.bitmap.set(n)}else if(i.getUint32(0,!1)>>>8==16767231){await o.init();const i=o.decode(t),r=i.width,s=i.height,n=i.format;e=new this(r,s);const a=i.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(i!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const r=n.rasterize(t,i,e),s=new this(r.width,r.height);return s.bitmap.set(r.buffer),s}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,i,r=4294967295,n=1/0,o=this.WRAP_STYLE_WORD){await s.init(),t=new s.Font(e,t);const[a,h,_,c]=l.colorToRGBA(r),f=new s.Layout;f.reset({wrap_style:o===this.WRAP_STYLE_WORD?"word":"letter",max_width:1/0===n?null:n}),f.append(t,i,{scale:e});const u=f.rasterize(a,h,_),w=new this(u.width,u.height);return w.bitmap.set(u.buffer),t.free(),f.free(),w.opacity(c/255)}}class _ extends l{constructor(t,e,i=100){if(isNaN(i)||i<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=i}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof l))throw new TypeError("Invalid image passed");const i=new _(t.width,t.height,e);return i.bitmap.set(t.bitmap),i}}class c extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){await h.init();const e=new h.Encoder(this.width,this.height,this.loopCount);for(const i of this){if(!(i instanceof _))throw new Error("GIF contains invalid frames");e.add(~~(i.duration/10),i.width,i.height,i.bitmap,t)}return e.u8()}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),i.getUint32(0,!1)>>>8!=4671814)throw new Error("Unsupported image type");{const i=new h.Decoder(t),r=[];for(const t of i.frames()){const e=new _(t.width,t.height,t.delay);e.bitmap.set(t.buffer),r.push(e)}e=new c(r)}return e}}t.exports={Image:l,GIF:c,Frame:_}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let i=0;for(const r of t)e.set(r,i),i+=r.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let i=0,r=4294967295;for(;i>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8;for(;i>>8;return(4294967295^r)>>>0}},347:(t,e,i)=>{const r=i(883),s=i(354),{init:n,compress:o,decompress:a}=i(423),h=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),c=r(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:i,channels:s,depth:a=8,level:w=0}){let g=0,d=0;const p=e*s,m=new Uint8Array(i+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,i,r,s){let n=0;if(0===i){for(;n{const{version:r}=i(306);let s,n=null;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}const a="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),h="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const i=o.alloc(e.length);if(o.u8(i,e.length).set(e),this.ptr=s.font_new(i,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const i=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),r=JSON.parse(h(o.u8(s.font_metrics_buffer(i),o.length())));return s.font_metrics_free(i),r}rasterize(t,e=this.scale){const i=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),r={buffer:o.u8(s.font_rasterize_buffer(i),o.length()).slice(),metrics:JSON.parse(h(o.u8(s.font_rasterize_metrics(i),o.length())))};return s.font_rasterize_free(i),r}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=a(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,i){e=a(e);const r=i||{};n&&this.refs.push(t);const h=o.alloc(e.length);o.u8(h,e.length).set(e);const l="r"in r||"g"in r||"b"in r;s.layout_append(this.ptr,t.ptr,h,e.length,null==r.scale?t.scale:r.scale,l,r.r,r.g,r.b)}rasterize(t,e,i){const r=s.layout_rasterize(this.ptr,t,e,i),n={width:s.layout_rasterize_width(r),height:s.layout_rasterize_height(r),buffer:o.u8(s.layout_rasterize_buffer(r),o.length()).slice()};return s.layout_rasterize_free(r),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},667:(t,e,i)=>{const{version:r}=i(306);let s;const n=new Map;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={Encoder:class{constructor(t,e,i=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,i)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const i of this.slices)e.set(i,t),t+=i.length;return e}add(t,e,i,r,n){const a=o.alloc(r.length);o.u8(a,r.length).set(r),s.encoder_add(this.ptr,a,r.length,e,i,t,n)}},Decoder:class{constructor(t,e=0){const i=o.alloc(t.length);if(o.u8(i,t.length).set(t),this.ptr=s.decoder_new(i,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t;this.free()}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:o.u8(s.decoder_frame_buffer(t),o.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e,{env:{push_to_stream(t,e){n.get(t).cb(o.u8(e,o.length()).slice())}}});s=i.exports}}},327:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={encode:function(t,e,i,r){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,i,r),n.length())},decode:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.decode(r,t.length,e,i);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},876:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={rasterize:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.rasterize(r,t.length,e,i);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},76:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const i=s.decode(e,t.length);if(0===i)throw new Error("tiff: failed to decode");const r={width:s.decode_width(i),height:s.decode_height(i),buffer:n.u8(s.decode_buffer(i),n.length()).slice()};return s.decode_free(i),r},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},423:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={compress:function(t,e=3){const i=n.alloc(t.length);return n.u8(i,t.length).set(t),n.copy_and_free(s.compress(i,t.length,e),n.length())},decompress:function(t,e=0){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const r=s.decompress(i,t.length,e);if(0===r)throw new Error("zlib: failed to decompress");return n.copy_and_free(r,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}}},e={},function i(r){var s=e[r];if(void 0!==s)return s.exports;var n=e[r]={exports:{}};return t[r](n,n.exports,i),n.exports}(655);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,i)=>{const r=i(347),s=i(723),n=i(876),o=i(327),a=i(76),h=i(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let i=1;i<=this.width;i++)yield[i,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,i,r){return((255&t)<<24|(255&e)<<16|(255&i)<<8|255&r)>>>0}static rgbToColor(t,e,i){return l.rgbaToColor(t,e,i,255)}static hslaToColor(t,e,i,r){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),i=Math.min(1,Math.max(0,i)),r=Math.min(1,Math.max(0,r)),0===e)s=n=o=i;else{const r=(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),a=i<.5?i*(1+e):i+e-i*e,h=2*i-a;s=r(h,a,t+1/3),n=r(h,a,t),o=r(h,a,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*r)}static hslToColor(t,e,i){return l.hslaToColor(t,e,i,1)}static rgbaToHSLA(t,e,i,r){t/=255,e/=255,i/=255;const s=Math.max(t,e,i),n=Math.min(t,e,i);let o,a,h=(s+n)/2;if(s===n)o=a=0;else{const r=s-n;switch(a=h>.5?r/(2-s-n):r/(s+n),s){case t:o=(e-i)/r+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const i=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(i,i+4)}setPixelAt(t,e,i){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,i),this}__set_pixel__(t,e,i){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),i,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let i=1;i<=this.height;i++)for(let r=1;r<=this.width;r++)this.__view__.setUint32(e,t(r,i),!1),e+=4}return this}clone(){const t=l.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__scale__(t,e);return this.__apply__(i)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__resize__(t,e,i);return this.__apply__(r)}__resize__(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let r;if(i!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return r=this.__resize_nearest_neighbor__(t,e),r}__resize_nearest_neighbor__(t,e){const i=new this.constructor(t,e);for(let r=0;rthis.width&&(i=this.width),r>this.height&&(r=this.height),this.__apply__(this.__crop__(t,e,i,r))}__crop__(t,e,i,r){t=~~t,e=~~e;const s=new this.constructor(i,r);for(let n=0;nthis.width||o>this.height)continue;const a=s(r,n);this.__set_pixel__(i,o,a)}return this}__fast_box__(t,e,i,r,s){t<0&&(i+=t,t=1),e<0&&(r+=e,e=1);const n=Math.max(Math.min(t+i,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const a=4*(n+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+r,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,i,r){const s=i**2;for(let n=Math.max(1,e-i);n<=Math.min(e+i,this.height);n++)for(let o=Math.max(1,t-i);o<=Math.min(t+i,this.width);o++)(o-t)**2+(n-e)**2i?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/i*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,i){for(let r=i;r{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,n,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((i,r)=>{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,t*(e?1:n),o,a)}))}composite(t,e=0,i=0){e=~~e,i=~~i;for(let r=0;r=this.height)break;for(let i=0;i=this.width)break;const o=4*(n+s*this.width),a=t.__view__.getUint32(4*(i+r*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,l.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const i=255&t,r=i+1,s=256-i;return(255&r*(t>>>24)+s*(e>>>24)>>8)<<24|(255&r*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&r*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(i,255&e)}invert(){for(const[t,e,i]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-i&4294967040|255&i);return this}invertValue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,s,1-n,o))}return this}invertSaturation(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,1-s,n,o))}return this}invertHue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(1-r,s,n,o))}return this}hueShift(t){for(const[e,i,r]of this.iterateWithColors()){const[s,n,o,a]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(e,i,l.hslaToColor(s+t/360,n,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let i=0;it/e)),255)}dominantColor(t=!0,e=!0,i=15){const r=new Array(262143);for(let s=0;s~~(63*t)));if(t&&h63-i)continue;const _=o<<12|a<<6|h;r[_]=(r[_]||0)+1}let s=-1,n=0;if(r.forEach(((t,e)=>{t>>12&63,a=n>>>6&63,h=63&n;return l.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const i=Math.PI*(t/180),r=Math.sin(i),s=Math.cos(i),n=e?Math.abs(this.width*r)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*r):this.height,a=l.new(n,o),h=n/2-.5,_=o/2-.5,c=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=c-r*(u-_),i=f+s*(u-_);do{const n=e+s*(t-h),o=i+r*(t-h);l.__interpolate__(this,a,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),i=e.map((t=>parseFloat(t[0]))),r=e.map((t=>t[1]));if(0===i.length)throw new RangeError("Invalid gradient point count");if(1===i.length)return()=>r[0];if(2===i.length){const t=this.__gradient__(r[0],r[1]);return e=>e<=i[0]?r[0]:e>=i[1]?r[1]:t((e-i[0])/(i[1]-i[0]))}const s=Math.min(...i),n=Math.max(...i);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}return this}static __gradient__(t,e){const i=t>>>24,r=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-i,a=(e>>16&255)-r,h=(e>>8&255)-s,l=(255&e)-n;return t=>(255&i+t*o)<<24|(255&r+t*a)<<16|(255&s+t*h)<<8|255&n+t*l}async encode(t=1){return await r.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),2303741511===i.getUint32(0,!1)){const{width:i,height:s,pixels:n}=await r.decode(t);e=new this(i,s),e.bitmap.set(n)}else if(i.getUint32(0,!1)>>>8==16767231){await o.init();const i=o.decode(t),r=i.width,s=i.height,n=i.format;e=new this(r,s);const a=i.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(i!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const r=n.rasterize(t,i,e),s=new this(r.width,r.height);return s.bitmap.set(r.buffer),s}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,i,r=4294967295,n=1/0,o=this.WRAP_STYLE_WORD){await s.init(),t=new s.Font(e,t);const[a,h,_,c]=l.colorToRGBA(r),f=new s.Layout;f.reset({wrap_style:o===this.WRAP_STYLE_WORD?"word":"letter",max_width:1/0===n?null:n}),f.append(t,i,{scale:e});const u=f.rasterize(a,h,_),w=new this(u.width,u.height);return w.bitmap.set(u.buffer),t.free(),f.free(),w.opacity(c/255)}}class _ extends l{constructor(t,e,i=100){if(isNaN(i)||i<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=i}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof l))throw new TypeError("Invalid image passed");const i=new _(t.width,t.height,e);return i.bitmap.set(t.bitmap),i}}class c extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){await h.init();const e=new h.Encoder(this.width,this.height,this.loopCount);for(const i of this){if(!(i instanceof _))throw new Error("GIF contains invalid frames");e.add(~~(i.duration/10),i.width,i.height,i.bitmap,t)}return e.u8()}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),i.getUint32(0,!1)>>>8!=4671814)throw new Error("Unsupported image type");{const i=new h.Decoder(t),r=[];for(const t of i.frames()){const e=new _(t.width,t.height,t.delay);e.bitmap.set(t.buffer),r.push(e)}e=new c(r)}return e}}t.exports={Image:l,GIF:c,Frame:_}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.19","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let i=0;for(const r of t)e.set(r,i),i+=r.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let i=0,r=4294967295;for(;i>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8;for(;i>>8;return(4294967295^r)>>>0}},347:(t,e,i)=>{const r=i(883),s=i(354),{init:n,compress:o,decompress:a}=i(423),h=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),c=r(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:i,channels:s,depth:a=8,level:w=0}){let g=0,d=0;const p=e*s,m=new Uint8Array(i+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,i,r,s){let n=0;if(0===i){for(;n{const{version:r}=i(306);let s,n=null;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}const a="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),h="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const i=o.alloc(e.length);if(o.u8(i,e.length).set(e),this.ptr=s.font_new(i,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const i=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),r=JSON.parse(h(o.u8(s.font_metrics_buffer(i),o.length())));return s.font_metrics_free(i),r}rasterize(t,e=this.scale){const i=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),r={buffer:o.u8(s.font_rasterize_buffer(i),o.length()).slice(),metrics:JSON.parse(h(o.u8(s.font_rasterize_metrics(i),o.length())))};return s.font_rasterize_free(i),r}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=a(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,i){e=a(e);const r=i||{};n&&this.refs.push(t);const h=o.alloc(e.length);o.u8(h,e.length).set(e);const l="r"in r||"g"in r||"b"in r;s.layout_append(this.ptr,t.ptr,h,e.length,null==r.scale?t.scale:r.scale,l,r.r,r.g,r.b)}rasterize(t,e,i){const r=s.layout_rasterize(this.ptr,t,e,i),n={width:s.layout_rasterize_width(r),height:s.layout_rasterize_height(r),buffer:o.u8(s.layout_rasterize_buffer(r),o.length()).slice()};return s.layout_rasterize_free(r),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},667:(t,e,i)=>{const{version:r}=i(306);let s;const n=new Map;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={Encoder:class{constructor(t,e,i=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,i)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const i of this.slices)e.set(i,t),t+=i.length;return e}add(t,e,i,r,n){const a=o.alloc(r.length);o.u8(a,r.length).set(r),s.encoder_add(this.ptr,a,r.length,e,i,t,n)}},Decoder:class{constructor(t,e=0){const i=o.alloc(t.length);if(o.u8(i,t.length).set(t),this.ptr=s.decoder_new(i,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t;this.free()}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:o.u8(s.decoder_frame_buffer(t),o.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e,{env:{push_to_stream(t,e){n.get(t).cb(o.u8(e,o.length()).slice())}}});s=i.exports}}},327:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={encode:function(t,e,i,r){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,i,r),n.length())},decode:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.decode(r,t.length,e,i);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},876:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={rasterize:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.rasterize(r,t.length,e,i);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},76:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const i=s.decode(e,t.length);if(0===i)throw new Error("tiff: failed to decode");const r={width:s.decode_width(i),height:s.decode_height(i),buffer:n.u8(s.decode_buffer(i),n.length()).slice()};return s.decode_free(i),r},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},423:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={compress:function(t,e=3){const i=n.alloc(t.length);return n.u8(i,t.length).set(t),n.copy_and_free(s.compress(i,t.length,e),n.length())},decompress:function(t,e=0){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const r=s.decompress(i,t.length,e);if(0===r)throw new Error("zlib: failed to decompress");return n.copy_and_free(r,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}}},e={},function i(r){var s=e[r];if(void 0!==s)return s.exports;var n=e[r]={exports:{}};return t[r](n,n.exports,i),n.exports}(655);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index a5c507a..750ad8a 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","framebuffer","pixelType","format","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","Font","layout","Layout","reset","wrap_style","max_width","append","free","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","decoder","Decoder","frameData","delay","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","wasm","registry","mem","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","options","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","instantiate","streams","Map","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32((~~y - 1) * this.width + (~~x - 1), false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new this(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new this(framebuffer.width, framebuffer.height);\n \n image.bitmap.set(framebuffer.buffer);\n \n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layout = new fontlib.Layout();\n\n layout.reset({\n wrap_style: wrapStyle === this.WRAP_STYLE_WORD ? 'word' : 'letter',\n max_width: Infinity === wrapWidth ? null : wrapWidth,\n });\n\n layout.append(font, text, { scale });\n const framebuffer = layout.rasterize(r, g, b);\n const image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n font.free();\n layout.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded GIF\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if ((view.getUint32(0, false) >>> 8) === 0x474946) { // GIF\n const decoder = new giflib.Decoder(data);\n const frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n \n wasm = instance.exports;\n },\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(delay, width, height, buffer, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, width, height, delay, quality);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n\n this.free();\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n }\n }\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = await WebAssembly.instantiate(module);\n\n\t\twasm = instance.exports;\n\t}\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","framebuffer","pixelType","format","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","Font","layout","Layout","reset","wrap_style","max_width","append","free","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","decoder","Decoder","frameData","delay","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","wasm","registry","mem","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","options","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","instantiate","streams","Map","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new this(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new this(framebuffer.width, framebuffer.height);\n \n image.bitmap.set(framebuffer.buffer);\n \n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layout = new fontlib.Layout();\n\n layout.reset({\n wrap_style: wrapStyle === this.WRAP_STYLE_WORD ? 'word' : 'letter',\n max_width: Infinity === wrapWidth ? null : wrapWidth,\n });\n\n layout.append(font, text, { scale });\n const framebuffer = layout.rasterize(r, g, b);\n const image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n font.free();\n layout.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded GIF\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if ((view.getUint32(0, false) >>> 8) === 0x474946) { // GIF\n const decoder = new giflib.Decoder(data);\n const frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n \n wasm = instance.exports;\n },\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(delay, width, height, buffer, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, width, height, delay, quality);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n\n this.free();\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n }\n }\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = await WebAssembly.instantiate(module);\n\n\t\twasm = instance.exports;\n\t}\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file From 68c170cba49fa6c0674012a59a8a83ca0286e9d9 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sat, 27 Mar 2021 20:24:24 +0100 Subject: [PATCH 031/120] fix gif decoding (cherry picked from commit 5e7c88dea343d0c24cad4dc18a4e7fb9a7220492) --- ImageScript.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ImageScript.js b/ImageScript.js index ccb51a1..a81e294 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1382,6 +1382,8 @@ class GIF extends Array { view = new DataView(data.buffer, data.byteOffset, data.byteLength); } + await giflib.init(); + if ((view.getUint32(0, false) >>> 8) === 0x474946) { // GIF const decoder = new giflib.Decoder(data); const frames = []; From a95f12207aa7a2488fcbc57559f1fc948a32d7c6 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sat, 27 Mar 2021 20:24:41 +0100 Subject: [PATCH 032/120] 1.1.20 (cherry picked from commit e7f619122cecfc0124f9a3b565b8f0c10f279a4a) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b0c803b..104ec3c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "imagescript", - "version": "1.1.19", + "version": "1.1.20", "description": "zero-dependency javascript image manipulation", "main": "ImageScript.js", "type": "commonjs", From 6b9ed60df5aeea1ba9e144205252e191e95b3a66 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 27 Mar 2021 19:26:08 +0000 Subject: [PATCH 033/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index 6b2f0de..7b515c5 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,i)=>{const r=i(347),s=i(723),n=i(876),o=i(327),a=i(76),h=i(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let i=1;i<=this.width;i++)yield[i,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,i,r){return((255&t)<<24|(255&e)<<16|(255&i)<<8|255&r)>>>0}static rgbToColor(t,e,i){return l.rgbaToColor(t,e,i,255)}static hslaToColor(t,e,i,r){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),i=Math.min(1,Math.max(0,i)),r=Math.min(1,Math.max(0,r)),0===e)s=n=o=i;else{const r=(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),a=i<.5?i*(1+e):i+e-i*e,h=2*i-a;s=r(h,a,t+1/3),n=r(h,a,t),o=r(h,a,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*r)}static hslToColor(t,e,i){return l.hslaToColor(t,e,i,1)}static rgbaToHSLA(t,e,i,r){t/=255,e/=255,i/=255;const s=Math.max(t,e,i),n=Math.min(t,e,i);let o,a,h=(s+n)/2;if(s===n)o=a=0;else{const r=s-n;switch(a=h>.5?r/(2-s-n):r/(s+n),s){case t:o=(e-i)/r+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const i=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(i,i+4)}setPixelAt(t,e,i){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,i),this}__set_pixel__(t,e,i){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),i,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let i=1;i<=this.height;i++)for(let r=1;r<=this.width;r++)this.__view__.setUint32(e,t(r,i),!1),e+=4}return this}clone(){const t=l.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__scale__(t,e);return this.__apply__(i)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__resize__(t,e,i);return this.__apply__(r)}__resize__(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let r;if(i!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return r=this.__resize_nearest_neighbor__(t,e),r}__resize_nearest_neighbor__(t,e){const i=new this.constructor(t,e);for(let r=0;rthis.width&&(i=this.width),r>this.height&&(r=this.height),this.__apply__(this.__crop__(t,e,i,r))}__crop__(t,e,i,r){t=~~t,e=~~e;const s=new this.constructor(i,r);for(let n=0;nthis.width||o>this.height)continue;const a=s(r,n);this.__set_pixel__(i,o,a)}return this}__fast_box__(t,e,i,r,s){t<0&&(i+=t,t=1),e<0&&(r+=e,e=1);const n=Math.max(Math.min(t+i,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const a=4*(n+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+r,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,i,r){const s=i**2;for(let n=Math.max(1,e-i);n<=Math.min(e+i,this.height);n++)for(let o=Math.max(1,t-i);o<=Math.min(t+i,this.width);o++)(o-t)**2+(n-e)**2i?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/i*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,i){for(let r=i;r{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,n,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((i,r)=>{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,t*(e?1:n),o,a)}))}composite(t,e=0,i=0){e=~~e,i=~~i;for(let r=0;r=this.height)break;for(let i=0;i=this.width)break;const o=4*(n+s*this.width),a=t.__view__.getUint32(4*(i+r*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,l.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const i=255&t,r=i+1,s=256-i;return(255&r*(t>>>24)+s*(e>>>24)>>8)<<24|(255&r*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&r*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(i,255&e)}invert(){for(const[t,e,i]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-i&4294967040|255&i);return this}invertValue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,s,1-n,o))}return this}invertSaturation(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,1-s,n,o))}return this}invertHue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(1-r,s,n,o))}return this}hueShift(t){for(const[e,i,r]of this.iterateWithColors()){const[s,n,o,a]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(e,i,l.hslaToColor(s+t/360,n,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let i=0;it/e)),255)}dominantColor(t=!0,e=!0,i=15){const r=new Array(262143);for(let s=0;s~~(63*t)));if(t&&h63-i)continue;const _=o<<12|a<<6|h;r[_]=(r[_]||0)+1}let s=-1,n=0;if(r.forEach(((t,e)=>{t>>12&63,a=n>>>6&63,h=63&n;return l.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const i=Math.PI*(t/180),r=Math.sin(i),s=Math.cos(i),n=e?Math.abs(this.width*r)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*r):this.height,a=l.new(n,o),h=n/2-.5,_=o/2-.5,c=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=c-r*(u-_),i=f+s*(u-_);do{const n=e+s*(t-h),o=i+r*(t-h);l.__interpolate__(this,a,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),i=e.map((t=>parseFloat(t[0]))),r=e.map((t=>t[1]));if(0===i.length)throw new RangeError("Invalid gradient point count");if(1===i.length)return()=>r[0];if(2===i.length){const t=this.__gradient__(r[0],r[1]);return e=>e<=i[0]?r[0]:e>=i[1]?r[1]:t((e-i[0])/(i[1]-i[0]))}const s=Math.min(...i),n=Math.max(...i);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}return this}static __gradient__(t,e){const i=t>>>24,r=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-i,a=(e>>16&255)-r,h=(e>>8&255)-s,l=(255&e)-n;return t=>(255&i+t*o)<<24|(255&r+t*a)<<16|(255&s+t*h)<<8|255&n+t*l}async encode(t=1){return await r.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),2303741511===i.getUint32(0,!1)){const{width:i,height:s,pixels:n}=await r.decode(t);e=new this(i,s),e.bitmap.set(n)}else if(i.getUint32(0,!1)>>>8==16767231){await o.init();const i=o.decode(t),r=i.width,s=i.height,n=i.format;e=new this(r,s);const a=i.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(i!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const r=n.rasterize(t,i,e),s=new this(r.width,r.height);return s.bitmap.set(r.buffer),s}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,i,r=4294967295,n=1/0,o=this.WRAP_STYLE_WORD){await s.init(),t=new s.Font(e,t);const[a,h,_,c]=l.colorToRGBA(r),f=new s.Layout;f.reset({wrap_style:o===this.WRAP_STYLE_WORD?"word":"letter",max_width:1/0===n?null:n}),f.append(t,i,{scale:e});const u=f.rasterize(a,h,_),w=new this(u.width,u.height);return w.bitmap.set(u.buffer),t.free(),f.free(),w.opacity(c/255)}}class _ extends l{constructor(t,e,i=100){if(isNaN(i)||i<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=i}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof l))throw new TypeError("Invalid image passed");const i=new _(t.width,t.height,e);return i.bitmap.set(t.bitmap),i}}class c extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){await h.init();const e=new h.Encoder(this.width,this.height,this.loopCount);for(const i of this){if(!(i instanceof _))throw new Error("GIF contains invalid frames");e.add(~~(i.duration/10),i.width,i.height,i.bitmap,t)}return e.u8()}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),i.getUint32(0,!1)>>>8!=4671814)throw new Error("Unsupported image type");{const i=new h.Decoder(t),r=[];for(const t of i.frames()){const e=new _(t.width,t.height,t.delay);e.bitmap.set(t.buffer),r.push(e)}e=new c(r)}return e}}t.exports={Image:l,GIF:c,Frame:_}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.19","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let i=0;for(const r of t)e.set(r,i),i+=r.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let i=0,r=4294967295;for(;i>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8;for(;i>>8;return(4294967295^r)>>>0}},347:(t,e,i)=>{const r=i(883),s=i(354),{init:n,compress:o,decompress:a}=i(423),h=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),c=r(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:i,channels:s,depth:a=8,level:w=0}){let g=0,d=0;const p=e*s,m=new Uint8Array(i+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,i,r,s){let n=0;if(0===i){for(;n{const{version:r}=i(306);let s,n=null;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}const a="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),h="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const i=o.alloc(e.length);if(o.u8(i,e.length).set(e),this.ptr=s.font_new(i,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const i=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),r=JSON.parse(h(o.u8(s.font_metrics_buffer(i),o.length())));return s.font_metrics_free(i),r}rasterize(t,e=this.scale){const i=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),r={buffer:o.u8(s.font_rasterize_buffer(i),o.length()).slice(),metrics:JSON.parse(h(o.u8(s.font_rasterize_metrics(i),o.length())))};return s.font_rasterize_free(i),r}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=a(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,i){e=a(e);const r=i||{};n&&this.refs.push(t);const h=o.alloc(e.length);o.u8(h,e.length).set(e);const l="r"in r||"g"in r||"b"in r;s.layout_append(this.ptr,t.ptr,h,e.length,null==r.scale?t.scale:r.scale,l,r.r,r.g,r.b)}rasterize(t,e,i){const r=s.layout_rasterize(this.ptr,t,e,i),n={width:s.layout_rasterize_width(r),height:s.layout_rasterize_height(r),buffer:o.u8(s.layout_rasterize_buffer(r),o.length()).slice()};return s.layout_rasterize_free(r),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},667:(t,e,i)=>{const{version:r}=i(306);let s;const n=new Map;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={Encoder:class{constructor(t,e,i=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,i)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const i of this.slices)e.set(i,t),t+=i.length;return e}add(t,e,i,r,n){const a=o.alloc(r.length);o.u8(a,r.length).set(r),s.encoder_add(this.ptr,a,r.length,e,i,t,n)}},Decoder:class{constructor(t,e=0){const i=o.alloc(t.length);if(o.u8(i,t.length).set(t),this.ptr=s.decoder_new(i,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t;this.free()}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:o.u8(s.decoder_frame_buffer(t),o.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e,{env:{push_to_stream(t,e){n.get(t).cb(o.u8(e,o.length()).slice())}}});s=i.exports}}},327:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={encode:function(t,e,i,r){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,i,r),n.length())},decode:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.decode(r,t.length,e,i);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},876:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={rasterize:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.rasterize(r,t.length,e,i);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},76:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const i=s.decode(e,t.length);if(0===i)throw new Error("tiff: failed to decode");const r={width:s.decode_width(i),height:s.decode_height(i),buffer:n.u8(s.decode_buffer(i),n.length()).slice()};return s.decode_free(i),r},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},423:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={compress:function(t,e=3){const i=n.alloc(t.length);return n.u8(i,t.length).set(t),n.copy_and_free(s.compress(i,t.length,e),n.length())},decompress:function(t,e=0){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const r=s.decompress(i,t.length,e);if(0===r)throw new Error("zlib: failed to decompress");return n.copy_and_free(r,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}}},e={},function i(r){var s=e[r];if(void 0!==s)return s.exports;var n=e[r]={exports:{}};return t[r](n,n.exports,i),n.exports}(655);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,i)=>{const r=i(347),s=i(723),n=i(876),o=i(327),a=i(76),h=i(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let i=1;i<=this.width;i++)yield[i,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,i,r){return((255&t)<<24|(255&e)<<16|(255&i)<<8|255&r)>>>0}static rgbToColor(t,e,i){return l.rgbaToColor(t,e,i,255)}static hslaToColor(t,e,i,r){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),i=Math.min(1,Math.max(0,i)),r=Math.min(1,Math.max(0,r)),0===e)s=n=o=i;else{const r=(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),a=i<.5?i*(1+e):i+e-i*e,h=2*i-a;s=r(h,a,t+1/3),n=r(h,a,t),o=r(h,a,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*r)}static hslToColor(t,e,i){return l.hslaToColor(t,e,i,1)}static rgbaToHSLA(t,e,i,r){t/=255,e/=255,i/=255;const s=Math.max(t,e,i),n=Math.min(t,e,i);let o,a,h=(s+n)/2;if(s===n)o=a=0;else{const r=s-n;switch(a=h>.5?r/(2-s-n):r/(s+n),s){case t:o=(e-i)/r+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const i=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(i,i+4)}setPixelAt(t,e,i){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,i),this}__set_pixel__(t,e,i){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),i,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let i=1;i<=this.height;i++)for(let r=1;r<=this.width;r++)this.__view__.setUint32(e,t(r,i),!1),e+=4}return this}clone(){const t=l.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__scale__(t,e);return this.__apply__(i)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__resize__(t,e,i);return this.__apply__(r)}__resize__(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let r;if(i!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return r=this.__resize_nearest_neighbor__(t,e),r}__resize_nearest_neighbor__(t,e){const i=new this.constructor(t,e);for(let r=0;rthis.width&&(i=this.width),r>this.height&&(r=this.height),this.__apply__(this.__crop__(t,e,i,r))}__crop__(t,e,i,r){t=~~t,e=~~e;const s=new this.constructor(i,r);for(let n=0;nthis.width||o>this.height)continue;const a=s(r,n);this.__set_pixel__(i,o,a)}return this}__fast_box__(t,e,i,r,s){t<0&&(i+=t,t=1),e<0&&(r+=e,e=1);const n=Math.max(Math.min(t+i,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const a=4*(n+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+r,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,i,r){const s=i**2;for(let n=Math.max(1,e-i);n<=Math.min(e+i,this.height);n++)for(let o=Math.max(1,t-i);o<=Math.min(t+i,this.width);o++)(o-t)**2+(n-e)**2i?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/i*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,i){for(let r=i;r{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,n,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((i,r)=>{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,t*(e?1:n),o,a)}))}composite(t,e=0,i=0){e=~~e,i=~~i;for(let r=0;r=this.height)break;for(let i=0;i=this.width)break;const o=4*(n+s*this.width),a=t.__view__.getUint32(4*(i+r*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,l.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const i=255&t,r=i+1,s=256-i;return(255&r*(t>>>24)+s*(e>>>24)>>8)<<24|(255&r*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&r*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(i,255&e)}invert(){for(const[t,e,i]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-i&4294967040|255&i);return this}invertValue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,s,1-n,o))}return this}invertSaturation(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,1-s,n,o))}return this}invertHue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(1-r,s,n,o))}return this}hueShift(t){for(const[e,i,r]of this.iterateWithColors()){const[s,n,o,a]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(e,i,l.hslaToColor(s+t/360,n,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let i=0;it/e)),255)}dominantColor(t=!0,e=!0,i=15){const r=new Array(262143);for(let s=0;s~~(63*t)));if(t&&h63-i)continue;const _=o<<12|a<<6|h;r[_]=(r[_]||0)+1}let s=-1,n=0;if(r.forEach(((t,e)=>{t>>12&63,a=n>>>6&63,h=63&n;return l.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const i=Math.PI*(t/180),r=Math.sin(i),s=Math.cos(i),n=e?Math.abs(this.width*r)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*r):this.height,a=l.new(n,o),h=n/2-.5,_=o/2-.5,c=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=c-r*(u-_),i=f+s*(u-_);do{const n=e+s*(t-h),o=i+r*(t-h);l.__interpolate__(this,a,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),i=e.map((t=>parseFloat(t[0]))),r=e.map((t=>t[1]));if(0===i.length)throw new RangeError("Invalid gradient point count");if(1===i.length)return()=>r[0];if(2===i.length){const t=this.__gradient__(r[0],r[1]);return e=>e<=i[0]?r[0]:e>=i[1]?r[1]:t((e-i[0])/(i[1]-i[0]))}const s=Math.min(...i),n=Math.max(...i);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}return this}static __gradient__(t,e){const i=t>>>24,r=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-i,a=(e>>16&255)-r,h=(e>>8&255)-s,l=(255&e)-n;return t=>(255&i+t*o)<<24|(255&r+t*a)<<16|(255&s+t*h)<<8|255&n+t*l}async encode(t=1){return await r.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),2303741511===i.getUint32(0,!1)){const{width:i,height:s,pixels:n}=await r.decode(t);e=new this(i,s),e.bitmap.set(n)}else if(i.getUint32(0,!1)>>>8==16767231){await o.init();const i=o.decode(t),r=i.width,s=i.height,n=i.format;e=new this(r,s);const a=i.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(i!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const r=n.rasterize(t,i,e),s=new this(r.width,r.height);return s.bitmap.set(r.buffer),s}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,i,r=4294967295,n=1/0,o=this.WRAP_STYLE_WORD){await s.init(),t=new s.Font(e,t);const[a,h,_,c]=l.colorToRGBA(r),f=new s.Layout;f.reset({wrap_style:o===this.WRAP_STYLE_WORD?"word":"letter",max_width:1/0===n?null:n}),f.append(t,i,{scale:e});const u=f.rasterize(a,h,_),w=new this(u.width,u.height);return w.bitmap.set(u.buffer),t.free(),f.free(),w.opacity(c/255)}}class _ extends l{constructor(t,e,i=100){if(isNaN(i)||i<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=i}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof l))throw new TypeError("Invalid image passed");const i=new _(t.width,t.height,e);return i.bitmap.set(t.bitmap),i}}class c extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){await h.init();const e=new h.Encoder(this.width,this.height,this.loopCount);for(const i of this){if(!(i instanceof _))throw new Error("GIF contains invalid frames");e.add(~~(i.duration/10),i.width,i.height,i.bitmap,t)}return e.u8()}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),await h.init(),i.getUint32(0,!1)>>>8!=4671814)throw new Error("Unsupported image type");{const i=new h.Decoder(t),r=[];for(const t of i.frames()){const e=new _(t.width,t.height,t.delay);e.bitmap.set(t.buffer),r.push(e)}e=new c(r)}return e}}t.exports={Image:l,GIF:c,Frame:_}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.20","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let i=0;for(const r of t)e.set(r,i),i+=r.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let i=0,r=4294967295;for(;i>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8;for(;i>>8;return(4294967295^r)>>>0}},347:(t,e,i)=>{const r=i(883),s=i(354),{init:n,compress:o,decompress:a}=i(423),h=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),c=r(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:i,channels:s,depth:a=8,level:w=0}){let g=0,d=0;const p=e*s,m=new Uint8Array(i+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,i,r,s){let n=0;if(0===i){for(;n{const{version:r}=i(306);let s,n=null;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}const a="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),h="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const i=o.alloc(e.length);if(o.u8(i,e.length).set(e),this.ptr=s.font_new(i,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const i=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),r=JSON.parse(h(o.u8(s.font_metrics_buffer(i),o.length())));return s.font_metrics_free(i),r}rasterize(t,e=this.scale){const i=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),r={buffer:o.u8(s.font_rasterize_buffer(i),o.length()).slice(),metrics:JSON.parse(h(o.u8(s.font_rasterize_metrics(i),o.length())))};return s.font_rasterize_free(i),r}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=a(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,i){e=a(e);const r=i||{};n&&this.refs.push(t);const h=o.alloc(e.length);o.u8(h,e.length).set(e);const l="r"in r||"g"in r||"b"in r;s.layout_append(this.ptr,t.ptr,h,e.length,null==r.scale?t.scale:r.scale,l,r.r,r.g,r.b)}rasterize(t,e,i){const r=s.layout_rasterize(this.ptr,t,e,i),n={width:s.layout_rasterize_width(r),height:s.layout_rasterize_height(r),buffer:o.u8(s.layout_rasterize_buffer(r),o.length()).slice()};return s.layout_rasterize_free(r),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},667:(t,e,i)=>{const{version:r}=i(306);let s;const n=new Map;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={Encoder:class{constructor(t,e,i=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,i)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const i of this.slices)e.set(i,t),t+=i.length;return e}add(t,e,i,r,n){const a=o.alloc(r.length);o.u8(a,r.length).set(r),s.encoder_add(this.ptr,a,r.length,e,i,t,n)}},Decoder:class{constructor(t,e=0){const i=o.alloc(t.length);if(o.u8(i,t.length).set(t),this.ptr=s.decoder_new(i,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t;this.free()}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:o.u8(s.decoder_frame_buffer(t),o.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e,{env:{push_to_stream(t,e){n.get(t).cb(o.u8(e,o.length()).slice())}}});s=i.exports}}},327:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={encode:function(t,e,i,r){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,i,r),n.length())},decode:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.decode(r,t.length,e,i);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},876:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={rasterize:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.rasterize(r,t.length,e,i);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},76:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const i=s.decode(e,t.length);if(0===i)throw new Error("tiff: failed to decode");const r={width:s.decode_width(i),height:s.decode_height(i),buffer:n.u8(s.decode_buffer(i),n.length()).slice()};return s.decode_free(i),r},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},423:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={compress:function(t,e=3){const i=n.alloc(t.length);return n.u8(i,t.length).set(t),n.copy_and_free(s.compress(i,t.length,e),n.length())},decompress:function(t,e=0){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const r=s.decompress(i,t.length,e);if(0===r)throw new Error("zlib: failed to decompress");return n.copy_and_free(r,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}}},e={},function i(r){var s=e[r];if(void 0!==s)return s.exports;var n=e[r]={exports:{}};return t[r](n,n.exports,i),n.exports}(655);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index 750ad8a..26e473f 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","framebuffer","pixelType","format","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","Font","layout","Layout","reset","wrap_style","max_width","append","free","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","decoder","Decoder","frameData","delay","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","wasm","registry","mem","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","options","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","instantiate","streams","Map","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,IAEzBD,EAAkB,YAAIC,IARxB,CASGK,MAAM,WACT,O,iBCVA,MAAMC,EAAM,EAAQ,KACdC,EAAU,EAAQ,KAClBC,EAAS,EAAQ,KACjBC,EAAU,EAAQ,KAClBC,EAAU,EAAQ,IAClBC,EAAS,EAAQ,KAKvB,MAAMC,EAOF,YAAYC,EAAOC,GAIf,GAFAA,IAAWA,GADXD,IAAUA,GAGE,EACR,MAAM,IAAIE,WAAW,yCACzB,GAAID,EAAS,EACT,MAAM,IAAIC,WAAW,yCAGzBC,KAAKC,UAAYJ,EAEjBG,KAAKE,WAAaJ,EAElBE,KAAKG,WAAa,IAAIC,YAAYP,EAAQC,EAAS,GAEnDE,KAAKK,SAAW,IAAIC,SAASN,KAAKG,YAElCH,KAAKO,QAAU,IAAIC,YAAYR,KAAKG,YAKpCH,KAAKS,OAAS,IAAIC,kBAAkBV,KAAKG,YAO7C,WACI,MAAO,SAASH,KAAKH,SAASG,KAAKF,UAIvC,WAAWD,EAAOC,GACd,OAAO,IAAIE,KAAKH,EAAOC,GAO3B,YACI,OAAOE,KAAKC,UAOhB,aACI,OAAOD,KAAKE,WAQhB,EAAGS,OAAOC,YACN,IAAK,IAAIC,EAAI,EAAGA,GAAKb,KAAKF,OAAQe,IAC9B,IAAK,IAAIC,EAAI,EAAGA,GAAKd,KAAKH,MAAOiB,SACvB,CAACA,EAAGD,GAUtB,qBACI,IAAIE,EAAS,EACb,IAAK,IAAIF,EAAI,EAAGA,GAAKb,KAAKF,OAAQe,IAC9B,IAAK,IAAIC,EAAI,EAAGA,GAAKd,KAAKH,MAAOiB,SACvB,CAACA,EAAGD,EAAGb,KAAKK,SAASW,UAAUD,GAAQ,IAC7CA,GAAU,EAatB,mBAAmBE,EAAGC,EAAGC,EAAGC,GACxB,QAAc,IAAJH,IAAa,IAAY,IAAJC,IAAa,IAAY,IAAJC,IAAa,EAAU,IAAJC,KAAe,EAU1F,kBAAkBH,EAAGC,EAAGC,GACpB,OAAOvB,EAAMyB,YAAYJ,EAAGC,EAAGC,EAAG,KAWtC,mBAAmBG,EAAGC,EAAGC,EAAGJ,GAMxB,IAAIH,EAAGC,EAAGC,EAEV,GAPAG,GAAK,EACLC,EAAIE,KAAKC,IAAI,EAAGD,KAAKE,IAAI,EAAGJ,IAC5BC,EAAIC,KAAKC,IAAI,EAAGD,KAAKE,IAAI,EAAGH,IAC5BJ,EAAIK,KAAKC,IAAI,EAAGD,KAAKE,IAAI,EAAGP,IAIlB,IAANG,EACAN,EAAIC,EAAIC,EAAIK,MACT,CACH,MAAMI,EAAU,CAACC,EAAGC,EAAGC,KACfA,EAAI,IAAGA,GAAK,GACZA,EAAI,IAAGA,GAAK,GACZA,EAAI,EAAI,EAAUF,EAAc,GAATC,EAAID,GAASE,EACpCA,EAAI,GAAcD,EAClBC,EAAI,EAAI,EAAUF,GAAKC,EAAID,IAAM,EAAI,EAAIE,GAAK,EAC3CF,GAGLC,EAAIN,EAAI,GAAMA,GAAK,EAAID,GAAKC,EAAID,EAAIC,EAAID,EACxCM,EAAI,EAAIL,EAAIM,EAElBb,EAAIW,EAAQC,EAAGC,EAAGR,EAAI,EAAI,GAC1BJ,EAAIU,EAAQC,EAAGC,EAAGR,GAClBH,EAAIS,EAAQC,EAAGC,EAAGR,EAAI,EAAI,GAG9B,OAAO1B,EAAMyB,YAAgB,IAAJJ,EAAa,IAAJC,EAAa,IAAJC,EAAa,IAAJC,GAUxD,kBAAkBE,EAAGC,EAAGC,GACpB,OAAO5B,EAAMoC,YAAYV,EAAGC,EAAGC,EAAG,GAWtC,kBAAkBP,EAAGC,EAAGC,EAAGC,GACvBH,GAAK,IACLC,GAAK,IACLC,GAAK,IAEL,MAAMQ,EAAMF,KAAKE,IAAIV,EAAGC,EAAGC,GAAIO,EAAMD,KAAKC,IAAIT,EAAGC,EAAGC,GACpD,IAAIG,EAAGC,EAAGC,GAAKG,EAAMD,GAAO,EAE5B,GAAIC,IAAQD,EACRJ,EAAIC,EAAI,MACL,CACH,MAAMU,EAAIN,EAAMD,EAEhB,OADAH,EAAIC,EAAI,GAAMS,GAAK,EAAIN,EAAMD,GAAOO,GAAKN,EAAMD,GACvCC,GACJ,KAAKV,EACDK,GAAKJ,EAAIC,GAAKc,GAAKf,EAAIC,EAAI,EAAI,GAC/B,MACJ,KAAKD,EACDI,GAAKH,EAAIF,GAAKgB,EAAI,EAClB,MACJ,KAAKd,EACDG,GAAKL,EAAIC,GAAKe,EAAI,EAI1BX,GAAK,EAGT,MAAO,CAACA,EAAGC,EAAGC,EAAGJ,EAAI,KAQzB,mBAAmBc,GACf,MAAO,CAAEA,GAAS,GAAM,IAAOA,GAAS,GAAM,IAAOA,GAAS,EAAK,IAAc,IAARA,GAQ7E,kBAAkBA,GACd,OAAOtC,EAAMuC,YAAYD,GAAOE,MAAM,EAAG,GAS7C,WAAWtB,EAAGD,GAEV,OADAb,KAAKqC,qBAAqBvB,EAAGD,GACtBb,KAAKK,SAASW,UAAiD,MAAnCH,EAAI,GAAKb,KAAKH,SAAWiB,EAAI,KAAS,GAS7E,UAAUA,EAAGD,GACTb,KAAKqC,qBAAqBvB,EAAGD,GAC7B,MAAMyB,EAA6C,MAAnCzB,EAAI,GAAKb,KAAKH,SAAWiB,EAAI,IAC7C,OAAOd,KAAKS,OAAO8B,SAASD,EAAKA,EAAM,GAS3C,WAAWxB,EAAGD,EAAG2B,GAKb,OAJA1B,IAAMA,EACND,IAAMA,EACNb,KAAKqC,qBAAqBvB,EAAGD,GAC7Bb,KAAKyC,cAAc3B,EAAGD,EAAG2B,GAClBxC,KASX,cAAcc,EAAGD,EAAG2B,GAChBxC,KAAKK,SAASqC,UAA6C,IAAjC7B,EAAI,GAAKb,KAAKH,OAASiB,EAAI,IAAS0B,GAAY,GAQ9E,qBAAqB1B,EAAGD,GACpB,GAAI8B,MAAM7B,GAAI,MAAM,IAAI8B,UAAU,gCAAgC9B,MAClE,GAAI6B,MAAM9B,GAAI,MAAM,IAAI+B,UAAU,gCAAgC/B,MAClE,GAAIC,EAAI,EACJ,MAAM,IAAIf,WAAW,GAAGH,EAAMiD,wBAAwB/B,QAC1D,GAAIA,EAAId,KAAKH,MACT,MAAM,IAAIE,WAAW,GAAGH,EAAMiD,wBAAwB/B,aAAad,KAAKH,UAC5E,GAAIgB,EAAI,EACJ,MAAM,IAAId,WAAW,GAAGH,EAAMiD,wBAAwBhC,QAC1D,GAAIA,EAAIb,KAAKF,OACT,MAAM,IAAIC,WAAW,GAAGH,EAAMiD,wBAAwBhC,cAAcb,KAAKF,WAMjF,+BACI,MAAO,8DAeX,KAAKoC,GAED,GAAa,mBADOA,EAEhBlC,KAAKK,SAASqC,UAAU,EAAGR,GAAO,GAClClC,KAAKO,QAAQuC,KAAK9C,KAAKO,QAAQ,QAC5B,CACH,IAAIQ,EAAS,EACb,IAAK,IAAIF,EAAI,EAAGA,GAAKb,KAAKF,OAAQe,IAC9B,IAAK,IAAIC,EAAI,EAAGA,GAAKd,KAAKH,MAAOiB,IAC7Bd,KAAKK,SAASqC,UAAU3B,EAAQmB,EAAMpB,EAAGD,IAAI,GAC7CE,GAAU,EAKtB,OAAOf,KAOX,QACI,MAAM+C,EAAQnD,EAAMoD,IAAIhD,KAAKH,MAAOG,KAAKF,QAEzC,OADAiD,EAAMtC,OAAOwC,IAAIjD,KAAKS,QACfsC,EAOX,qCACI,MAAO,0BAOX,yBACI,OAAQ,EASZ,MAAMG,EAAQC,EAAOvD,EAAMwD,yBACvB,MAAML,EAAQ/C,KAAKqD,UAAUH,EAAQC,GACrC,OAAOnD,KAAKsD,UAAUP,GAG1B,UAAUG,EAAQC,EAAOvD,EAAMwD,yBAC3B,OAAe,IAAXF,EAAqBlD,KAClBA,KAAKuD,WAAWvD,KAAKH,MAAQqD,EAAQlD,KAAKF,OAASoD,EAAQC,GAWtE,OAAOtD,EAAOC,EAAQqD,EAAOvD,EAAMwD,yBAC/B,MAAML,EAAQ/C,KAAKuD,WAAW1D,EAAOC,EAAQqD,GAC7C,OAAOnD,KAAKsD,UAAUP,GAG1B,WAAWlD,EAAOC,EAAQqD,EAAOvD,EAAMwD,yBACnC,GAAIvD,IAAUD,EAAM4D,aAAe1D,IAAWF,EAAM4D,YAAa,MAAM,IAAIC,MAAM,yEAMjF,GALS5D,IAAUD,EAAM4D,YAAa3D,EAAQG,KAAKH,MAAQG,KAAKF,OAASA,EAChEA,IAAWF,EAAM4D,cAAa1D,EAASE,KAAKF,OAASE,KAAKH,MAAQA,GAE3EA,EAAQ4B,KAAKiC,MAAM7D,GACnBC,EAAS2B,KAAKiC,MAAM5D,GAChBD,EAAQ,EACR,MAAM,IAAIE,WAAW,yCACzB,GAAID,EAAS,EACT,MAAM,IAAIC,WAAW,yCAEzB,IAAIgD,EACJ,GAAII,IAASvD,EAAMwD,wBAEd,MAAM,IAAIK,MAAM,uBAErB,OAHIV,EAAQ/C,KAAK2D,4BAA4B9D,EAAOC,GAG7CiD,EAQX,4BAA4BlD,EAAOC,GAC/B,MAAMiD,EAAQ,IAAI/C,KAAK4D,YAAY/D,EAAOC,GAE1C,IAAK,IAAIe,EAAI,EAAGA,EAAIf,EAAQe,IACxB,IAAK,IAAIC,EAAI,EAAGA,EAAIjB,EAAOiB,IAAK,CAC5B,MAAM+C,EAAOpC,KAAKiC,MAAO7C,EAAIb,KAAKF,OAAUA,GACtCgE,EAAOrC,KAAKiC,MAAO5C,EAAId,KAAKH,MAASA,GAErCkE,EAA4B,GAAjBlD,EAAIhB,EAAQiB,GACvBkD,EAAsC,GAA5BH,EAAO7D,KAAKH,MAAQiE,GAEpCf,EAAM1C,SAASqC,UAAUqB,EAAS/D,KAAKK,SAASW,UAAUgD,GAAQ,IAAQ,GAIlF,OAAOjB,EAWX,KAAKjC,EAAGD,EAAGhB,EAAOC,GAId,OAHID,EAAQG,KAAKH,QAAOA,EAAQG,KAAKH,OACjCC,EAASE,KAAKF,SAAQA,EAASE,KAAKF,QAEjCE,KAAKsD,UAAUtD,KAAKiE,SAASnD,EAAGD,EAAGhB,EAAOC,IAWrD,SAASgB,EAAGD,EAAGhB,EAAOC,GAClBgB,IAAMA,EACND,IAAMA,EAEN,MAAMkC,EAAQ,IAAI/C,KAAK4D,YAAY/D,EAAOC,GAE1C,IAAK,IAAIoE,EAAK,EAAGA,EAAKpE,EAAQoE,IAAM,CAChC,MAAM5B,GAAO4B,EAAKrD,GAAKb,KAAKH,MAAQiB,EACpCiC,EAAMxC,QAAQ0C,IAAIjD,KAAKO,QAAQgC,SAASD,EAAKA,EAAMzC,GAAQqE,EAAKrE,GAGpE,OAAOkD,EAYX,QAAQjC,EAAGD,EAAGhB,EAAOC,EAAQoC,GAIzB,GAHApB,GAAK,EACLD,GAAK,EAEgB,mBAAVqB,EAYJ,OAAOlC,KAAKmE,aAAarD,EAAGD,EAAGhB,EAAOC,EAAQoC,GAXjD,IAAK,IAAIgC,EAAK,EAAGA,GAAMpE,EAAQoE,IAC3B,IAAK,IAAIE,EAAK,EAAGA,GAAMvE,EAAOuE,IAAM,CAChC,MAAMC,EAAKD,EAAKtD,EACVwD,EAAKJ,EAAKrD,EAChB,GAAIY,KAAKC,IAAI2C,EAAIC,GAAM,GAAKD,EAAKrE,KAAKH,OAASyE,EAAKtE,KAAKF,OACrD,SAEJ,MAAMyE,EAAKrC,EAAMkC,EAAIF,GACrBlE,KAAKyC,cAAc4B,EAAIC,EAAIC,GAKvC,OAAOvE,KAWX,aAAac,EAAGD,EAAGhB,EAAOC,EAAQoC,GAC1BpB,EAAI,IACJjB,GAASiB,EACTA,EAAI,GAGJD,EAAI,IACJf,GAAUe,EACVA,EAAI,GAGR,MAAM2D,EAAQ/C,KAAKE,IAAIF,KAAKC,IAAIZ,EAAIjB,EAAOG,KAAKH,OAAQ,GACxD,IAAI4E,EAAOD,EACX,KAAO1D,KAAO2D,GACVzE,KAAKK,SAASqC,UAAU,GAAK+B,EAAO5D,EAAIb,KAAKH,OAAQqC,GACzD,MAAMwC,EAAM,GAAKF,EAAQ3D,EAAIb,KAAKH,OAC5B8E,EAAQ,GAAK7D,EAAID,EAAIb,KAAKH,OAEhC,IAAI+E,EAASnD,KAAKE,IAAIF,KAAKC,IAAIb,EAAIf,EAAQE,KAAKF,QAAS,GACzD,KAAOe,IAAM+D,GACT5E,KAAKS,OAAOoE,WAAW,GAAK/D,EAAI8D,EAAS5E,KAAKH,OAAQ8E,EAAOD,GAEjE,OAAO1E,KAWX,WAAWc,EAAGD,EAAGiE,EAAQ5C,GACrB,MAAM6C,EAAaD,GAAU,EAC7B,IAAK,IAAIE,EAAWvD,KAAKE,IAAI,EAAGd,EAAIiE,GAASE,GAAYvD,KAAKC,IAAIb,EAAIiE,EAAQ9E,KAAKF,QAASkF,IACxF,IAAK,IAAIC,EAAWxD,KAAKE,IAAI,EAAGb,EAAIgE,GAASG,GAAYxD,KAAKC,IAAIZ,EAAIgE,EAAQ9E,KAAKH,OAAQoF,KAClFA,EAAWnE,IAAM,GAAKkE,EAAWnE,IAAM,EAAIkE,GAC5C/E,KAAKyC,cAAcwC,EAAUD,EAA2B,mBAAV9C,EAAuBA,EAAM+C,EAAWnE,EAAIgE,EAAQE,EAAWnE,EAAIiE,GAAU5C,GAIvI,OAAOlC,KASX,WAAW2B,GAAM,EAAOuD,EAAa,GACjC,MACMH,GADMtD,KAAKE,EAAM,MAAQ,OAAO3B,KAAKH,MAAOG,KAAKF,QAAU,IACvC,EACpBqF,EAAUnF,KAAKH,MAAQ,EACvBuF,EAAUpF,KAAKF,OAAS,EAE9B,IAAK,MAAOgB,EAAGD,KAAMb,KAAM,CACvB,MAAMqF,GAAsBvE,EAAIqE,IAAY,GAAKtE,EAAIuE,IAAY,EAC3DE,EAA8C,IAAjCzE,EAAI,GAAKb,KAAKH,OAASiB,EAAI,IAAU,EACpDuE,EAAqBN,EACrB/E,KAAKS,OAAO6E,GAAY,EACnBJ,IACLlF,KAAKS,OAAO6E,IAAa7D,KAAKE,IAAI,EAAGF,KAAKC,IAAI,EAAG,EAAK2D,EAAqBN,EAAcG,GAAc,MAG/G,OAAOlF,KASX,QAAQuF,EAASC,GAAW,GACxB,GAAI7C,MAAM4C,IAAYA,EAAU,EAC5B,MAAM,IAAIxF,WAAW,yBAIzB,OAFAC,KAAKyF,sBAAsBF,EAASC,EAAU,GAEvCxF,KASX,IAAI0F,EAAYF,GAAW,GACvB,GAAI7C,MAAM+C,IAAeA,EAAa,EAClC,MAAM,IAAI3F,WAAW,4BAIzB,OAFAC,KAAKyF,sBAAsBC,EAAYF,EAAU,GAE1CxF,KASX,MAAM0F,EAAYF,GAAW,GACzB,GAAI7C,MAAM+C,IAAeA,EAAa,EAClC,MAAM,IAAI3F,WAAW,4BAIzB,OAFAC,KAAKyF,sBAAsBC,EAAYF,EAAU,GAE1CxF,KASX,KAAK0F,EAAYF,GAAW,GACxB,GAAI7C,MAAM+C,IAAeA,EAAa,EAClC,MAAM,IAAI3F,WAAW,4BAIzB,OAFAC,KAAKyF,sBAAsBC,EAAYF,EAAU,GAE1CxF,KASX,sBAAsB2F,EAAOH,EAAUzE,GACnC,IAAK,IAAI6E,EAAI7E,EAAQ6E,EAAI5F,KAAKS,OAAOoF,OAAQD,GAAK,EAC9C5F,KAAKS,OAAOmF,GAAKD,GAASH,EAAW,IAAMxF,KAAKS,OAAOmF,IAS/D,UAAUD,EAAOH,GAAW,GACxB,GAAI7C,MAAMgD,IAAUA,EAAQ,EACxB,MAAM,IAAI5F,WAAW,2BAEzB,OAAOC,KAAK8C,MAAK,CAAChC,EAAGD,KACjB,MAAOS,EAAGC,EAAGC,EAAGJ,GAAKxB,EAAMkG,cAAc9F,KAAK+F,UAAUjF,EAAGD,IAC3D,OAAOjB,EAAMoC,YAAYV,EAAGC,EAAGoE,GAASH,EAAW,EAAIhE,GAAIJ,MAUnE,WAAWuE,EAAOH,GAAW,GACzB,GAAI7C,MAAMgD,IAAUA,EAAQ,EACxB,MAAM,IAAI5F,WAAW,4BAEzB,OAAOC,KAAK8C,MAAK,CAAChC,EAAGD,KACjB,MAAOS,EAAGC,EAAGC,EAAGJ,GAAKxB,EAAMkG,cAAc9F,KAAK+F,UAAUjF,EAAGD,IAC3D,OAAOjB,EAAMoC,YAAYV,EAAGqE,GAASH,EAAW,EAAIjE,GAAIC,EAAGJ,MAWnE,UAAU4E,EAAQlF,EAAI,EAAGD,EAAI,GACzBC,IAAMA,EACND,IAAMA,EAEN,IAAK,IAAIoF,EAAK,EAAGA,EAAKD,EAAOlG,OAAQmG,IAAM,CACvC,IAAIC,EAAWrF,EAAIoF,EACnB,KAAIC,EAAW,GAAf,CACA,GAAIA,GAAYlG,KAAKF,OAAQ,MAE7B,IAAK,IAAIqG,EAAK,EAAGA,EAAKH,EAAOnG,MAAOsG,IAAM,CACtC,IAAIC,EAAWtF,EAAIqF,EACnB,GAAIC,EAAW,EAAG,SAClB,GAAIA,GAAYpG,KAAKH,MAAO,MAE5B,MAAMkB,EAAS,GAAKqF,EAAWF,EAAWlG,KAAKH,OACzCwG,EAAKL,EAAO3F,SAASW,UAAU,GAAKmF,EAAKF,EAAKD,EAAOnG,QAAQ,GAC7DyG,EAAKtG,KAAKK,SAASW,UAAUD,GAAQ,GAEvB,MAAV,IAALsF,GAAqBrG,KAAKK,SAASqC,UAAU3B,EAAQsF,GAAI,GACrC,IAAV,IAALA,GAAqBrG,KAAKK,SAASqC,UAAU3B,EAAQuF,GAAI,GAC9DtG,KAAKK,SAASqC,UAAU3B,EAAQnB,EAAM2G,gBAAgBF,EAAIC,IAAK,KAI5E,OAAOtG,KASX,uBAAuBqG,EAAIC,GACvB,MAAME,EAAU,IAALH,EACLI,EAAQD,EAAK,EACbE,EAAY,IAAMF,EAIxB,OAAc,IAHHC,GAASJ,IAAO,IAAMK,GAAaJ,IAAO,KAAQ,IAGtC,IAAY,IADxBG,GAASJ,GAAM,GAAK,KAAQK,GAAaJ,GAAM,GAAK,MAAU,IAC7B,IAAY,IAF7CG,GAASJ,GAAM,EAAI,KAAQK,GAAaJ,GAAM,EAAI,MAAU,IAEN,EAAgC,IAA1B7E,KAAKE,IAAI6E,EAAS,IAALF,GAOxF,SACI,IAAK,MAAOxF,EAAGD,EAAGqB,KAAUlC,KAAK2G,oBAC7B3G,KAAKyC,cAAc3B,EAAGD,EAAK,WAAaqB,EAAS,WAAuB,IAARA,GAEpE,OAAOlC,KAOX,cACI,IAAK,MAAOc,EAAGD,EAAGqB,KAAUlC,KAAK2G,oBAAqB,CAClD,MAAOrF,EAAGC,EAAGC,EAAGJ,GAAKxB,EAAMkG,cAAclG,EAAMuC,YAAYD,IAC3DlC,KAAKyC,cAAc3B,EAAGD,EAAGjB,EAAMoC,YAAYV,EAAGC,EAAG,EAAIC,EAAGJ,IAG5D,OAAOpB,KAOX,mBACI,IAAK,MAAOc,EAAGD,EAAGqB,KAAUlC,KAAK2G,oBAAqB,CAClD,MAAOrF,EAAGC,EAAGC,EAAGJ,GAAKxB,EAAMkG,cAAclG,EAAMuC,YAAYD,IAC3DlC,KAAKyC,cAAc3B,EAAGD,EAAGjB,EAAMoC,YAAYV,EAAG,EAAIC,EAAGC,EAAGJ,IAG5D,OAAOpB,KAOX,YACI,IAAK,MAAOc,EAAGD,EAAGqB,KAAUlC,KAAK2G,oBAAqB,CAClD,MAAOrF,EAAGC,EAAGC,EAAGJ,GAAKxB,EAAMkG,cAAclG,EAAMuC,YAAYD,IAC3DlC,KAAKyC,cAAc3B,EAAGD,EAAGjB,EAAMoC,YAAY,EAAIV,EAAGC,EAAGC,EAAGJ,IAG5D,OAAOpB,KAOX,SAAS4G,GACL,IAAK,MAAO9F,EAAGD,EAAGqB,KAAUlC,KAAK2G,oBAAqB,CAClD,MAAOrF,EAAGC,EAAGC,EAAGJ,GAAKxB,EAAMkG,cAAclG,EAAMuC,YAAYD,IAC3DlC,KAAKyC,cAAc3B,EAAGD,EAAGjB,EAAMoC,YAAYV,EAAIsF,EAAU,IAAKrF,EAAGC,EAAGJ,IAGxE,OAAOpB,KAOX,eACI,IAAI6G,EAAW,CAAC,EAAG,EAAG,GAClBC,EAAU,EACd,IAAK,IAAIxE,EAAM,EAAGA,EAAMtC,KAAKS,OAAOoF,OAAQvD,GAAO,EAAG,CAClD,MAAMyE,EAAO/G,KAAKS,OAAO8B,SAASD,EAAKA,EAAM,GAC7C,IAAK,IAAIsD,EAAI,EAAGA,EAAI,EAAGA,IACnBiB,EAASjB,IAAMmB,EAAKnB,GACxBkB,GAAWC,EAAK,GAAK,IAGzB,OAAOnH,EAAMyB,eAAewF,EAASG,KAAIC,GAAKA,EAAIH,IAAU,KAUhE,cAAcI,GAAc,EAAMC,GAAc,EAAMC,EAAc,IAChE,MAAMC,EAAc,IAAIC,MAAM,QAC9B,IAAK,IAAI1B,EAAI,EAAGA,EAAI5F,KAAKS,OAAOoF,OAAQD,GAAK,EAAG,CAC5C,MAAM1D,EAAQlC,KAAKK,SAASW,UAAU4E,GAAG,IAClCtE,EAAGC,EAAGC,GAAK5B,EAAMkG,cAAclG,EAAMuC,YAAYD,IAAQ8E,KAAIC,MAAa,GAAJA,KAC7E,GAAIC,GAAe1F,EAAI4F,EAAa,SACpC,GAAID,GAAe3F,EAAI,GAAO4F,EAAa,SAC3C,MAAMG,EAAMjG,GAAK,GAAKC,GAAK,EAAIC,EAC/B6F,EAAYE,IAAQF,EAAYE,IAAQ,GAAK,EAGjD,IAAIC,GAAiB,EACjBC,EAAqB,EAOzB,GANAJ,EAAYK,SAAQ,CAACC,EAAI/B,KACjB+B,EAAKH,IACTA,EAAgBG,EAChBF,EAAqB7B,OAGG,IAAxB6B,EACA,OAAOzH,KAAK4H,cAAcV,EAAaC,EAAaC,EAAc,GAEtE,MAAM9F,EAAKmG,IAAuB,GAAM,GAClClG,EAAKkG,IAAuB,EAAK,GACjCjG,EAAyB,GAArBiG,EAEV,OAAO7H,EAAMoC,YAAYV,EAAI,GAAMC,EAAI,GAAMC,EAAI,GAAM,GAQ3D,OAAOqG,EAAOC,GAAS,GACnB,GAAID,EAAQ,KAAQ,EAAG,OAAO7H,KAC9B,GAAI6H,EAAQ,KAAQ,EAAG,OAAO7H,KAAK+H,iBAEnC,MAAMC,EAAMvG,KAAKwG,IAAMJ,EAAQ,KAEzBK,EAAMzG,KAAKyG,IAAIF,GACfG,EAAM1G,KAAK0G,IAAIH,GAEfnI,EAAQiI,EACRrG,KAAK2G,IAAIpI,KAAKH,MAAQqI,GAAOzG,KAAK2G,IAAIpI,KAAKF,OAASqI,GACpDnI,KAAKH,MACLC,EAASgI,EACTrG,KAAK2G,IAAIpI,KAAKH,MAAQsI,GAAO1G,KAAK2G,IAAIpI,KAAKF,OAASoI,GACpDlI,KAAKF,OAELuI,EAAMzI,EAAMoD,IAAInD,EAAOC,GAEvBwI,EAASzI,EAAQ,EAAI,GACrB0I,EAASzI,EAAS,EAAI,GACtB0I,EAASxI,KAAKH,MAAQ,EAAI,GAC1B4I,EAASzI,KAAKF,OAAS,EAAI,GAEjC,IAAIwB,EAAI,EACR,EAAG,CACC,IAAIoH,EAAI,EACR,MAAMC,EAAOH,EAASN,GAAO5G,EAAIiH,GAC3BK,EAAOH,EAASN,GAAO7G,EAAIiH,GAEjC,EAAG,CACC,MAAMM,EAAKF,EAAOR,GAAOO,EAAIJ,GACvBQ,EAAKF,EAAOV,GAAOQ,EAAIJ,GAC7B1I,EAAMmJ,gBAAgB/I,KAAMqI,EAAKK,EAAGpH,EAAGuH,EAAIC,SACtCJ,IAAM7I,SACVyB,IAAMxB,GAEf,OAAOE,KAAKsD,UAAU+E,GAO1B,iBACI,IAAItH,EAAS,EAEb,IADAf,KAAKS,OAAOuI,UACLjI,EAASf,KAAKS,OAAOoF,QAAQ7F,KAAKS,OAAO8B,SAASxB,EAAQA,GAAU,GAAGiI,UAE9E,OAAOhJ,KAYX,uBAAuBiJ,EAAKZ,EAAKa,EAAIC,EAAIC,EAAIC,GACzC,MAAMC,IAAOF,EACPG,IAAOF,EACPG,EAAKJ,EAAKE,EACVG,EAAKJ,EAAKE,EACVG,EAAYrB,EAAI5H,OAAO8B,SAAS,GAAK2G,EAAKC,EAAKd,EAAIxI,QAAS,GAE5D8J,EAAM,CACR1I,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,GAGPxB,EAAMgK,SAASN,EAAIC,GAAK,EAAIC,IAAO,EAAIC,GAAKE,EAAKV,GACjDrJ,EAAMgK,SAAS,EAAIN,EAAIC,EAAIC,GAAM,EAAIC,GAAKE,EAAKV,GAC/CrJ,EAAMgK,SAASN,EAAI,EAAIC,GAAK,EAAIC,GAAMC,EAAIE,EAAKV,GAC/CrJ,EAAMgK,SAAS,EAAIN,EAAI,EAAIC,EAAIC,EAAKC,EAAIE,EAAKV,GAE7CS,EAAU,GAAKC,EAAIvI,EACnBsI,EAAU,GAAKC,EAAI1I,EAAI0I,EAAIvI,EAC3BsI,EAAU,GAAKC,EAAIzI,EAAIyI,EAAIvI,EAC3BsI,EAAU,GAAKC,EAAIxI,EAAIwI,EAAIvI,EAI/B,gBAAgByI,EAAQC,EAAQC,EAAQJ,EAAKV,GACzC,GACIY,EAAS,GACNC,EAAS,GACTD,EAASZ,EAAIpJ,OACbiK,EAASb,EAAInJ,OAClB,CACE,MAAMiB,EAAS,GAAK8I,EAASC,EAASb,EAAIpJ,OACpCmK,EAAYf,EAAIxI,OAAO8B,SAASxB,EAAQA,EAAS,GAEjDkJ,EAAKF,EAASC,EAAU,GAE9BL,EAAIvI,GAAK6I,EACTN,EAAI1I,GAAKgJ,EAAKD,EAAU,GACxBL,EAAIzI,GAAK+I,EAAKD,EAAU,GACxBL,EAAIxI,GAAK8I,EAAKD,EAAU,IAShC,UAAUjH,GAON,OANA/C,KAAKC,UAAY8C,EAAM9C,UACvBD,KAAKE,WAAa6C,EAAM7C,WACxBF,KAAKK,SAAW0C,EAAM1C,SACtBL,KAAKO,QAAUwC,EAAMxC,QACrBP,KAAKS,OAASsC,EAAMtC,OAEbT,KAQX,gBAAgBkK,GACZ,MAAMC,EAAUC,OAAOD,QAAQD,GAAQG,MAAK,CAACjJ,EAAGD,IAAMC,EAAE,GAAKD,EAAE,KACzDmJ,EAAYH,EAAQnD,KAAIuD,GAAKC,WAAWD,EAAE,MAC1CE,EAASN,EAAQnD,KAAIuD,GAAKA,EAAE,KAElC,GAAyB,IAArBD,EAAUzE,OAAc,MAAM,IAAI9F,WAAW,gCAC5C,GAAyB,IAArBuK,EAAUzE,OACf,MAAO,IAAM4E,EAAO,GACjB,GAAyB,IAArBH,EAAUzE,OAAc,CAC/B,MAAM6E,EAAW1K,KAAK2K,aAAaF,EAAO,GAAIA,EAAO,IACrD,OAAOG,GACCA,GAAYN,EAAU,GAAWG,EAAO,GACxCG,GAAYN,EAAU,GAAWG,EAAO,GACrCC,GAAUE,EAAWN,EAAU,KAAOA,EAAU,GAAKA,EAAU,KAI9E,MAAMO,EAASpJ,KAAKC,OAAO4I,GACrBQ,EAASrJ,KAAKE,OAAO2I,GAC3B,IAAIS,EAAY,GAEhB,IAAK,IAAInF,EAAI,EAAGA,EAAI0E,EAAUzE,OAAQD,IAAK,CACvC,IAAIoF,EAASV,EAAU1E,EAAI,GAC3B,QAAeqF,IAAXD,EAAsB,SAE1B,IAAIE,EAASZ,EAAU1E,GAEnBuF,EAASV,EAAO7E,EAAI,QACTqF,IAAXE,IAAsBA,EAASV,EAAO7E,IAE1C,MAAMwF,EAASX,EAAO7E,GAChB8E,EAAW1K,KAAK2K,aAAaQ,EAAQC,GAE3CL,EAAUM,KAAK,CAAC3J,IAAKsJ,EAAQrJ,IAAKuJ,EAAQR,aAG9C,OAAOE,IACH,GAAIA,GAAYC,EAAQ,OAAOE,EAAU,GAAGL,SAAS,GACrD,GAAIE,GAAYE,EAAQ,OAAOC,EAAUA,EAAUlF,OAAS,GAAG6E,SAAS,GAExE,IAAK,MAAMA,KAAYK,EACnB,GAAIH,GAAYF,EAAShJ,KAAOkJ,GAAYF,EAAS/I,IACjD,OAAO+I,EAASA,UAAUE,EAAWF,EAAShJ,MAAQgJ,EAAS/I,IAAM+I,EAAShJ,MACtF,MAAM,IAAI3B,WAAW,8BAA8B6K,MAS3D,aAAa9F,EAASrD,KAAKC,IAAI1B,KAAKH,MAAOG,KAAKF,QAAU,GACtD,MAAMiF,EAAaD,GAAU,EAC7B,IAAK,IAAIhE,EAAI,EAAGA,GAAKgE,EAAQhE,IAAK,CAC9B,MAAMwK,GAAQxK,EAAIgE,IAAW,EAC7B,IAAK,IAAIjE,EAAI,EAAGA,GAAKiE,EAAQjE,IACrByK,GAAQzK,EAAIiE,IAAW,EAAIC,IAC3B/E,KAAKS,OAAwC,IAA/BI,EAAI,GAAKb,KAAKH,MAAQiB,EAAI,GAAS,GAAK,GAIlE,IAAK,IAAIA,EAAI,EAAGA,GAAKgE,EAAQhE,IAAK,CAC9B,MAAMwK,GAAQxK,EAAIgE,IAAW,EAC7B,IAAK,IAAIjE,EAAIb,KAAKF,OAASgF,EAAQjE,GAAKb,KAAKF,OAAQe,IAC7CyK,GAAStL,KAAKF,OAASe,EAAKiE,IAAW,EAAIC,IAC3C/E,KAAKS,OAAwC,IAA/BI,EAAI,GAAKb,KAAKH,MAAQiB,EAAI,GAAS,GAAK,GAIlE,IAAK,IAAIA,EAAId,KAAKH,MAAQiF,EAAQhE,GAAKd,KAAKH,MAAOiB,IAAK,CACpD,MAAMwK,GAAStL,KAAKH,MAAQiB,EAAKgE,IAAW,EAC5C,IAAK,IAAIjE,EAAI,EAAGA,GAAKiE,EAAQjE,IACrByK,GAAQzK,EAAIiE,IAAW,EAAIC,IAC3B/E,KAAKS,OAAwC,IAA/BI,EAAI,GAAKb,KAAKH,MAAQiB,EAAI,GAAS,GAAK,GAIlE,IAAK,IAAIA,EAAId,KAAKH,MAAQiF,EAAQhE,GAAKd,KAAKH,MAAOiB,IAAK,CACpD,MAAMwK,GAAStL,KAAKH,MAAQiB,EAAKgE,IAAW,EAC5C,IAAK,IAAIjE,EAAIb,KAAKF,OAASgF,EAAQjE,GAAKb,KAAKF,OAAQe,IAC7CyK,GAAStL,KAAKF,OAASe,EAAKiE,IAAW,EAAIC,IAC3C/E,KAAKS,OAAwC,IAA/BI,EAAI,GAAKb,KAAKH,MAAQiB,EAAI,GAAS,GAAK,GAIlE,OAAOd,KAMX,oBAAoBuL,EAAYC,GAC5B,MAAMC,EAAKF,IAAe,GACpBG,EAAKH,GAAc,GAAK,IACxBI,EAAKJ,GAAc,EAAI,IACvBK,EAAkB,IAAbL,EACLM,GAAML,IAAa,IAAMC,EACzBK,GAAMN,GAAY,GAAK,KAAQE,EAC/BK,GAAMP,GAAY,EAAI,KAAQG,EAC9BK,GAAiB,IAAXR,GAAmBI,EAE/B,OAAOhB,IAKW,IAJJa,EAAKb,EAAWiB,IAIH,IAAY,IAHzBH,EAAKd,EAAWkB,IAGkB,IAAY,IAF9CH,EAAKf,EAAWmB,IAEuC,EAAU,IADjEH,EAAKhB,EAAWoB,EAUlC,aAAaC,EAAc,GACvB,aAAa3M,EAAI4M,OAAOlM,KAAKS,OAAQ,CAACZ,MAAOG,KAAKH,MAAOC,OAAQE,KAAKF,OAAQqM,MAAOF,EAAaG,SAAU,IAQhH,iBAAiBC,EAAU,IAEvB,aADM5M,EAAQ6M,OACP7M,EAAQyM,OAAOlM,KAAKS,OAAQT,KAAKH,MAAOG,KAAKF,OAAQ2B,KAAKE,IAAI,EAAGF,KAAKC,IAAI,IAAK2K,KAQ1F,oBAAoBE,GAChB,IAAIxJ,EAEAyJ,EASJ,GARKpM,YAAYqM,OAAOF,IAIpBA,EAAO,IAAIG,WAAWH,EAAKI,OAAQJ,EAAKK,WAAYL,EAAKM,YACzDL,EAAO,IAAIlM,SAASiM,EAAKI,OAAQJ,EAAKK,WAAYL,EAAKM,cAJvDN,EAAO,IAAIG,WAAWH,GACtBC,EAAO,IAAIlM,SAASiM,EAAKI,SAMI,aAA7BH,EAAKxL,UAAU,GAAG,GAAuB,CACzC,MAAM,MAACnB,EAAK,OAAEC,EAAM,OAAEgN,SAAgBxN,EAAIyN,OAAOR,GACjDxJ,EAAQ,IAAI/C,KAAKH,EAAOC,GACxBiD,EAAMtC,OAAOwC,IAAI6J,QACd,GAAKN,EAAKxL,UAAU,GAAG,KAAW,GAAO,SAAU,OAChDvB,EAAQ6M,OACd,MAAMU,EAAcvN,EAAQsN,OAAOR,GAE7B1M,EAAQmN,EAAYnN,MACpBC,EAASkN,EAAYlN,OACrBmN,EAAYD,EAAYE,OAE9BnK,EAAQ,IAAI/C,KAAKH,EAAOC,GACxB,MAAM6M,EAASK,EAAYL,OAE3B,GAAkB,IAAdM,EAAiB,CACjB,MAAMT,EAAO,IAAIlM,SAASyC,EAAMtC,OAAOkM,QAEvC,IAAK,IAAI/G,EAAI,EAAGA,EAAI+G,EAAO9G,OAAQD,IAAK,CACpC,MAAMuH,EAAQR,EAAO/G,GACrB4G,EAAK9J,UAAc,EAAJkD,EAAOuH,GAAS,GAAKA,GAAS,GAAKA,GAAS,EAAI,KAAM,SAEtE,GAAkB,IAAdF,EAAiB,CACxBlK,EAAMtC,OAAOqC,KAAK,KAClB,IAAK,IAAI8C,EAAI,EAAGA,EAAI/F,EAAQC,EAAQ8F,IAChC7C,EAAMtC,OAAOwC,IAAI0J,EAAOpK,SAAa,EAAJqD,EAAW,EAAJA,EAAQ,GAAQ,EAAJA,QACrD,GAAkB,IAAdqH,EACP,IAAK,IAAIrH,EAAI,EAAGA,EAAI+G,EAAO9G,OAAQD,GAAK,EACpC7C,EAAMtC,OAAOmF,GAAK,KAAQ,EAAI+G,EAAO/G,GAAK,MAAS,EAAI+G,EAAO/G,EAAI,GAAK,KACvE7C,EAAMtC,OAAOmF,EAAI,GAAK,KAAQ,EAAI+G,EAAO/G,EAAI,GAAK,MAAS,EAAI+G,EAAO/G,EAAI,GAAK,KAC/E7C,EAAMtC,OAAOmF,EAAI,GAAK,KAAQ,EAAI+G,EAAO/G,EAAI,GAAK,MAAS,EAAI+G,EAAO/G,EAAI,GAAK,KAC/E7C,EAAMtC,OAAOmF,EAAI,GAAK,QAG3B,IAAiC,aAA7B4G,EAAKxL,UAAU,GAAG,GAMtB,MAAM,IAAIyC,MAAM,0BAN6B,OAC1C/D,EAAQ4M,OACd,MAAMU,EAActN,EAAQqN,OAAOR,GACnCxJ,EAAQ,IAAI/C,KAAKgN,EAAYnN,MAAOmN,EAAYlN,QAEhDiD,EAAMtC,OAAOwC,IAAI+J,EAAYL,SAGjC,OAAO5J,EAOX,4BACI,OAAO,EAOX,4BACI,OAAO,EAOX,6BACI,OAAO,EAUX,uBAAuBqK,EAAKC,EAAO,EAAGlK,EAAOnD,KAAKsN,gBAC9C,IAAK,CAACtN,KAAKuN,eAAgBvN,KAAKwN,gBAAiBxN,KAAKsN,gBAAgBG,SAAStK,GAC3E,MAAM,IAAIM,MAAM,4BAEpB,GAAIN,IAASnD,KAAKsN,gBAAkBD,GAAQ,EACxC,MAAM,IAAItN,WAAW,yBACzB,GAAIoD,IAASnD,KAAKsN,gBAAkBD,EAAO,EACvC,MAAM,IAAItN,WAAW,yBAEF,iBAARqN,IAAkBA,GAAM,IAAIM,aAAcxB,OAAOkB,UAEtD5N,EAAO8M,OACb,MAAMU,EAAcxN,EAAOmO,UAAUP,EAAKjK,EAAMkK,GAC1CtK,EAAQ,IAAI/C,KAAKgN,EAAYnN,MAAOmN,EAAYlN,QAItD,OAFAiD,EAAMtC,OAAOwC,IAAI+J,EAAYL,QAEtB5J,EAOf,6BACI,OAAO,EAOX,6BACI,OAAO,EAaX,wBAAwB6K,EAAMC,EAAOC,EAAM5L,EAAQ,WAAY6L,EAAYC,IAAUC,EAAYjO,KAAKkO,uBAC5F3O,EAAQ+M,OACdsB,EAAO,IAAIrO,EAAQ4O,KAAKN,EAAOD,GAC/B,MAAO3M,EAAGC,EAAGC,EAAGC,GAAKxB,EAAMuC,YAAYD,GAEjCkM,EAAS,IAAI7O,EAAQ8O,OAE3BD,EAAOE,MAAM,CACTC,WAAYN,IAAcjO,KAAKkO,gBAAkB,OAAS,SAC1DM,UAAWR,MAAaD,EAAY,KAAOA,IAG/CK,EAAOK,OAAOb,EAAME,EAAM,CAAED,UAC5B,MAAMb,EAAcoB,EAAOT,UAAU1M,EAAGC,EAAGC,GACrC4B,EAAQ,IAAI/C,KAAKgN,EAAYnN,MAAOmN,EAAYlN,QAMtD,OAJAiD,EAAMtC,OAAOwC,IAAI+J,EAAYL,QAE7BiB,EAAKc,OACLN,EAAOM,OACA3L,EAAMwC,QAAQnE,EAAI,MASjC,MAAMuN,UAAc/O,EAQhB,YAAYC,EAAOC,EAAQ8O,EAAW,KAClC,GAAIjM,MAAMiM,IAAaA,EAAW,EAC9B,MAAM,IAAI7O,WAAW,0BAEzB8O,MAAMhP,EAAOC,GACbE,KAAK4O,SAAWA,EAGpB,WACI,MAAO,SAAS5O,KAAKH,SAASG,KAAKF,UAAUE,KAAK4O,cAStD,YAAY7L,EAAO6L,GACf,KAAM7L,aAAiBnD,GACnB,MAAM,IAAIgD,UAAU,wBACxB,MAAMkM,EAAQ,IAAIH,EAAM5L,EAAMlD,MAAOkD,EAAMjD,OAAQ8O,GAGnD,OAFAE,EAAMrO,OAAOwC,IAAIF,EAAMtC,QAEhBqO,GAQf,MAAMC,UAAYzH,MAOd,YAAY0H,EAAQC,GAAY,GAC5BJ,SAASG,GAEThP,KAAKH,MAAQmP,EAAO,GAAGnP,MACvBG,KAAKF,OAASkP,EAAO,GAAGlP,OAExB,IAAK,MAAMgP,KAAS9O,KAAM,CACtB,KAAM8O,aAAiBH,GACnB,MAAM,IAAI/L,UAAU,SAAS5C,KAAKkP,QAAQJ,kCAE9C,GAAIA,EAAMjP,QAAUG,KAAKH,MAAO,MAAM,IAAI4D,MAAM,gCAChD,GAAIqL,EAAMhP,SAAWE,KAAKF,OAAQ,MAAM,IAAI2D,MAAM,iCAGtD,GAAIwL,GAAa,GAAKtM,MAAMsM,GACxB,MAAM,IAAIlP,WAAW,sBAEzBC,KAAKiP,UAAYA,EAGrB,WACI,MAAO,OAAOjP,KAAKH,SAASG,KAAKF,UAAUE,KAAK4O,cAOpD,eACI,MAAO,IAAI5O,MAAMmP,QAAO,CAACC,EAAKN,IAAUM,EAAMN,EAAMF,UAAU,GAQlE,aAAavC,EAAU,UACb1M,EAAO2M,OACb,MAAM+C,EAAU,IAAI1P,EAAO2P,QAAQtP,KAAKH,MAAOG,KAAKF,OAAQE,KAAKiP,WAEjE,IAAK,MAAMH,KAAS9O,KAAM,CACtB,KAAM8O,aAAiBH,GAAQ,MAAM,IAAIlL,MAAM,+BAC/C4L,EAAQE,OAAOT,EAAMF,SAAW,IAAKE,EAAMjP,MAAOiP,EAAMhP,OAAQgP,EAAMrO,OAAQ4L,GAGlF,OAAOgD,EAAQG,KAQnB,oBAAoBjD,GAChB,IAAIxJ,EAEAyJ,EASJ,GARKpM,YAAYqM,OAAOF,IAIpBA,EAAO,IAAIG,WAAWH,EAAKI,OAAQJ,EAAKK,WAAYL,EAAKM,YACzDL,EAAO,IAAIlM,SAASiM,EAAKI,OAAQJ,EAAKK,WAAYL,EAAKM,cAJvDN,EAAO,IAAIG,WAAWH,GACtBC,EAAO,IAAIlM,SAASiM,EAAKI,SAMxBH,EAAKxL,UAAU,GAAG,KAAW,GAAO,QAUlC,MAAM,IAAIyC,MAAM,0BAV4B,CAC/C,MAAMgM,EAAU,IAAI9P,EAAO+P,QAAQnD,GAC7ByC,EAAS,GACf,IAAK,MAAMW,KAAaF,EAAQT,SAAU,CACtC,MAAMF,EAAQ,IAAIH,EAAMgB,EAAU9P,MAAO8P,EAAU7P,OAAQ6P,EAAUC,OACrEd,EAAMrO,OAAOwC,IAAI0M,EAAUhD,QAC3BqC,EAAO3D,KAAKyD,GAGhB/L,EAAQ,IAAIgM,EAAIC,GAGpB,OAAOjM,GAIf7D,EAAOD,QAAU,CAACW,QAAOmP,MAAKJ,U,ilBCx3C9BzP,EAAOD,QAAU,MACb,iBAAiB4Q,GACb,MAAMC,EAAQ,IAAIpD,WACdmD,EAAOV,QAAO,CAACtJ,EAAQiK,IAAUjK,EAASiK,EAAMjK,QAAQ,IAG5D,IAAI9E,EAAS,EACb,IAAK,MAAMD,KAAK+O,EACZC,EAAM7M,IAAInC,EAAGC,GACbA,GAAUD,EAAE+E,OAGhB,OAAOiK,K,QCZf,MAAMC,EAAQ,IAAIvP,YAAY,CAC1B,EAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,WAAY,SAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,SAAY,WAC5D,WAAY,WAAY,SAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,SAAY,WAAY,WAC5D,WAAY,SAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,SAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,YAExCtB,EAAOD,QAAU,SAAe0N,GAC5B,IAAI5L,EAAS,EACTiP,EAAM,WAEV,KAAOjP,EAAS4L,EAAO9G,OAAS,GAC5BmK,EAAMD,EAAiC,KAA1BC,EAAMrD,EAAO5L,OAAsBiP,IAAQ,EACxDA,EAAMD,EAAiC,KAA1BC,EAAMrD,EAAO5L,OAAsBiP,IAAQ,EACxDA,EAAMD,EAAiC,KAA1BC,EAAMrD,EAAO5L,OAAsBiP,IAAQ,EACxDA,EAAMD,EAAiC,KAA1BC,EAAMrD,EAAO5L,OAAsBiP,IAAQ,EAG5D,KAAOjP,EAAS4L,EAAO9G,QACnBmK,EAAMD,EAAiC,KAA1BC,EAAMrD,EAAO5L,OAAsBiP,IAAQ,EAG5D,OAAc,WAANA,KAAsB,I,cC3DlC,MAAMC,EAAQ,EAAQ,KAChBC,EAAS,EAAQ,MACjB,KAAC5D,EAAI,SAAE6D,EAAQ,WAAEC,GAAc,EAAQ,KAEvCC,EAAW,IAAI3D,WAAW,CAAC,GAAI,GAAI,GAAI,KACvC4D,EAAW,IAAI5D,WAAW,CAAC,GAAI,GAAI,GAAI,KACvC6D,EAAW,IAAI7D,WAAW,CAAC,GAAI,GAAI,GAAI,KACvC8D,EAAeP,EAAM,IAAIvD,WAAW,CAAC,GAAI,GAAI,GAAI,MACjD+D,EAAO,IAAI/D,WAAW,CAAC,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,KAUpDgE,EAAyB,CAC3BC,EARW,EASXC,EANiB,EAQjBC,EAVW,EAWXC,EARiB,GAWrB5R,EAAOD,QAAU,CACb,aAAasN,GAAM,MAAC1M,EAAK,OAAEC,EAAM,SAAEsM,EAAQ,MAAE2E,EAAQ,EAAC,MAAE5E,EAAQ,IAC5D,IAAIpL,EAAS,EACTiQ,EAAa,EACjB,MAAMC,EAAapR,EAAQuM,EACrB8E,EAAM,IAAIxE,WAAW5M,EAASyM,EAAK1G,QAEzC,KAAO9E,EAASwL,EAAK1G,QACjBqL,EAAIF,KAAgB,EACpBE,EAAIjO,IAAIsJ,EAAKhK,SAASxB,EAASA,GAAUkQ,GAAcD,GAEvDA,GAAcC,QAGZ3E,IACN,MAAM6E,EAAahB,EAASe,EAAK/E,GAC3B2D,EAAQ,IAAIpD,WAAW,GAAK+D,EAAK5K,OAASsL,EAAWtL,QAE3DiK,EAAM,IAAM,EACZA,EAAM,IAAM,EACZA,EAAM,IAAM,EACZA,EAAM,IAAMiB,EACZjB,EAAM7M,IAAIwN,EAAM,GAChBX,EAAM7M,IAAIoN,EAAU,IACpBP,EAAM7M,IAAIqN,EAAU,IACpBR,EAAM7M,IAAIkO,EAAY,IACtBrB,EAAM7M,IAAIsN,EAAU,GAAKY,EAAWtL,QACpCiK,EAAM,IAAMY,EAAuBtE,GAEnC,MAAMI,EAAO,IAAIlM,SAASwP,EAAMnD,QAWhC,OATAH,EAAK9J,UAAU,EAAG,IAClB8J,EAAK9J,UAAU,GAAI7C,GACnB2M,EAAK9J,UAAU,GAAI5C,GACnB0M,EAAK9J,UAAU,GAAIyO,EAAWtL,QAC9B2G,EAAK9J,UAAU,GAAKyO,EAAWtL,OAAQ,GACvC2G,EAAK9J,UAAU,GAAKyO,EAAWtL,OAAQ2K,GACvChE,EAAK9J,UAAU,GAAIuN,EAAM,IAAIvD,WAAWoD,EAAMnD,OAAQ,GAAI,MAC1DH,EAAK9J,UAAU,GAAKyO,EAAWtL,OAAQoK,EAAM,IAAIvD,WAAWoD,EAAMnD,OAAQ,GAAI,EAAIwE,EAAWtL,UAEtFiK,GAEX,aAAaA,GACT,IAAItD,EAAO,IAAIlM,SAASwP,EAAMnD,OAAQmD,EAAMlD,WAAYkD,EAAMjD,YAE9D,MAAMhN,EAAQ2M,EAAKxL,UAAU,IACvBlB,EAAS0M,EAAKxL,UAAU,IACxBoQ,EAAMtB,EAAM,IACZuB,EAAavB,EAAM,IACzB,IAAI1D,EAAW,CAAEyE,EAAG,EAAGS,EAAG,EAAGR,EAAG,EAAGF,EAAG,EAAGW,EAAG,GAAIF,GAChD,MAAMG,EAAUpF,EAAWgF,EAAM,EAE3BH,EAAapR,EAAQ2R,EAC3B,IAAI1E,EAAS,IAAIJ,WAAW5M,EAASmR,GAEjClQ,EAAS,EACT0Q,EAAW,EAEXC,EAAW,GACf,MAAMC,EAAS,GAEf,IAAIC,EAASC,EAETC,EACJ,KAAgB,aAATA,GAAqB,CAIxB,GAHAA,EAAOtF,EAAKxL,UAAU,EAAI0Q,GAGb,aAATI,EACAH,EAAOtG,KAAKyE,EAAMvN,SAAS,EAAImP,EAAU,EAAIA,EAAWlF,EAAKxL,UAAU0Q,UACtE,GAAa,aAATI,EAAqB,CAC1B,GAAIF,EACA,MAAM,IAAInO,MAAM,wCACpBmO,EAAU,IAAIpR,YAAYgM,EAAKxL,UAAU0Q,IACzC,IAAK,IAAIK,EAAY,EAAGA,EAA6B,EAAjBH,EAAQ/L,OAAYkM,GAAa,EACjEH,EAAQG,EAAY,GAAKjC,EAAM,EAAI4B,EAAWK,IAAc,GAAKjC,EAAM,EAAI4B,EAAWK,EAAY,IAAM,GAAKjC,EAAM,EAAI4B,EAAWK,EAAY,IAAM,EAAI,SACzJ,GAAa,aAATD,EAAqB,CAC5B,GAAID,EACA,MAAM,IAAIpO,MAAM,wCACpBoO,EAAe,IAAInF,WAAWF,EAAKxL,UAAU0Q,IAC7C,IAAK,IAAI9L,EAAI,EAAGA,EAAIiM,EAAahM,OAAQD,IACrCiM,EAAajM,GAAKkK,EAAM,EAAI4B,EAAW9L,GAG/C8L,GAAY,GAAYlF,EAAKxL,UAAU0Q,GAM3C,UAHMpF,IACNwD,EAAQM,EAA6B,IAAlBuB,EAAO9L,OAAe8L,EAAO,GAAKzB,EAAO8B,UAAUL,IAE/D5Q,EAAS+O,EAAMjD,YAAY,CAC9B,MAAMoF,EAASnC,EAAM/O,KACfqB,EAAQ0N,EAAMvN,SAASxB,EAAQA,GAAUkQ,GAE3C,IAAMgB,EAAQnF,EAAO7J,IAAIb,EAAOqP,GAC3B,IAAMQ,EAAQjS,KAAKkS,SAAS9P,EAAO0K,EAAQ2E,EAAUD,EAASP,GAC9D,IAAMgB,EAAQjS,KAAKmS,SAAS/P,EAAO0K,EAAQ2E,EAAUD,EAASP,GAC9D,IAAMgB,EAAQjS,KAAKoS,SAAShQ,EAAO0K,EAAQ2E,EAAUD,EAASP,GAC9D,IAAMgB,GAAQjS,KAAKqS,SAASjQ,EAAO0K,EAAQ2E,EAAUD,EAASP,GAEvEQ,GAAYR,EAGhB,GAAmB,IAAfI,EAAkB,CAClB,IAAKO,EACD,MAAM,IAAInO,MAAM,iCAEpB,GAAIoO,EACA,IAAK,IAAIjM,EAAI,EAAGA,EAAIiM,EAAahM,OAAQD,IACrCgM,EAAQhM,IAAM,WAAaiM,EAAajM,GAEhDwG,EAAW,EACX,MAAMkG,EAAY,IAAI5F,WAAW7M,EAAQC,EAAS,GAC5CyS,EAAY,IAAIjS,SAASgS,EAAU3F,OAAQ2F,EAAU1F,WAAY0F,EAAUzF,YACjF,IAAK,IAAIjH,EAAI,EAAGA,EAAIkH,EAAOjH,OAAQD,IAC/B2M,EAAU7P,UAAc,EAAJkD,EAAOgM,EAAQ9E,EAAOlH,KAAK,GACnDkH,EAASwF,EAGb,GAAY,IAARlB,EAAW,CACX,MAAMkB,EAAY,IAAI5F,WAAWI,EAAOjH,OAASuL,EAAM,GACvD,IAAK,IAAIxL,EAAI,EAAGA,EAAIkH,EAAOjH,OAAQD,GAAK,EACpC0M,EAAU1M,EAAI,GAAKkH,EAAOlH,GAC9BkH,EAASwF,EAGb,GAAiB,IAAblG,EAAgB,CAChB,MAAMkG,EAAY,IAAI5F,WAAW7M,EAAQC,EAAS,GAC5C0M,EAAO,IAAIlM,SAASgS,EAAU3F,QAEpC,GAAiB,IAAbP,EACA,IAAK,IAAIxG,EAAI,EAAGA,EAAI/F,EAAQC,EAAQ8F,IAAK,CACrC,MAAMuH,EAAQL,EAAOlH,GACrB4G,EAAK9J,UAAc,EAAJkD,EAAOuH,GAAS,GAAKA,GAAS,GAAKA,GAAS,EAAI,KAAM,QAEtE,GAAiB,IAAbf,EACP,IAAK,IAAIxG,EAAI,EAAGA,EAAI/F,EAAQC,EAAS,EAAG8F,GAAK,EAAG,CAC5C,MAAMuH,EAAQL,EAAOlH,GACrB4G,EAAK9J,UAAc,EAAJkD,EAAOuH,GAAS,GAAKA,GAAS,GAAKA,GAAS,EAAIL,EAAOlH,EAAI,IAAI,QAE/E,GAAiB,IAAbwG,EAAgB,CACvBkG,EAAUxP,KAAK,KACf,IAAK,IAAI8C,EAAI,EAAGA,EAAI/F,EAAQC,EAAQ8F,IAChC0M,EAAUrP,IAAI6J,EAAOvK,SAAa,EAAJqD,EAAW,EAAJA,EAAQ,GAAQ,EAAJA,GAGzDkH,EAASwF,EAGb,MAAO,CAACzS,QAAOC,SAAQgN,WAG3B,SAAS1K,EAAO0K,EAAQ2E,EAAUD,EAASP,GACvC,IAAIrL,EAAI,EACR,KAAOA,EAAI4L,GAAS1E,EAAOlH,EAAI6L,GAAYrP,EAAMwD,KACjD,KAAOA,EAAIqL,GAAYnE,EAAOlH,EAAI6L,GAAYrP,EAAMwD,GAAKkH,EAAOlH,IAAM6L,EAAWD,IAGrF,SAASpP,EAAO0K,EAAQ2E,EAAUD,EAASP,GACvC,GAAI,IAAMQ,EAAU3E,EAAO7J,IAAIb,EAAOqP,OACjC,CACD,IAAI7L,EAAI,EACR,KAAOA,EAAIqL,GAAYnE,EAAOlH,EAAI6L,GAAYrP,EAAMwD,GAAKkH,EAAOlH,IAAM6L,EAAWR,KAIzF,SAAS7O,EAAO0K,EAAQ2E,EAAUD,EAASP,GACvC,IAAIrL,EAAI,EAER,GAAI,IAAM6L,EAAU,CAChB,KAAO7L,EAAI4L,GAAS1E,EAAOlH,GAAKxD,EAAMwD,KACtC,KAAOA,EAAIqL,GAAYnE,EAAOlH,GAAKxD,EAAMwD,IAAMkH,EAAOlH,IAAM4L,IAAY,OACrE,CACH,KAAO5L,EAAI4L,GAAS1E,EAAOlH,EAAI6L,GAAYrP,EAAMwD,IAAMkH,EAAOlH,IAAM6L,EAAWR,IAAe,GAC9F,KAAOrL,EAAIqL,GAAYnE,EAAOlH,EAAI6L,GAAYrP,EAAMwD,IAAMkH,EAAOlH,EAAI6L,EAAWD,GAAW1E,EAAOlH,IAAM6L,EAAWR,IAAe,KAI1I,SAAS7O,EAAO0K,EAAQ2E,EAAUD,EAASP,GACvC,IAAIrL,EAAI,EAER,GAAI,IAAM6L,EAAU,CAChB,KAAO7L,EAAI4L,GAAS1E,EAAOlH,GAAKxD,EAAMwD,KACtC,KAAOA,EAAIqL,GAAYnE,EAAOlH,GAAKxD,EAAMwD,GAAKkH,EAAOlH,IAAM4L,OACxD,CACH,KAAO5L,EAAI4L,GAAS1E,EAAOlH,EAAI6L,GAAYrP,EAAMwD,GAAKkH,EAAOlH,IAAM6L,EAAWR,GAE9E,KAAOrL,EAAIqL,GAAY,CACnB,MAAM7P,EAAI0L,EAAOlH,EAAI6L,EAAWD,GAC1BrQ,EAAI2L,EAAOlH,EAAI6L,EAAWR,GAC1BuB,EAAI1F,EAAOlH,EAAI6L,EAAWD,EAAUP,GAEpCpP,EAAIT,EAAID,EAAIqR,EACZC,EAAKhR,KAAK2G,IAAIvG,EAAIT,GAClBsR,EAAKjR,KAAK2G,IAAIvG,EAAIV,GAClBwR,EAAKlR,KAAK2G,IAAIvG,EAAI2Q,GAExB1F,EAAOlH,EAAI6L,GAAYrP,EAAMwD,MAAS6M,GAAMC,GAAMD,GAAME,EAAMvR,EAAMsR,GAAMC,EAAMxR,EAAIqR,Q,cChOpG,MAAM,QAACI,GAAW,EAAQ,KAE1B,IAAIC,EACAC,EAAW,KAEf,MAAMC,EACJ,gBAAkB,OAAOF,EAAKG,OAC9B,aAAa3F,GAAQ,OAAOwF,EAAKI,OAAO5F,GACxC,YAAY6F,EAAK7F,GAAQ,OAAOwF,EAAKM,MAAMD,EAAK7F,GAChD,UAAU6F,EAAK7F,GAAQ,OAAO,IAAIX,WAAWmG,EAAKO,OAAOzG,OAAQuG,EAAK7F,GACtE,WAAW6F,EAAK7F,GAAQ,OAAO,IAAI7M,YAAYqS,EAAKO,OAAOzG,OAAQuG,EAAK7F,GAExE,qBAAqB6F,EAAK7F,GACxB,IAAIjL,EAAQ2Q,EAAIvD,GAAG0D,EAAK7F,GAAMjL,QAC9B,OAAQyQ,EAAKM,MAAMD,EAAK7F,GAAOjL,GAInC,MAAMiR,EAAc,SAAUC,WAAaC,KAAKC,KAAKtH,OAAS,MAC5D,MAAMmD,EAAU,IAAI3B,YACpB,OAAO+F,GAAUpE,EAAQnD,OAAOuH,IAF4B,GAKxDC,EAAc,SAAUJ,WAAaC,KAAKC,KAAKzG,OAAS,MAC5D,MAAM0C,EAAU,IAAIkE,YACpB,OAAOhH,GAAU8C,EAAQ1C,OAAOJ,IAF4B,GAK1D,yBAA0B2G,aAC5BR,EAAW,IAAIc,sBAAqB,EAAE7R,EAAGmR,MAC7B,IAANnR,GAAS8Q,EAAKgB,UAAUX,GAClB,IAANnR,GAAS8Q,EAAKiB,YAAYZ,OAiGlChU,EAAOD,QAAU,CACfkP,KA9FF,MACE,YAAYN,EAAOlB,GACjB3M,KAAK6N,MAAQA,EACb,MAAMqF,EAAMH,EAAIgB,MAAMpH,EAAO9G,QAI7B,GAHAkN,EAAIvD,GAAG0D,EAAKvG,EAAO9G,QAAQ5C,IAAI0J,GAC/B3M,KAAKkT,IAAML,EAAKmB,SAASd,EAAKvG,EAAO9G,OAAQgI,IAExC7N,KAAKkT,IAAK,MAAM,IAAIzP,MAAM,gBAC3BqP,GAAUA,EAASmB,SAASjU,KAAM,CAAC,EAAGA,KAAKkT,KAAMlT,MAGvD,OACEA,KAAKkT,IAAML,EAAKgB,UAAU7T,KAAKkT,KAC3BJ,GAAUA,EAASoB,WAAWlU,MAGpC,IAAImU,GACF,OAAOtB,EAAKuB,SAASpU,KAAKkT,IAAKmB,OAAOC,UAAUC,WAAWC,KAAKL,EAAM,IAGxE,QAAQA,EAAMtG,EAAQ7N,KAAK6N,OACzB,MAAMqF,EAAML,EAAK4B,aAAazU,KAAKkT,IAAKmB,OAAOC,UAAUC,WAAWC,KAAKL,EAAM,GAAItG,GAC7E6G,EAAUC,KAAKC,MAAMlB,EAAYX,EAAIvD,GAAGqD,EAAKgC,oBAAoB3B,GAAMH,EAAIlN,YAEjF,OAAQgN,EAAKiC,kBAAkB5B,GAAMwB,EAGvC,UAAUP,EAAMtG,EAAQ7N,KAAK6N,OAC3B,MAAMqF,EAAML,EAAKkC,eAAe/U,KAAKkT,IAAKmB,OAAOC,UAAUC,WAAWC,KAAKL,EAAM,GAAItG,GAE/EmH,EAAQ,CACZrI,OAAQoG,EAAIvD,GAAGqD,EAAKoC,sBAAsB/B,GAAMH,EAAIlN,UAAUzD,QAC9DsS,QAASC,KAAKC,MAAMlB,EAAYX,EAAIvD,GAAGqD,EAAKqC,uBAAuBhC,GAAMH,EAAIlN,aAG/E,OAAQgN,EAAKsC,oBAAoBjC,GAAM8B,IA4DzC3G,OAxDF,MACE,cACErO,KAAKkT,IAAML,EAAKuC,aACZtC,IAAU9S,KAAKqV,KAAO,IACtBvC,GAAUA,EAASmB,SAASjU,KAAM,CAAC,EAAGA,KAAKkT,KAAMlT,MAGvD,QACE6S,EAAKyC,aAAatV,KAAKkT,KACnBJ,IAAU9S,KAAKqV,KAAKxP,OAAS,GAGnC,QACE,OAAOgN,EAAK0C,aAAavV,KAAKkT,KAGhC,OACMJ,IAAU9S,KAAKqV,KAAKxP,OAAS,GACjC7F,KAAKkT,IAAML,EAAKiB,YAAY9T,KAAKkT,KAC7BJ,GAAUA,EAASoB,WAAWlU,MAGpC,MAAMwV,EAAU,IACdA,EAAUnC,EAAYsB,KAAKc,UAAUD,IAEjC1C,IAAU9S,KAAKqV,KAAKxP,OAAS,GACjC,MAAMqN,EAAMH,EAAIgB,MAAMyB,EAAQ3P,QAC9BkN,EAAIvD,GAAG0D,EAAKsC,EAAQ3P,QAAQ5C,IAAIuS,GAChC3C,EAAK6C,aAAa1V,KAAKkT,IAAKA,EAAKsC,EAAQ3P,QAG3C,OAAO+H,EAAME,EAAMxB,GACjBwB,EAAOuF,EAAYvF,GACnB,MAAM0H,EAAUlJ,GAAQ,GACpBwG,GAAU9S,KAAKqV,KAAKhK,KAAKuC,GAC7B,MAAMsF,EAAMH,EAAIgB,MAAMjG,EAAKjI,QAC3BkN,EAAIvD,GAAG0D,EAAKpF,EAAKjI,QAAQ5C,IAAI6K,GAC7B,MAAM6H,EAAa,MAAOH,GAAa,MAAOA,GAAa,MAAOA,EAClE3C,EAAK+C,cAAc5V,KAAKkT,IAAKtF,EAAKsF,IAAKA,EAAKpF,EAAKjI,OAAyB,MAAjB2P,EAAQ3H,MAAgBD,EAAKC,MAAQ2H,EAAQ3H,MAAO8H,EAAWH,EAAQvU,EAAGuU,EAAQtU,EAAGsU,EAAQrU,GAGxJ,UAAUF,EAAGC,EAAGC,GACd,MAAM+R,EAAML,EAAKgD,iBAAiB7V,KAAKkT,IAAKjS,EAAGC,EAAGC,GAE5C6L,EAAc,CAClBnN,MAAOgT,EAAKiD,uBAAuB5C,GACnCpT,OAAQ+S,EAAKkD,wBAAwB7C,GACrCvG,OAAQoG,EAAIvD,GAAGqD,EAAKmD,wBAAwB9C,GAAMH,EAAIlN,UAAUzD,SAGlE,OAAQyQ,EAAKoD,sBAAsB/C,GAAMlG,IAQ3C,aACE,GAAI6F,EAAM,OACV,MAAMqD,EAAY,qBAAsBC,YAClCjX,QAAeiX,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiCxD,0BAAgCyD,MAAKvV,GAAKoV,EAAYpV,EAAIA,EAAEwV,iBACjLC,QAAiBJ,YAAYK,YAAYtX,GAE/C2T,EAAO0D,EAAStX,W,cC1IpB,MAAM,QAAC2T,GAAW,EAAQ,KAE1B,IAAIC,EACJ,MAAM4D,EAAU,IAAIC,IAEpB,MAAM3D,EACJ,gBAAkB,OAAOF,EAAKG,OAC9B,aAAa3F,GAAQ,OAAOwF,EAAKI,OAAO5F,GACxC,YAAY6F,EAAK7F,GAAQ,OAAOwF,EAAKM,MAAMD,EAAK7F,GAChD,UAAU6F,EAAK7F,GAAQ,OAAO,IAAIX,WAAWmG,EAAKO,OAAOzG,OAAQuG,EAAK7F,GACtE,WAAW6F,EAAK7F,GAAQ,OAAO,IAAI7M,YAAYqS,EAAKO,OAAOzG,OAAQuG,EAAK7F,GAExE,qBAAqB6F,EAAK7F,GACxB,IAAIjL,EAAQ2Q,EAAIvD,GAAG0D,EAAK7F,GAAMjL,QAC9B,OAAQyQ,EAAKM,MAAMD,EAAK7F,GAAOjL,GA+EnClD,EAAOD,QAAU,CACfqQ,QA5EF,MACE,YAAYzP,EAAOC,EAAQ6W,GAAQ,GACjC3W,KAAK4W,OAAS,GACdH,EAAQxT,IAAI,EAAGjD,MACfA,KAAKkT,IAAML,EAAKgE,YAAY,EAAGhX,EAAOC,EAAQ6W,GAGhD,GAAGhK,GACD3M,KAAK4W,OAAOvL,KAAKsB,GAGnB,OACE3M,KAAKkT,IAAML,EAAKiE,aAAa9W,KAAKkT,KAClCuD,EAAQM,OAAO,GAGjB,KACE/W,KAAK0O,OACL,IAAI3N,EAAS,EACb,MAAMyO,EAAK,IAAI9C,WAAW1M,KAAK4W,OAAOzH,QAAO,CAAC6H,EAAKlH,IAAUkH,EAAMlH,EAAMjK,QAAQ,IAEjF,IAAK,MAAM/E,KAAKd,KAAK4W,OACnBpH,EAAGvM,IAAInC,EAAGC,GACVA,GAAUD,EAAE+E,OAGd,OAAO2J,EAGT,IAAII,EAAO/P,EAAOC,EAAQ6M,EAAQN,GAChC,MAAM6G,EAAMH,EAAIgB,MAAMpH,EAAO9G,QAC7BkN,EAAIvD,GAAG0D,EAAKvG,EAAO9G,QAAQ5C,IAAI0J,GAC/BkG,EAAKoE,YAAYjX,KAAKkT,IAAKA,EAAKvG,EAAO9G,OAAQhG,EAAOC,EAAQ8P,EAAOvD,KA6CvEqD,QAzCF,MACE,YAAY/C,EAAQuK,EAAQ,GAC1B,MAAMC,EAAOpE,EAAIgB,MAAMpH,EAAO9G,QAG9B,GAFAkN,EAAIvD,GAAG2H,EAAMxK,EAAO9G,QAAQ5C,IAAI0J,GAChC3M,KAAKkT,IAAML,EAAKuE,YAAYD,EAAMxK,EAAO9G,OAAQqR,GAC7C,IAAMlX,KAAKkT,IAAK,MAAM,IAAIzP,MAAM,mCAEpCzD,KAAKH,MAAQgT,EAAKwE,cAAcrX,KAAKkT,KACrClT,KAAKF,OAAS+S,EAAKyE,eAAetX,KAAKkT,KAGzC,OACElT,KAAKkT,IAAML,EAAK0E,aAAavX,KAAKkT,KAGpC,UACE,IAAIpE,EACJ,KAAOA,EAAQ9O,KAAK8O,eAAeA,EAEnC9O,KAAK0O,OAGP,QACE,MAAMwE,EAAML,EAAK2E,cAAcxX,KAAKkT,KAEpC,GAAI,IAAMA,EAAK,OAAO,KACtB,GAAI,IAAMA,EAAK,MAAOlT,KAAK0O,OAAQ,IAAIjL,MAAM,+BAE7C,MAAMuJ,EAAc,CAClB4C,MAAOiD,EAAK4E,oBAAoBvE,GAChCrT,MAAOgT,EAAK6E,oBAAoBxE,GAChCpT,OAAQ+S,EAAK8E,qBAAqBzE,GAClCvG,OAAQoG,EAAIvD,GAAGqD,EAAK+E,qBAAqB1E,GAAMH,EAAIlN,UAAUzD,SAG/D,OAAQyQ,EAAKgF,mBAAmB3E,GAAMlG,IAQxC,aACA,GAAI6F,EAAM,OACV,MAAMqD,EAAY,qBAAsBC,YAClCjX,QAAeiX,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiCxD,yBAA+ByD,MAAKvV,GAAKoV,EAAYpV,EAAIA,EAAEwV,iBAC9KC,QAAiBJ,YAAYK,YAAYtX,EAAQ,CACrD4Y,IAAK,CACH,eAAeC,EAAI7E,GACjBuD,EAAQuB,IAAID,GAAIE,GAAGlF,EAAIvD,GAAG0D,EAAKH,EAAIlN,UAAUzD,aAKnDyQ,EAAO0D,EAAStX,W,cC7GpB,MAAM,QAAC2T,GAAW,EAAQ,KAE1B,IAAIC,EAEJ,MAAME,EACJ,gBAAkB,OAAOF,EAAKG,OAC9B,aAAa3F,GAAQ,OAAOwF,EAAKI,OAAO5F,GACxC,YAAY6F,EAAK7F,GAAQ,OAAOwF,EAAKM,MAAMD,EAAK7F,GAChD,UAAU6F,EAAK7F,GAAQ,OAAO,IAAIX,WAAWmG,EAAKO,OAAOzG,OAAQuG,EAAK7F,GACtE,WAAW6F,EAAK7F,GAAQ,OAAO,IAAI7M,YAAYqS,EAAKO,OAAOzG,OAAQuG,EAAK7F,GAExE,qBAAqB6F,EAAK7F,GACxB,IAAIjL,EAAQ2Q,EAAIvD,GAAG0D,EAAK7F,GAAMjL,QAC9B,OAAQyQ,EAAKM,MAAMD,EAAK7F,GAAOjL,GA4BnClD,EAAOD,QAAU,CACfiN,OAzBF,SAAgBS,EAAQ9M,EAAOC,EAAQuM,GACrC,MAAM6G,EAAMH,EAAIgB,MAAMpH,EAAO9G,QAE7B,OADAkN,EAAIvD,GAAG0D,EAAKvG,EAAO9G,QAAQ5C,IAAI0J,GACxBoG,EAAImF,cAAcrF,EAAK3G,OAAOgH,EAAKrT,EAAOC,EAAQuM,GAAU0G,EAAIlN,WAuBvEkH,OApBF,SAAgBJ,EAAQ9M,EAAOC,GAC7B,MAAMqX,EAAOpE,EAAIgB,MAAMpH,EAAO9G,QAC9BkN,EAAIvD,GAAG2H,EAAMxK,EAAO9G,QAAQ5C,IAAI0J,GAChC,MAAMuG,EAAML,EAAK9F,OAAOoK,EAAMxK,EAAO9G,OAAQhG,EAAOC,GAEpD,GAAI,IAAMoT,EAAK,MAAM,IAAIzP,MAAM,yBAC/B,GAAI,IAAMyP,EAAK,MAAM,IAAIzP,MAAM,gCAE/B,MAAMuJ,EAAc,CAClBnN,MAAOgT,EAAKsF,aAAajF,GACzBpT,OAAQ+S,EAAKuF,cAAclF,GAC3BhG,OAAQ2F,EAAKwF,cAAcnF,GAC3BvG,OAAQoG,EAAIvD,GAAGqD,EAAKyF,cAAcpF,GAAMH,EAAIlN,UAAUzD,SAGxD,OAAQyQ,EAAK0F,YAAYrF,GAAMlG,GAO/B,aACE,GAAI6F,EAAM,OACV,MAAMqD,EAAY,qBAAsBC,YAClCjX,QAAeiX,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiCxD,0BAAgCyD,MAAKvV,GAAKoV,EAAYpV,EAAIA,EAAEwV,iBACjLC,QAAiBJ,YAAYK,YAAYtX,GAE/C2T,EAAO0D,EAAStX,W,cCnDpB,MAAM,QAAC2T,GAAW,EAAQ,KAE1B,IAAIC,EAEJ,MAAME,EACJ,gBAAkB,OAAOF,EAAKG,OAC9B,aAAa3F,GAAQ,OAAOwF,EAAKI,OAAO5F,GACxC,YAAY6F,EAAK7F,GAAQ,OAAOwF,EAAKM,MAAMD,EAAK7F,GAChD,UAAU6F,EAAK7F,GAAQ,OAAO,IAAIX,WAAWmG,EAAKO,OAAOzG,OAAQuG,EAAK7F,GACtE,WAAW6F,EAAK7F,GAAQ,OAAO,IAAI7M,YAAYqS,EAAKO,OAAOzG,OAAQuG,EAAK7F,GAExE,qBAAqB6F,EAAK7F,GACxB,IAAIjL,EAAQ2Q,EAAIvD,GAAG0D,EAAK7F,GAAMjL,QAC9B,OAAQyQ,EAAKM,MAAMD,EAAK7F,GAAOjL,GAqBnClD,EAAOD,QAAU,CACb0O,UAlBJ,SAAmBhB,EAAQ6L,EAAK3K,GAC5B,MAAMsJ,EAAOpE,EAAIgB,MAAMpH,EAAO9G,QAC9BkN,EAAIvD,GAAG2H,EAAMxK,EAAO9G,QAAQ5C,IAAI0J,GAChC,MAAMuG,EAAML,EAAKlF,UAAUwJ,EAAMxK,EAAO9G,OAAQ2S,EAAK3K,GAErD,GAAI,IAAMqF,EAAK,MAAM,IAAIzP,MAAM,wBAC/B,GAAI,IAAMyP,EAAK,MAAM,IAAIzP,MAAM,4BAE/B,MAAMuJ,EAAc,CAClBnN,MAAOgT,EAAK4F,gBAAgBvF,GAC5BpT,OAAQ+S,EAAK6F,iBAAiBxF,GAC9BvG,OAAQoG,EAAIvD,GAAGqD,EAAK8F,iBAAiBzF,GAAMH,EAAIlN,UAAUzD,SAG3D,OAAQyQ,EAAK+F,eAAe1F,GAAMlG,GAMlC,aACI,GAAI6F,EAAM,OACV,MAAMqD,EAAY,qBAAsBC,YAClCjX,QAAeiX,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiCxD,yBAA+ByD,MAAKvV,GAAKoV,EAAYpV,EAAIA,EAAEwV,iBAChLC,QAAiBJ,YAAYK,YAAYtX,GAE/C2T,EAAO0D,EAAStX,W,aC3CxB,MAAM,QAAC2T,GAAW,EAAQ,KAE1B,IAAIC,EAEJ,MAAME,EACJ,gBAAkB,OAAOF,EAAKG,OAC9B,aAAa3F,GAAQ,OAAOwF,EAAKI,OAAO5F,GACxC,YAAY6F,EAAK7F,GAAQ,OAAOwF,EAAKM,MAAMD,EAAK7F,GAChD,UAAU6F,EAAK7F,GAAQ,OAAO,IAAIX,WAAWmG,EAAKO,OAAOzG,OAAQuG,EAAK7F,GACtE,WAAW6F,EAAK7F,GAAQ,OAAO,IAAI7M,YAAYqS,EAAKO,OAAOzG,OAAQuG,EAAK7F,GAExE,qBAAqB6F,EAAK7F,GACxB,IAAIjL,EAAQ2Q,EAAIvD,GAAG0D,EAAK7F,GAAMjL,QAC9B,OAAQyQ,EAAKM,MAAMD,EAAK7F,GAAOjL,GAmBnClD,EAAOD,QAAU,CAChB8N,OAhBD,SAAgBJ,GACf,MAAMwK,EAAOpE,EAAIgB,MAAMpH,EAAO9G,QAC9BkN,EAAIvD,GAAG2H,EAAMxK,EAAO9G,QAAQ5C,IAAI0J,GAChC,MAAMuG,EAAML,EAAK9F,OAAOoK,EAAMxK,EAAO9G,QACrC,GAAI,IAAMqN,EAAK,MAAM,IAAIzP,MAAM,0BAE/B,MAAMuJ,EAAc,CACnBnN,MAAOgT,EAAKsF,aAAajF,GACzBpT,OAAQ+S,EAAKuF,cAAclF,GAC3BvG,OAAQoG,EAAIvD,GAAGqD,EAAKyF,cAAcpF,GAAMH,EAAIlN,UAAUzD,SAGvD,OAAQyQ,EAAK0F,YAAYrF,GAAMlG,GAM/B,aACC,GAAI6F,EAAM,OACV,MAAMqD,EAAY,qBAAsBC,YAClCjX,QAAeiX,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiCxD,0BAAgCyD,MAAKvV,GAAKoV,EAAYpV,EAAIA,EAAEwV,iBACjLC,QAAiBJ,YAAYK,YAAYtX,GAE/C2T,EAAO0D,EAAStX,W,cCzClB,MAAM,QAAC2T,GAAW,EAAQ,KAE1B,IAAIC,EAEJ,MAAME,EACJ,gBAAkB,OAAOF,EAAKG,OAC9B,aAAa3F,GAAQ,OAAOwF,EAAKI,OAAO5F,GACxC,YAAY6F,EAAK7F,GAAQ,OAAOwF,EAAKM,MAAMD,EAAK7F,GAChD,UAAU6F,EAAK7F,GAAQ,OAAO,IAAIX,WAAWmG,EAAKO,OAAOzG,OAAQuG,EAAK7F,GACtE,WAAW6F,EAAK7F,GAAQ,OAAO,IAAI7M,YAAYqS,EAAKO,OAAOzG,OAAQuG,EAAK7F,GAExE,qBAAqB6F,EAAK7F,GACxB,IAAIjL,EAAQ2Q,EAAIvD,GAAG0D,EAAK7F,GAAMjL,QAC9B,OAAQyQ,EAAKM,MAAMD,EAAK7F,GAAOjL,GAmBnClD,EAAOD,QAAU,CACfkR,SAhBF,SAAkBxD,EAAQR,EAAQ,GAChC,MAAM+G,EAAMH,EAAIgB,MAAMpH,EAAO9G,QAE7B,OADAkN,EAAIvD,GAAG0D,EAAKvG,EAAO9G,QAAQ5C,IAAI0J,GACxBoG,EAAImF,cAAcrF,EAAK1C,SAAS+C,EAAKvG,EAAO9G,OAAQsG,GAAQ4G,EAAIlN,WAcvEuK,WAXF,SAAoBzD,EAAQuK,EAAQ,GAClC,MAAMhE,EAAMH,EAAIgB,MAAMpH,EAAO9G,QAC7BkN,EAAIvD,GAAG0D,EAAKvG,EAAO9G,QAAQ5C,IAAI0J,GAC/B,MAAM7L,EAAI+R,EAAKzC,WAAW8C,EAAKvG,EAAO9G,OAAQqR,GAC9C,GAAI,IAAMpW,EAAG,MAAM,IAAI2C,MAAM,8BAE7B,OAAOsP,EAAImF,cAAcpX,EAAGiS,EAAIlN,WAOhC,aACE,GAAIgN,EAAM,OACV,MAAMqD,EAAY,qBAAsBC,YAClCjX,QAAeiX,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiCxD,0BAAgCyD,MAAKvV,GAAKoV,EAAYpV,EAAIA,EAAEwV,iBACjLC,QAAiBJ,YAAYK,YAAYtX,GAE/C2T,EAAO0D,EAAStX,YCzChB4Z,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqB9N,IAAjB+N,EACH,OAAOA,EAAa/Z,QAGrB,IAAIC,EAAS2Z,EAAyBE,GAAY,CAGjD9Z,QAAS,IAOV,OAHAga,EAAoBF,GAAU7Z,EAAQA,EAAOD,QAAS6Z,GAG/C5Z,EAAOD,QClBW6Z,CAAoB,K,MDF1CD","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new this(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new this(framebuffer.width, framebuffer.height);\n \n image.bitmap.set(framebuffer.buffer);\n \n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layout = new fontlib.Layout();\n\n layout.reset({\n wrap_style: wrapStyle === this.WRAP_STYLE_WORD ? 'word' : 'letter',\n max_width: Infinity === wrapWidth ? null : wrapWidth,\n });\n\n layout.append(font, text, { scale });\n const framebuffer = layout.rasterize(r, g, b);\n const image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n font.free();\n layout.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded GIF\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if ((view.getUint32(0, false) >>> 8) === 0x474946) { // GIF\n const decoder = new giflib.Decoder(data);\n const frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n \n wasm = instance.exports;\n },\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(delay, width, height, buffer, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, width, height, delay, quality);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n\n this.free();\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n }\n }\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = await WebAssembly.instantiate(module);\n\n\t\twasm = instance.exports;\n\t}\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","framebuffer","pixelType","format","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","Font","layout","Layout","reset","wrap_style","max_width","append","free","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","decoder","Decoder","frameData","delay","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","wasm","registry","mem","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","options","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","instantiate","streams","Map","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new this(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new this(framebuffer.width, framebuffer.height);\n \n image.bitmap.set(framebuffer.buffer);\n \n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layout = new fontlib.Layout();\n\n layout.reset({\n wrap_style: wrapStyle === this.WRAP_STYLE_WORD ? 'word' : 'letter',\n max_width: Infinity === wrapWidth ? null : wrapWidth,\n });\n\n layout.append(font, text, { scale });\n const framebuffer = layout.rasterize(r, g, b);\n const image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n font.free();\n layout.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded GIF\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n await giflib.init();\n\n if ((view.getUint32(0, false) >>> 8) === 0x474946) { // GIF\n const decoder = new giflib.Decoder(data);\n const frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n \n wasm = instance.exports;\n },\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(delay, width, height, buffer, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, width, height, delay, quality);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n\n this.free();\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n }\n }\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = await WebAssembly.instantiate(module);\n\n\t\twasm = instance.exports;\n\t}\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file From 605c3132a14b3ed253ceaa5114ffa5a6ff66f3ac Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sat, 13 Mar 2021 18:14:26 +0100 Subject: [PATCH 034/120] implement TextLayout for text rendering settings (cherry picked from commit e8ee7a35a0e58a5d309315eb819c72ae93e19d8d) --- ImageScript.js | 75 +++++++++++++++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 29 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index a81e294..45716db 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -440,7 +440,7 @@ class Image { if (width > this.width) width = this.width; if (height > this.height) height = this.height; - return this.__apply__(this.__crop__(x, y, width, height)); + return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height)); } /** @@ -1214,52 +1214,41 @@ class Image { return image; } - /** - * Wrap at individual characters. For use with {@link Image.renderText} - * @return {boolean} - */ - static get WRAP_STYLE_CHAR() { - return true; - } - - /** - * Wrap at word ends. For use with {@link Image.renderText} - * @return {boolean} - */ - static get WRAP_STYLE_WORD() { - return false; - } - /** * Creates a new image containing the rendered text. * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use * @param {number} scale Font size to use * @param {string} text Text to render * @param {number} color Text color to use - * @param {number} wrapWidth Image width before wrapping - * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR}) + * @param {TextLayout} layout The text layout to use * @return {Promise} The rendered text */ - static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) { + static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) { await fontlib.init(); font = new fontlib.Font(scale, font); const [r, g, b, a] = Image.colorToRGBA(color); - const layout = new fontlib.Layout(); - - layout.reset({ - wrap_style: wrapStyle === this.WRAP_STYLE_WORD ? 'word' : 'letter', - max_width: Infinity === wrapWidth ? null : wrapWidth, + const layoutOptions = new fontlib.Layout(); + layoutOptions.reset({ + max_width: layout.maxWidth, + max_height: layout.maxHeight, + wrap_style: layout.wrapStyle, + vertical_align: layout.verticalAlign, + horizontal_align: layout.horizontalAlign, + wrap_hard_breaks: layout.wrapHardBreaks }); - layout.append(font, text, { scale }); - const framebuffer = layout.rasterize(r, g, b); + layoutOptions.append(font, text, {scale}); + const framebuffer = layoutOptions.rasterize(r, g, b); const image = new this(framebuffer.width, framebuffer.height); image.bitmap.set(framebuffer.buffer); + if (image.height > layout.maxHeight) + image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines())); + font.free(); - layout.free(); + layoutOptions.free(); return image.opacity(a / 0xff); } @@ -1400,4 +1389,32 @@ class GIF extends Array { } } -module.exports = {Image, GIF, Frame}; +class TextLayout { + constructor({maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = {}) { + this.maxWidth = maxWidth ?? Infinity; + if (isNaN(this.maxWidth) || this.maxWidth < 1) + throw new RangeError('Invalid maxWidth'); + + this.maxHeight = maxHeight ?? Infinity; + if (isNaN(this.maxHeight) || this.maxHeight < 1) + throw new RangeError('Invalid maxHeight'); + + this.wrapStyle = wrapStyle ?? 'word'; + if (!['word', 'char'].includes(this.wrapStyle)) + throw new RangeError('Invalid wrapStyle'); + + this.verticalAlign = verticalAlign ?? 'left'; + if (!['left', 'center', 'right'].includes(this.verticalAlign)) + throw new RangeError('Invalid verticalAlign'); + + this.horizontalAlign = horizontalAlign ?? 'top'; + if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign)) + throw new RangeError('Invalid horizontalAlign'); + + this.wrapHardBreaks = wrapHardBreaks ?? true; + if (typeof this.wrapHardBreaks !== 'boolean') + throw new TypeError('Invalid wrapHardBreaks'); + } +} + +module.exports = {Image, GIF, Frame, TextLayout}; From d07fd2b9fe46852d466271a4e81b28cd0aedfcc4 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sun, 14 Mar 2021 15:18:13 +0100 Subject: [PATCH 035/120] TextLayout docs (cherry picked from commit 76647b6fabdaa3bdc3a84d232cbb53db9b5ef17a) --- ImageScript.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/ImageScript.js b/ImageScript.js index 45716db..32168d5 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1390,7 +1390,19 @@ class GIF extends Array { } class TextLayout { - constructor({maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = {}) { + /** + * Layout options for {@link renderText} + * @param {object} options + * @param {number} [options.maxWidth=Infinity] The texts max width + * @param {number} [options.maxHeight=Infinity] The texts max height + * @param {string} [options.wrapStyle='string'] The texts wrap style when reaching the max width (word, char) + * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right) + * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom) + * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters + */ + constructor(options) { + const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options ?? {}; + this.maxWidth = maxWidth ?? Infinity; if (isNaN(this.maxWidth) || this.maxWidth < 1) throw new RangeError('Invalid maxWidth'); From 4a6ed37b2f384251353ddb888dcb15e118751548 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sun, 14 Mar 2021 16:52:10 +0100 Subject: [PATCH 036/120] image type helpers, general decode() function for all image types (cherry picked from commit 97363e5dd1d840d6dd90ebf6d2a2295632ee9eee) --- ImageScript.js | 119 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 95 insertions(+), 24 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index 32168d5..ceb87bc 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -5,6 +5,13 @@ const jpeglib = require('./utils/wasm/jpeg'); const tifflib = require('./utils/wasm/tiff'); const giflib = require('./utils/wasm/gif'); +const MAGIC_NUMBERS = { + PNG: 0x89504e47, + JPEG: 0xffd8ff, + TIFF: 0x49492a00, + GIF: 0x474946 +}; + /** * Represents an image; provides utility functions */ @@ -49,11 +56,6 @@ class Image { return `Image<${this.width}x${this.height}>`; } - /** @private */ - static new(width, height) { - return new this(width, height); - } - /** * The images width * @returns {number} @@ -335,7 +337,7 @@ class Image { * @returns {Image} */ clone() { - const image = Image.new(this.width, this.height); + const image = new Image(this.width, this.height); image.bitmap.set(this.bitmap); return image; } @@ -1118,11 +1120,11 @@ class Image { view = new DataView(data.buffer, data.byteOffset, data.byteLength); } - if (view.getUint32(0, false) === 0x89504e47) { // PNG + if (ImageType.isPNG(view)) { // PNG const {width, height, pixels} = await png.decode(data); - image = new this(width, height); + image = new Image(width, height); image.bitmap.set(pixels); - } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG + } else if (ImageType.isJPEG(view)) { // JPEG await jpeglib.init(); const framebuffer = jpeglib.decode(data); @@ -1130,7 +1132,7 @@ class Image { const height = framebuffer.height; const pixelType = framebuffer.format; - image = new this(width, height); + image = new Image(width, height); const buffer = framebuffer.buffer; if (pixelType === 0) { @@ -1152,10 +1154,10 @@ class Image { image.bitmap[i + 3] = 0xff; } } - } else if (view.getUint32(0, false) === 0x49492a00) { + } else if (ImageType.isTIFF(view)) { // TIFF await tifflib.init(); const framebuffer = tifflib.decode(data); - image = new this(framebuffer.width, framebuffer.height); + image = new Image(framebuffer.width, framebuffer.height); image.bitmap.set(framebuffer.buffer); } else throw new Error('Unsupported image type'); @@ -1201,17 +1203,17 @@ class Image { if (mode === this.SVG_MODE_SCALE && size <= 0) throw new RangeError('SVG scale must be > 0'); if (mode !== this.SVG_MODE_SCALE && size < 1) - throw new RangeError('SVG size must be >= 1') + throw new RangeError('SVG size must be >= 1'); - if (typeof svg === 'string') svg = new TextEncoder().encode(svg); + if (typeof svg === 'string') svg = new TextEncoder().encode(svg); - await svglib.init(); - const framebuffer = svglib.rasterize(svg, mode, size); - const image = new this(framebuffer.width, framebuffer.height); - - image.bitmap.set(framebuffer.buffer); - - return image; + await svglib.init(); + const framebuffer = svglib.rasterize(svg, mode, size); + const image = new Image(framebuffer.width, framebuffer.height); + + image.bitmap.set(framebuffer.buffer); + + return image; } /** @@ -1240,7 +1242,7 @@ class Image { layoutOptions.append(font, text, {scale}); const framebuffer = layoutOptions.rasterize(r, g, b); - const image = new this(framebuffer.width, framebuffer.height); + const image = new Image(framebuffer.width, framebuffer.height); image.bitmap.set(framebuffer.buffer); @@ -1373,7 +1375,8 @@ class GIF extends Array { await giflib.init(); - if ((view.getUint32(0, false) >>> 8) === 0x474946) { // GIF + if (ImageType.isGIF(view)) { // GIF + await giflib.init(); const decoder = new giflib.Decoder(data); const frames = []; for (const frameData of decoder.frames()) { @@ -1429,4 +1432,72 @@ class TextLayout { } } -module.exports = {Image, GIF, Frame, TextLayout}; +class ImageType { + /** + * Gets an images type (png, jpeg, tiff, gif) + * @param {Buffer|Uint8Array} data The image binary to get the type of + * @returns {string|null} The image type (png, jpeg, tiff, gif, null) + */ + static getType(data) { + let view; + if (!ArrayBuffer.isView(data)) { + data = new Uint8Array(data); + view = new DataView(data.buffer); + } else { + data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + view = new DataView(data.buffer, data.byteOffset, data.byteLength); + } + + if (this.isPNG(view)) return 'png'; + if (this.isJPEG(view)) return 'jpeg'; + if (this.isTIFF(view)) return 'tiff'; + if (this.isGIF(view)) return 'gif'; + return null; + } + + /** + * @param {DataView} view + * @returns {boolean} + */ + static isPNG(view) { + return view.getUint32(0, false) === MAGIC_NUMBERS.PNG; + } + + /** + * @param {DataView} view + * @returns {boolean} + */ + static isJPEG(view) { + return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG; + } + + /** + * @param {DataView} view + * @returns {boolean} + */ + static isTIFF(view) { + return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF; + } + + /** + * @param {DataView} view + * @returns {boolean} + */ + static isGIF(view) { + return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF; + } +} + +/** + * Decodes the given image binary + * @param {Uint8Array|Buffer} data The image data + * @returns {Promise|Promise} The decoded image + */ +function decode(data) { + const type = ImageType.getType(data); + + if (type === 'gif') return GIF.decode(data); + return Image.decode(data); +} + +module.exports = {Image, GIF, Frame, TextLayout, ImageType, decode}; From 4aeb58e4b7ae62d340ceb57a172ae024a0ca8626 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sun, 14 Mar 2021 16:54:05 +0100 Subject: [PATCH 037/120] Image.new => new Image (cherry picked from commit f8d34c0299eb782af088f349ee094bdb89e2f765) --- ImageScript.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ImageScript.js b/ImageScript.js index ceb87bc..f99608e 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -864,7 +864,7 @@ class Image { ? Math.abs(this.width * cos) + Math.abs(this.height * sin) : this.height; - const out = Image.new(width, height); + const out = new Image(width, height); const out_cx = width / 2 - .5; const out_cy = height / 2 - .5; From f792d20fe53c743255715924796ddf6ab3ee3e8c Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sun, 14 Mar 2021 21:45:43 +0100 Subject: [PATCH 038/120] allow different sized frames TODO: needs decoder and encoder implementation (frame offset) (cherry picked from commit 557f2fb21c9debec5d5a1dbe6748f7176ca834cf) --- ImageScript.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index f99608e..a35a6ae 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1310,17 +1310,15 @@ class GIF extends Array { constructor(frames, loopCount = -1) { super(...frames); - this.width = frames[0].width; - this.height = frames[0].height; + this.width = Math.max(...frames.map(frame => frame.width)); + this.height = Math.max(...frames.map(frame => frame.height)); - for (const frame of this) { + // TODO: needs decoder and encoder implementation (frame offset for non-uniform sized frames) + + for (const frame of this) if (!(frame instanceof Frame)) throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`); - if (frame.width !== this.width) throw new Error('Frames have different widths'); - if (frame.height !== this.height) throw new Error('Frames have different heights'); - } - if (loopCount < -1 || isNaN(loopCount)) throw new RangeError('Invalid loop count'); @@ -1380,7 +1378,7 @@ class GIF extends Array { const decoder = new giflib.Decoder(data); const frames = []; for (const frameData of decoder.frames()) { - const frame = new Frame(frameData.width, frameData.height, frameData.delay); + const frame = new Frame(frameData.width, frameData.height, frameData.delay * 10); frame.bitmap.set(frameData.buffer); frames.push(frame); } From 80b91dafa37cfdd285ded02f473120d60a6476f6 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Mon, 15 Mar 2021 20:32:38 +0100 Subject: [PATCH 039/120] GIF frame count limiting (cherry picked from commit 7cd11ee7aed51b89ff6662799d380c9c7680e1c1) --- ImageScript.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index a35a6ae..0b03d7a 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1357,9 +1357,10 @@ class GIF extends Array { /** * Decodes a GIF image * @param {Buffer|Uint8Array} data The binary data to decode + * @param {number} [frameLimit=Infinity] How many frames to limit the GIF decoding to * @return {Promise} The decoded GIF */ - static async decode(data) { + static async decode(data, frameLimit = Infinity) { let image; let view; @@ -1378,6 +1379,9 @@ class GIF extends Array { const decoder = new giflib.Decoder(data); const frames = []; for (const frameData of decoder.frames()) { + if (frames.length >= frameLimit) + break; + const frame = new Frame(frameData.width, frameData.height, frameData.delay * 10); frame.bitmap.set(frameData.buffer); frames.push(frame); @@ -1489,12 +1493,13 @@ class ImageType { /** * Decodes the given image binary * @param {Uint8Array|Buffer} data The image data + * @param {number} [frameLimit=Infinity] How many frames to limit the GIF decoding to * @returns {Promise|Promise} The decoded image */ -function decode(data) { +function decode(data, frameLimit = Infinity) { const type = ImageType.getType(data); - if (type === 'gif') return GIF.decode(data); + if (type === 'gif') return GIF.decode(data, frameLimit); return Image.decode(data); } From f863b7aee476524f90f0691f6d00ad797b21f32e Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Mon, 15 Mar 2021 20:37:36 +0100 Subject: [PATCH 040/120] free gif decoder memory (cherry picked from commit b67f4906d107424dc5dd91556eab4c6e7539c15a) --- ImageScript.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ImageScript.js b/ImageScript.js index 0b03d7a..2322f08 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1387,6 +1387,8 @@ class GIF extends Array { frames.push(frame); } + decoder.free(); + image = new GIF(frames); } else throw new Error('Unsupported image type'); From eafbcbf6a4b25c98efdef50ad92d8d37ca234237 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Mon, 15 Mar 2021 20:40:00 +0100 Subject: [PATCH 041/120] gif decoder: don't auto free() (cherry picked from commit a43aee34e6c610090d1569b7ee1cf3a94877b130) --- utils/wasm/gif.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/utils/wasm/gif.js b/utils/wasm/gif.js index 1ba13b5..3da914e 100644 --- a/utils/wasm/gif.js +++ b/utils/wasm/gif.js @@ -70,8 +70,6 @@ class Decoder { *frames() { let frame; while (frame = this.frame()) yield frame; - - this.free(); } frame() { From 1a69f7bb3cf18993b671b995cff13e0f7f949948 Mon Sep 17 00:00:00 2001 From: evanwashere Date: Thu, 18 Mar 2021 11:13:57 -0400 Subject: [PATCH 042/120] gif frame offset support (cherry picked from commit 3588e8f478c91e8f345cf7a2f54d7d43ce9decca) --- .gitignore | 1 + ImageScript.js | 2 +- utils/wasm/gif.js | 6 ++++-- utils/wasm/gif.wasm | Bin 53702 -> 53794 bytes 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 4d53757..6268e56 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +old/ .idea/ .nyc_output/ coverage/ diff --git a/ImageScript.js b/ImageScript.js index 2322f08..21f1122 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1348,7 +1348,7 @@ class GIF extends Array { for (const frame of this) { if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames'); - encoder.add(~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality); + encoder.add(~~(frame.duration / 10), 0, 0, frame.width, frame.height, frame.bitmap, quality); } return encoder.u8(); diff --git a/utils/wasm/gif.js b/utils/wasm/gif.js index 3da914e..1689967 100644 --- a/utils/wasm/gif.js +++ b/utils/wasm/gif.js @@ -45,10 +45,10 @@ class Encoder { return u8; } - add(delay, width, height, buffer, quality) { + add(x, y, delay, width, height, buffer, quality) { const ptr = mem.alloc(buffer.length); mem.u8(ptr, buffer.length).set(buffer); - wasm.encoder_add(this.ptr, ptr, buffer.length, width, height, delay, quality); + wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, quality); } } @@ -79,6 +79,8 @@ class Decoder { if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame')); const framebuffer = { + x: wasm.decoder_frame_x(ptr), + y: wasm.decoder_frame_y(ptr), delay: wasm.decoder_frame_delay(ptr), width: wasm.decoder_frame_width(ptr), height: wasm.decoder_frame_height(ptr), diff --git a/utils/wasm/gif.wasm b/utils/wasm/gif.wasm index 622a4ff9063b6e1f0c7da06745fe1685bcd85fae..5cb2fd1e543086e3099799f6a9452148a98ce5b7 100644 GIT binary patch delta 3904 zcmb_fU2Gjk6`r5g_QhV$=mgQJ>ej0&L6#@yQ>r~Y4 zjgv~1_KK7W-fArpLMk*WNVP;NB8(7H`*0CaRS*wBR47P16u|=zEdmLN7m)eR?6u~IgjoI6 zu>85`DMFs?ubjW|g)g7KuzdE5%jcfGaP}%Ya?i*M?Bm5jeu{shXz-pxLp$5`uRL?U zevu7#w~t=D@XVJk*4ZbEpYi&UG5VW0K+lH{e`@5>v9ZZ<$fJ|SJpTA227j1%qOarV zV@bqC@Xz0i$@NU6)49K&XJab1Y<@?SeTJm!pR&*YieI~xn_ zOvO?=NuYTW%W)kThki4CX=vn}GtNRC=x{L!#JG+Jn8e!HZ152#BOdB_kTDt-M%9<| zq|5N65^9WRNvwmIg{0)0J(&RtfHU2h=_sYQMP{TGG5o5?hQup`);HHlZn}`(g9@`M z6LMJGz_fXPt%;E}5@9Do^TCg3UsXhLpC)-5mfj3~eKgJ$l z#P5H?nExjrgSdk>j35HfCQ5G$<<9>eW&Z!8ayv@!Z@DC7Nd!t&hA`L##^HvMS>lBV zA4FNMD-=pBX`N#_9$iMQ;NjtcrgufDB!Vh!+bxlHO<~(0Hbq(?vCC|1Y>X|DSW&*! zGq(kCv!#j{ysNsww(I7;`CYs6oi=5;UD-E(YS;Z^n=WtH{ad^4U+$}Wzz?;9nC5_v za3%Md?tF7XzpSG-CpP%C3H9;>VzTcg9TsZ-0qz$co$m{Mb8v(q`yhIXh56pl*J8B2 zFYoDhZ0|4l+THBaI~4=HF*ZW80p?M=0-x?nmj@yj-C7iBe{cSi@z=$ne$=P+N9)cJqoo=T!1kfceZR8IZr;4Z;tg% z3-Zm;v0@<*^SYLcX;>_s(0PdaD-98_Aw_2^AF3`PIAT~~5^-In@b+{y2`R1NfQFQS zJv@-Eh#or~k)?>TE+~U8-jv{yG~c||q@9I!3ZH?@@&^xzze1gy%W<`~laAYjavXg0 zaN#W*X0C~Ugz!LpgmwtG8u^d(XK=&R(+=DZDc8thLc_axWY!ivNQ&mB4bTKDY<}c6 zvv1}`@I-J{l1`JuMI2Ug(KMQDlmj&k!@&;gV(Qs*y*WvAm2UyOhC}cyG<&7uQZx+( zsx3;&&E{R#CNgQyw_Cz#x`rQ%r?~Dge3@8uf!}T{Sqwn3H2w;9KqMY;fp|jY5h}=7 zfZC!VEG)OUe(G}-Z-n_;YBU}izo?vkc&|Ie52MpL#1Eq3L%bhW(d%hfNNeX;>s2}B&PiV_O6?vMwmtgU@yS;&~B9@AN+ty6ubF| z=x<;OO1A2tvIX*Wsz9jxq2PE34V{sl^uC({#}1c!l{#wzOqb!%S$zGeiFN&Y0HKZcv%(r;0_|BO}BML}lBcZy}TJh^Mhv4Gffj3ajEg5+%7NM?f zbzrAP87{?;Gi_@fyah)Dxezn*Bn?Tm8$TaB0#!r|Bbxe!M@Lv}Pfxo2_~%v)3lIkL z*p>S%#E#?a6D0}>Ff7vo+itU!@?h$2%4-2C;jry++Op;6^*!mbwZOtbdj0o>bg&T( zTX0ZLp)R6FTwZHclDp|qwU^Fp9_%uCBJ6|Q zxr?k{bR(_f%?i1o#6&&du;;l2q`#g5$ZY-ZI27a)y-<0iZx!1-EY4q^e9)PA3CC0q zqa=4Gz6P;@S{@5%wZPX*mdfH6m-l!M9V+M)f41SlnW3)= zi7K74-6&URI!AdI8h4aOXprXuG-8xflEl}KgAE(Ix`%fckEOMJl8!O#dG%$GAyA+t z2ss#J7Sig~xn3CV7x>;|2r|2=Iz!aSN^vNCV7>CfjiZM;F*V4&uxx|SEmg~I)Ee$; NwQBvhKm2gtzW~8um9qc< delta 3779 zcmb_fU2Ggz6}~^?`JdgfW5;P6n>*9cx=Kt6q3hZvwePl$Yq`O88q)B9s(=m7BoWwI zoVG&Rg+u{FADRwQRjHLypu!J{8f1i!Qi*+tsv_|aq$2tNs8RcXM3MS{#6ywHckZlR zZxs+yNwjm%+y!z5cvN zr|QmLrW_@ebw-O?>Q%%`0`Hw2d9XCk4*WF(bHT*Z?>PAFGf z^qcNWJuQz|6D&}!@=hnNm{7qGlh_;R4L-_b$O9D|V2q}Pj%zFRB-A{K0_CY7ORz6u z0Vz3pPo}Mk065*9>5f8rU1VAs5z{Y;tRkKxw2r<)a?^(N7F3u~smft-70ddawI*iP zNW?iIhWCF-Gq*5PukvAWla}5#T1|*}adF(Q3$aN@?=rJZ8)9t4=V;c&MI8+VWh<^k zEOC`Gai)Y8t9Zy|&8D)n3j}niI37h~}v z=_QUw&5D)bgc1~z5_tVimIg$c6{xQK_K98f?VvO(Km{#JI)kDiwLFu$y8c+iG)ruQ z*PXN`06xHkOZ2-y8yK{P(LupdAD6)P--*;yzP4&v(hY4N=J&9i#JIJe+RCj@MFsrS zSMGE~p22Hrr}7nkGkvMAUF>&f`Vt>oTsl?rf>zg9M+IQE@BtXfC5qQTv9CEKH;Z=? zjH_Uf#_QyT7}td6=EIZq$O=0GSR}}lAwjuje!ERswk!X&UH82&|4wRRL8Zdx}^MT)eU~3 z8egh1<@H?ziPp-ss(a~TY;r~sp(YxgA=X3&AtzF#VYcRli!}* z6*!uW{nvLTx3Bj&%G!LV%oQ^jBFIZ~{R22@^W!>pP4{S&lp%$ec+>cTg{Lb)JDha{i zktHm`OUvY}wkjtcB`JiPN6FO21IY*P#j;N)`K_`8U3@9AV4N2&G-0PaIl52*XYI_O z1W;-+`3P3jOkWWH3YfCuPhk#AR7Ua}M+cA$=vGKs`nqwS1Pdm6@xs!r%mt4@0$W8f ztOGG3i4f~XlZ|nJKurMN4ud$gP0(#F((McC0HR?L2m`=WyQYnT-H1V*NudVDo3=?a z(nOzKz-fYt!!UA(<|{>jx6DB&`ru4zZ#9WfwQS%5kA%u5RFJU&Wxqk*8X$popg(|s z4#9_y=6`&AzHE;&4;=;u7lV@zAG@dDukicv5?1(r47|bz@evGr@fPLJ9NP!xZi?&x zHw;KUP6hI+sf|6~|KdxJ zb@nKq8ZSHcLJ5jhDK8!G=T5%=_=|QADvG{0*XhpPVHXzlcfrfFxxbsi5+d$Sd-4yD zf5z0O&556*EnC*|a3liNv-JY|^-!)#F=b7eo&}!-amZ>|kwrXzl0B&eWBf^7SltyD$MZnB24Y5}N#!?wd| z%b#CWA4_ws4F-->ci2d=4&T^vr*GmVsmZVq_SN}*#{*8024OFT5qHPf%7 z0kQHY&i(3PE9`-V=@tlHJm@MPAsZCk31AJ17&)WBL~p=h0>1@hu9gDGx!OO|Vkdnt zM$`{6qu6%C{Mm0mT$k002w*jgrbSkN0I`9792X$oA9N(n5?D zHdEdfXv6aM%ZD+w@HX9v>W?miTsTc{h(BUv{>tiuAmI0D@AG%}=I;5ggcjU@1<+%O zl`o%v#0F_$YUMZ1UmRpQ#%2qBwgR{@9%69DxQ_v8&&7bhS1g$4M^EkHasI)py#p2n ztYX@&t>8ieO;rLf!x7AU;LlGT>BUilf@a`S#)K+^k6G*b={H6O>|)lzaDcl(G5W1B LTz_Ew?*sn^k+gjV From 02fd66476251a6a639704be0121c046d2accb82f Mon Sep 17 00:00:00 2001 From: evanwashere Date: Thu, 18 Mar 2021 11:15:12 -0400 Subject: [PATCH 043/120] me when i brain (cherry picked from commit 070a87515a4ae2ef335deef5af1319577e1452bf) --- ImageScript.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ImageScript.js b/ImageScript.js index 21f1122..8fabd2b 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1348,7 +1348,7 @@ class GIF extends Array { for (const frame of this) { if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames'); - encoder.add(~~(frame.duration / 10), 0, 0, frame.width, frame.height, frame.bitmap, quality); + encoder.add(0, 0, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality); } return encoder.u8(); From b1a1ac69e841750b17e779912544382d26d22fda Mon Sep 17 00:00:00 2001 From: evanwashere Date: Thu, 18 Mar 2021 11:17:46 -0400 Subject: [PATCH 044/120] i am retard (cherry picked from commit a4b59e4c112f7a8f4d72d3a8692a21df97706a8c) --- utils/wasm/gif.wasm | Bin 53794 -> 53794 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/utils/wasm/gif.wasm b/utils/wasm/gif.wasm index 5cb2fd1e543086e3099799f6a9452148a98ce5b7..caa00ea8e67c7fbd5dc460613de69fad4760d2d0 100644 GIT binary patch delta 104 zcmZ3qgn7{t<_)JjRhi6~7BDe6K%fGX0=FBBg93+ReU_uFH!qU{lPfQ?0@LRAp1h1g zOajb~jEaIFr3y@rOl1m8lli=*7@0O}dOv4oWST7K-#B@zzcLex_2fc-#mzVTy_x{R CDj1Xi delta 100 zcmZ3qgn7{t<_)JjRawlK7BDe6K%fGP0=FBBg93+ReU_uFH!qU{iz_d)0?X$2p1h1g yECS4qjEaIFr3x&LOl1lzlli=*7+E%JdOv4oWSK1J-^j#dJ-N`|W%CVxuO Date: Sat, 20 Mar 2021 16:13:22 +0100 Subject: [PATCH 045/120] GIF xy offset support (cherry picked from commit 44b7bf94b41a71dd76345bc54ebfb24326e079cc) --- ImageScript.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index 8fabd2b..c0a9d84 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1266,14 +1266,18 @@ class Frame extends Image { * @param {number} width * @param {number} height * @param {number} [duration = 100] The frames duration (in ms) + * @param {number} [xOffset=0] The frames offset on the x-axis + * @param {number} [yOffset=0] The frames offset on the y-axis * @return {Frame} */ - constructor(width, height, duration = 100) { + constructor(width, height, duration = 100, xOffset = 0, yOffset = 0) { if (isNaN(duration) || duration < 0) throw new RangeError('Invalid frame duration'); super(width, height); this.duration = duration; + this.xOffset = xOffset; + this.yOffset = yOffset; } toString() { @@ -1284,12 +1288,14 @@ class Frame extends Image { * Converts an Image instance to a Frame, cloning it in the process * @param {Image} image The image to create the frame from * @param {number} [duration = 100] The frames duration (in ms) + * @param {number} [xOffset=0] The frames offset on the x-axis + * @param {number} [yOffset=0] The frames offset on the y-axis * @return {Frame} */ - static from(image, duration) { + static from(image, duration, xOffset, yOffset) { if (!(image instanceof Image)) throw new TypeError('Invalid image passed'); - const frame = new Frame(image.width, image.height, duration); + const frame = new Frame(image.width, image.height, duration, xOffset, yOffset); frame.bitmap.set(image.bitmap); return frame; @@ -1348,7 +1354,7 @@ class GIF extends Array { for (const frame of this) { if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames'); - encoder.add(0, 0, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality); + encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality); } return encoder.u8(); @@ -1382,7 +1388,7 @@ class GIF extends Array { if (frames.length >= frameLimit) break; - const frame = new Frame(frameData.width, frameData.height, frameData.delay * 10); + const frame = new Frame(frameData.width, frameData.height, frameData.delay * 10, frameData.x, frameData.y); frame.bitmap.set(frameData.buffer); frames.push(frame); } From 42197490db84ff615bb0f8be8a04349f6c5dc8a1 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sun, 21 Mar 2021 15:49:04 +0100 Subject: [PATCH 046/120] allow encoding of only a single frame (cherry picked from commit f8b8f3239f89c14bca1c9404c22cd3e42109fe4e) --- ImageScript.js | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index c0a9d84..7367c47 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1319,8 +1319,6 @@ class GIF extends Array { this.width = Math.max(...frames.map(frame => frame.width)); this.height = Math.max(...frames.map(frame => frame.height)); - // TODO: needs decoder and encoder implementation (frame offset for non-uniform sized frames) - for (const frame of this) if (!(frame instanceof Frame)) throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`); @@ -1363,10 +1361,10 @@ class GIF extends Array { /** * Decodes a GIF image * @param {Buffer|Uint8Array} data The binary data to decode - * @param {number} [frameLimit=Infinity] How many frames to limit the GIF decoding to + * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame * @return {Promise} The decoded GIF */ - static async decode(data, frameLimit = Infinity) { + static async decode(data, onlyExtractFirstFrame = false) { let image; let view; @@ -1383,14 +1381,14 @@ class GIF extends Array { if (ImageType.isGIF(view)) { // GIF await giflib.init(); const decoder = new giflib.Decoder(data); - const frames = []; + let frames = []; for (const frameData of decoder.frames()) { - if (frames.length >= frameLimit) - break; - const frame = new Frame(frameData.width, frameData.height, frameData.delay * 10, frameData.x, frameData.y); frame.bitmap.set(frameData.buffer); frames.push(frame); + + if (onlyExtractFirstFrame) + break; } decoder.free(); @@ -1501,13 +1499,14 @@ class ImageType { /** * Decodes the given image binary * @param {Uint8Array|Buffer} data The image data - * @param {number} [frameLimit=Infinity] How many frames to limit the GIF decoding to - * @returns {Promise|Promise} The decoded image + * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame + * @returns {Promise} The decoded image */ -function decode(data, frameLimit = Infinity) { +function decode(data, onlyExtractFirstFrame) { const type = ImageType.getType(data); - if (type === 'gif') return GIF.decode(data, frameLimit); + if (type === 'gif') + return GIF.decode(data, onlyExtractFirstFrame); return Image.decode(data); } From 2d101496f8273c23b1f2f4949ae78f12a5df3181 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sun, 21 Mar 2021 15:49:21 +0100 Subject: [PATCH 047/120] fix iterators (cherry picked from commit 07178e472bbbde15c0e20525aabe77b9b56f00e5) --- ImageScript.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index 7367c47..0b83eea 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -88,7 +88,6 @@ class Image { /** * Yields an [x,y,color] array for every pixel in the image * @yields {[number, number, number]} The coordinates and color of the pixel - * @returns {void} */ * iterateWithColors() { let offset = 0; @@ -1333,12 +1332,17 @@ class GIF extends Array { return `GIF<${this.width}x${this.height}x${this.duration}ms>`; } + * [Symbol.iterator]() { + for (let i = 0; i < this.length; i++) + yield this[i]; + } + /** * The GIFs duration (in ms) * @return {number} */ get duration() { - return [...this].reduce((acc, frame) => acc + frame.duration, 0); + return this.reduce((acc, frame) => acc + frame.duration, 0); } /** From 68dc5a4b8af8c02b54f46e116246b8c5d636317b Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sun, 21 Mar 2021 18:42:12 +0100 Subject: [PATCH 048/120] fisheye effect (explode/implode) (cherry picked from commit b535bbacf124ac6a5e54dd7eb49eda4dd4a9d3e9) --- ImageScript.js | 30 ++++++++++++++++++++++++++++++ tests/fisheye.js | 15 +++++++++++++++ tests/targets/fisheye.png | Bin 0 -> 773012 bytes 3 files changed, 45 insertions(+) create mode 100644 tests/fisheye.js create mode 100644 tests/targets/fisheye.png diff --git a/ImageScript.js b/ImageScript.js index 0b83eea..89a99c0 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1083,6 +1083,36 @@ class Image { }; } + fisheye(radius = 2) { + const r = new Image(this.width, this.height); + + const w = this.width; + const h = this.height; + const tu32 = this.__u32__; + const ru32 = r.__u32__; + const iw = 1 / w; + const ih = 1 / h; + + for (const [x, y] of this) { + const xco = x * iw - .5; + const yco = y * ih - .5; + const dfc = Math.sqrt(xco ** 2 + yco ** 2); + const dis = 2 * dfc ** radius; + const nx = ((dis * xco / dfc + 0.5) * w) | 0; + const ny = ((dis * yco / dfc + 0.5) * h) | 0; + + if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny)) + continue; + + ru32[y * w + x] = tu32[w * ny + nx]; + } + + const cO = tu32.length * .5 + w / 2; + ru32[cO] = tu32[cO]; + + return this.__apply__(r); + } + /** * Encodes the image into a PNG * @param {number} compression The compression level to use (0-3) diff --git a/tests/fisheye.js b/tests/fisheye.js new file mode 100644 index 0000000..888d62c --- /dev/null +++ b/tests/fisheye.js @@ -0,0 +1,15 @@ +const fs = require('fs').promises; +const {Image} = require('../ImageScript'); + +(async () => { + const input = await fs.readFile('./tests/targets/external.png'); + + const image = await Image.decode(input); + image.fisheye(); + + const output = await image.encode(); + const target = await fs.readFile('./tests/targets/fisheye.png'); + + if (!Buffer.from(target).equals(Buffer.from(output))) + process.exit(1); +})(); diff --git a/tests/targets/fisheye.png b/tests/targets/fisheye.png new file mode 100644 index 0000000000000000000000000000000000000000..7d4c418da180d45434b671b3d6bfcdff3a088c70 GIT binary patch literal 773012 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

    AO+avBjxX!}^SvZ{d+wB2N@}Dtd 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≫kNEmt^r}cN-fk8 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

    *q_|6?jNO#N#2(!9H!G{-=S-g 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ⅇ$b!Z(qnk-x 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

    e&N_L@vY*<{~N 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

    !J_yCLcd( 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 Date: Mon, 5 Apr 2021 16:24:24 +0200 Subject: [PATCH 049/120] __apply__: support Frames (cherry picked from commit 5e4af27cafa79837fbfed334174765641b55904d) --- ImageScript.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index 89a99c0..7ebf2d1 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -954,8 +954,8 @@ class Image { /** * @private - * @param {Image} image - * @returns {Image} + * @param {Image|Frame} image + * @returns {Image|Frame} */ __apply__(image) { this.__width__ = image.__width__; @@ -964,6 +964,9 @@ class Image { this.__u32__ = image.__u32__; this.bitmap = image.bitmap; + if (image instanceof Frame) + return Frame.from(this, image.duration); + return this; } From 3920ebff01cd7ed6a3bd12348b07baa592f7b705 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Mon, 5 Apr 2021 16:32:54 +0200 Subject: [PATCH 050/120] 1.2.0 (cherry picked from commit 7a1b7cf3c164dd11b929016ccc47dc1c2d8bd00d) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 104ec3c..8238f59 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "imagescript", - "version": "1.1.20", + "version": "1.2.0", "description": "zero-dependency javascript image manipulation", "main": "ImageScript.js", "type": "commonjs", From 70a9e58b9c51a125bb755080d56f5c89625c58f3 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Mon, 5 Apr 2021 16:51:51 +0200 Subject: [PATCH 051/120] update readme (cherry picked from commit 3c8e8614e138c1d7cf512f5805fcb7aecd3a475a) --- README.md | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 3b77dc7..cd2c4ef 100644 --- a/README.md +++ b/README.md @@ -14,23 +14,27 @@ It can achieve much more performant results by utilizing lower-level memory acce --- ### Features -- [Decoding images](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#decode) +- [Decoding images](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#decode) - PNGs (grayscale, RGB, indexed colors) with and without alpha channels - JPEGs (grayscale, RGB, CMYK) - TIFFs -- [Rendering SVGs](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#rendersvg) -- [Rendering vector fonts](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#rendertext) -- Image manipulation functions ([crop](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#crop) - , [rotate](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#rotate) - , [composite](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#composite), ...) -- Color manipulation functions ([invert](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#invert) - , [hueShift](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#hueshift), ...) +- [Decoding GIFs](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.gif.html#decode) +- [Rendering SVGs](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#rendersvg) +- [Rendering vector fonts](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#rendertext) +- Image manipulation + functions ([crop](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#crop) + , [rotate](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#rotate) + , [composite](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#composite), ...) +- Color manipulation + functions ([invert](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#invert) + , [hueShift](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#hueshift), ...) - Color information - functions ([averageColor](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#averagecolor) - , [dominantColor](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#dominantcolor), ...) -- Encoding images as [PNGs](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#encode) - , [JPEGs](https://oss-is.dreadful.tech/classes/_imagescript_.image.html#encodejpeg) + functions ([averageColor](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#averagecolor) + , [dominantColor](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#dominantcolor), ...) +- Encoding images as [PNGs](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#encode) + , [JPEGs](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#encodejpeg) and [GIFs](https://oss-is.dreadful.tech/classes/_imagescript_.gif.html#encode) +- [Encoding GIFs](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.gif.html#encode) --- From 77098f938d7b5aa62c43f76d5f291ac2f79c724b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 5 Apr 2021 15:01:44 +0000 Subject: [PATCH 052/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index 7b515c5..ae51f1b 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,i)=>{const r=i(347),s=i(723),n=i(876),o=i(327),a=i(76),h=i(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}static new(t,e){return new this(t,e)}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let i=1;i<=this.width;i++)yield[i,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,i,r){return((255&t)<<24|(255&e)<<16|(255&i)<<8|255&r)>>>0}static rgbToColor(t,e,i){return l.rgbaToColor(t,e,i,255)}static hslaToColor(t,e,i,r){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),i=Math.min(1,Math.max(0,i)),r=Math.min(1,Math.max(0,r)),0===e)s=n=o=i;else{const r=(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),a=i<.5?i*(1+e):i+e-i*e,h=2*i-a;s=r(h,a,t+1/3),n=r(h,a,t),o=r(h,a,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*r)}static hslToColor(t,e,i){return l.hslaToColor(t,e,i,1)}static rgbaToHSLA(t,e,i,r){t/=255,e/=255,i/=255;const s=Math.max(t,e,i),n=Math.min(t,e,i);let o,a,h=(s+n)/2;if(s===n)o=a=0;else{const r=s-n;switch(a=h>.5?r/(2-s-n):r/(s+n),s){case t:o=(e-i)/r+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const i=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(i,i+4)}setPixelAt(t,e,i){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,i),this}__set_pixel__(t,e,i){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),i,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let i=1;i<=this.height;i++)for(let r=1;r<=this.width;r++)this.__view__.setUint32(e,t(r,i),!1),e+=4}return this}clone(){const t=l.new(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__scale__(t,e);return this.__apply__(i)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__resize__(t,e,i);return this.__apply__(r)}__resize__(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let r;if(i!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return r=this.__resize_nearest_neighbor__(t,e),r}__resize_nearest_neighbor__(t,e){const i=new this.constructor(t,e);for(let r=0;rthis.width&&(i=this.width),r>this.height&&(r=this.height),this.__apply__(this.__crop__(t,e,i,r))}__crop__(t,e,i,r){t=~~t,e=~~e;const s=new this.constructor(i,r);for(let n=0;nthis.width||o>this.height)continue;const a=s(r,n);this.__set_pixel__(i,o,a)}return this}__fast_box__(t,e,i,r,s){t<0&&(i+=t,t=1),e<0&&(r+=e,e=1);const n=Math.max(Math.min(t+i,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const a=4*(n+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+r,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,i,r){const s=i**2;for(let n=Math.max(1,e-i);n<=Math.min(e+i,this.height);n++)for(let o=Math.max(1,t-i);o<=Math.min(t+i,this.width);o++)(o-t)**2+(n-e)**2i?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/i*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,i){for(let r=i;r{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,n,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((i,r)=>{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,t*(e?1:n),o,a)}))}composite(t,e=0,i=0){e=~~e,i=~~i;for(let r=0;r=this.height)break;for(let i=0;i=this.width)break;const o=4*(n+s*this.width),a=t.__view__.getUint32(4*(i+r*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,l.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const i=255&t,r=i+1,s=256-i;return(255&r*(t>>>24)+s*(e>>>24)>>8)<<24|(255&r*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&r*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(i,255&e)}invert(){for(const[t,e,i]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-i&4294967040|255&i);return this}invertValue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,s,1-n,o))}return this}invertSaturation(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,1-s,n,o))}return this}invertHue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(1-r,s,n,o))}return this}hueShift(t){for(const[e,i,r]of this.iterateWithColors()){const[s,n,o,a]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(e,i,l.hslaToColor(s+t/360,n,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let i=0;it/e)),255)}dominantColor(t=!0,e=!0,i=15){const r=new Array(262143);for(let s=0;s~~(63*t)));if(t&&h63-i)continue;const _=o<<12|a<<6|h;r[_]=(r[_]||0)+1}let s=-1,n=0;if(r.forEach(((t,e)=>{t>>12&63,a=n>>>6&63,h=63&n;return l.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const i=Math.PI*(t/180),r=Math.sin(i),s=Math.cos(i),n=e?Math.abs(this.width*r)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*r):this.height,a=l.new(n,o),h=n/2-.5,_=o/2-.5,c=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=c-r*(u-_),i=f+s*(u-_);do{const n=e+s*(t-h),o=i+r*(t-h);l.__interpolate__(this,a,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),i=e.map((t=>parseFloat(t[0]))),r=e.map((t=>t[1]));if(0===i.length)throw new RangeError("Invalid gradient point count");if(1===i.length)return()=>r[0];if(2===i.length){const t=this.__gradient__(r[0],r[1]);return e=>e<=i[0]?r[0]:e>=i[1]?r[1]:t((e-i[0])/(i[1]-i[0]))}const s=Math.min(...i),n=Math.max(...i);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}return this}static __gradient__(t,e){const i=t>>>24,r=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-i,a=(e>>16&255)-r,h=(e>>8&255)-s,l=(255&e)-n;return t=>(255&i+t*o)<<24|(255&r+t*a)<<16|(255&s+t*h)<<8|255&n+t*l}async encode(t=1){return await r.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),2303741511===i.getUint32(0,!1)){const{width:i,height:s,pixels:n}=await r.decode(t);e=new this(i,s),e.bitmap.set(n)}else if(i.getUint32(0,!1)>>>8==16767231){await o.init();const i=o.decode(t),r=i.width,s=i.height,n=i.format;e=new this(r,s);const a=i.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(i!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const r=n.rasterize(t,i,e),s=new this(r.width,r.height);return s.bitmap.set(r.buffer),s}static get WRAP_STYLE_CHAR(){return!0}static get WRAP_STYLE_WORD(){return!1}static async renderText(t,e,i,r=4294967295,n=1/0,o=this.WRAP_STYLE_WORD){await s.init(),t=new s.Font(e,t);const[a,h,_,c]=l.colorToRGBA(r),f=new s.Layout;f.reset({wrap_style:o===this.WRAP_STYLE_WORD?"word":"letter",max_width:1/0===n?null:n}),f.append(t,i,{scale:e});const u=f.rasterize(a,h,_),w=new this(u.width,u.height);return w.bitmap.set(u.buffer),t.free(),f.free(),w.opacity(c/255)}}class _ extends l{constructor(t,e,i=100){if(isNaN(i)||i<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=i}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e){if(!(t instanceof l))throw new TypeError("Invalid image passed");const i=new _(t.width,t.height,e);return i.bitmap.set(t.bitmap),i}}class c extends Array{constructor(t,e=-1){super(...t),this.width=t[0].width,this.height=t[0].height;for(const t of this){if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(t.width!==this.width)throw new Error("Frames have different widths");if(t.height!==this.height)throw new Error("Frames have different heights")}if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}get duration(){return[...this].reduce(((t,e)=>t+e.duration),0)}async encode(t=10){await h.init();const e=new h.Encoder(this.width,this.height,this.loopCount);for(const i of this){if(!(i instanceof _))throw new Error("GIF contains invalid frames");e.add(~~(i.duration/10),i.width,i.height,i.bitmap,t)}return e.u8()}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),await h.init(),i.getUint32(0,!1)>>>8!=4671814)throw new Error("Unsupported image type");{const i=new h.Decoder(t),r=[];for(const t of i.frames()){const e=new _(t.width,t.height,t.delay);e.bitmap.set(t.buffer),r.push(e)}e=new c(r)}return e}}t.exports={Image:l,GIF:c,Frame:_}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.1.20","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let i=0;for(const r of t)e.set(r,i),i+=r.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let i=0,r=4294967295;for(;i>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8;for(;i>>8;return(4294967295^r)>>>0}},347:(t,e,i)=>{const r=i(883),s=i(354),{init:n,compress:o,decompress:a}=i(423),h=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),_=new Uint8Array([73,69,78,68]),c=r(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:i,channels:s,depth:a=8,level:w=0}){let g=0,d=0;const p=e*s,m=new Uint8Array(i+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,i,r,s){let n=0;if(0===i){for(;n{const{version:r}=i(306);let s,n=null;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}const a="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),h="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const i=o.alloc(e.length);if(o.u8(i,e.length).set(e),this.ptr=s.font_new(i,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const i=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),r=JSON.parse(h(o.u8(s.font_metrics_buffer(i),o.length())));return s.font_metrics_free(i),r}rasterize(t,e=this.scale){const i=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),r={buffer:o.u8(s.font_rasterize_buffer(i),o.length()).slice(),metrics:JSON.parse(h(o.u8(s.font_rasterize_metrics(i),o.length())))};return s.font_rasterize_free(i),r}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=a(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,i){e=a(e);const r=i||{};n&&this.refs.push(t);const h=o.alloc(e.length);o.u8(h,e.length).set(e);const l="r"in r||"g"in r||"b"in r;s.layout_append(this.ptr,t.ptr,h,e.length,null==r.scale?t.scale:r.scale,l,r.r,r.g,r.b)}rasterize(t,e,i){const r=s.layout_rasterize(this.ptr,t,e,i),n={width:s.layout_rasterize_width(r),height:s.layout_rasterize_height(r),buffer:o.u8(s.layout_rasterize_buffer(r),o.length()).slice()};return s.layout_rasterize_free(r),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},667:(t,e,i)=>{const{version:r}=i(306);let s;const n=new Map;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={Encoder:class{constructor(t,e,i=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,i)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const i of this.slices)e.set(i,t),t+=i.length;return e}add(t,e,i,r,n){const a=o.alloc(r.length);o.u8(a,r.length).set(r),s.encoder_add(this.ptr,a,r.length,e,i,t,n)}},Decoder:class{constructor(t,e=0){const i=o.alloc(t.length);if(o.u8(i,t.length).set(t),this.ptr=s.decoder_new(i,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t;this.free()}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:o.u8(s.decoder_frame_buffer(t),o.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e,{env:{push_to_stream(t,e){n.get(t).cb(o.u8(e,o.length()).slice())}}});s=i.exports}}},327:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={encode:function(t,e,i,r){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,i,r),n.length())},decode:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.decode(r,t.length,e,i);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},876:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={rasterize:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.rasterize(r,t.length,e,i);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},76:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const i=s.decode(e,t.length);if(0===i)throw new Error("tiff: failed to decode");const r={width:s.decode_width(i),height:s.decode_height(i),buffer:n.u8(s.decode_buffer(i),n.length()).slice()};return s.decode_free(i),r},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},423:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={compress:function(t,e=3){const i=n.alloc(t.length);return n.u8(i,t.length).set(t),n.copy_and_free(s.compress(i,t.length,e),n.length())},decompress:function(t,e=0){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const r=s.decompress(i,t.length,e);if(0===r)throw new Error("zlib: failed to decompress");return n.copy_and_free(r,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}}},e={},function i(r){var s=e[r];if(void 0!==s)return s.exports;var n=e[r]={exports:{}};return t[r](n,n.exports,i),n.exports}(655);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,i)=>{const r=i(347),s=i(723),n=i(876),a=i(327),o=i(76),h=i(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let i=1;i<=this.width;i++)yield[i,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,i,r){return((255&t)<<24|(255&e)<<16|(255&i)<<8|255&r)>>>0}static rgbToColor(t,e,i){return l.rgbaToColor(t,e,i,255)}static hslaToColor(t,e,i,r){let s,n,a;if(t%=1,e=Math.min(1,Math.max(0,e)),i=Math.min(1,Math.max(0,i)),r=Math.min(1,Math.max(0,r)),0===e)s=n=a=i;else{const r=(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),o=i<.5?i*(1+e):i+e-i*e,h=2*i-o;s=r(h,o,t+1/3),n=r(h,o,t),a=r(h,o,t-1/3)}return l.rgbaToColor(255*s,255*n,255*a,255*r)}static hslToColor(t,e,i){return l.hslaToColor(t,e,i,1)}static rgbaToHSLA(t,e,i,r){t/=255,e/=255,i/=255;const s=Math.max(t,e,i),n=Math.min(t,e,i);let a,o,h=(s+n)/2;if(s===n)a=o=0;else{const r=s-n;switch(o=h>.5?r/(2-s-n):r/(s+n),s){case t:a=(e-i)/r+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const i=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(i,i+4)}setPixelAt(t,e,i){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,i),this}__set_pixel__(t,e,i){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),i,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let i=1;i<=this.height;i++)for(let r=1;r<=this.width;r++)this.__view__.setUint32(e,t(r,i),!1),e+=4}return this}clone(){const t=new l(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__scale__(t,e);return this.__apply__(i)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__resize__(t,e,i);return this.__apply__(r)}__resize__(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let r;if(i!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return r=this.__resize_nearest_neighbor__(t,e),r}__resize_nearest_neighbor__(t,e){const i=new this.constructor(t,e);for(let r=0;rthis.width&&(i=this.width),r>this.height&&(r=this.height),this.__apply__(this.__crop__(~~t,~~e,~~i,~~r))}__crop__(t,e,i,r){t=~~t,e=~~e;const s=new this.constructor(i,r);for(let n=0;nthis.width||a>this.height)continue;const o=s(r,n);this.__set_pixel__(i,a,o)}return this}__fast_box__(t,e,i,r,s){t<0&&(i+=t,t=1),e<0&&(r+=e,e=1);const n=Math.max(Math.min(t+i,this.width),1);let a=n;for(;t<=--a;)this.__view__.setUint32(4*(a+e*this.width),s);const o=4*(n+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+r,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,o);return this}drawCircle(t,e,i,r){const s=i**2;for(let n=Math.max(1,e-i);n<=Math.min(e+i,this.height);n++)for(let a=Math.max(1,t-i);a<=Math.min(t+i,this.width);a++)(a-t)**2+(n-e)**2i?this.bitmap[o]=0:e&&(this.bitmap[o]*=Math.max(0,Math.min(1,1-a/i*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,i){for(let r=i;r{const[s,n,a,o]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,n,t*(e?1:a),o)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((i,r)=>{const[s,n,a,o]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,t*(e?1:n),a,o)}))}composite(t,e=0,i=0){e=~~e,i=~~i;for(let r=0;r=this.height)break;for(let i=0;i=this.width)break;const a=4*(n+s*this.width),o=t.__view__.getUint32(4*(i+r*t.width),!1),h=this.__view__.getUint32(a,!1);255==(255&o)?this.__view__.setUint32(a,o,!1):0==(255&o)?this.__view__.setUint32(a,h,!1):this.__view__.setUint32(a,l.__alpha_blend__(o,h),!1)}}}return this}static __alpha_blend__(t,e){const i=255&t,r=i+1,s=256-i;return(255&r*(t>>>24)+s*(e>>>24)>>8)<<24|(255&r*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&r*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(i,255&e)}invert(){for(const[t,e,i]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-i&4294967040|255&i);return this}invertValue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,a]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,s,1-n,a))}return this}invertSaturation(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,a]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,1-s,n,a))}return this}invertHue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,a]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(1-r,s,n,a))}return this}hueShift(t){for(const[e,i,r]of this.iterateWithColors()){const[s,n,a,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(e,i,l.hslaToColor(s+t/360,n,a,o))}return this}averageColor(){let t=[0,0,0],e=0;for(let i=0;it/e)),255)}dominantColor(t=!0,e=!0,i=15){const r=new Array(262143);for(let s=0;s~~(63*t)));if(t&&h63-i)continue;const c=a<<12|o<<6|h;r[c]=(r[c]||0)+1}let s=-1,n=0;if(r.forEach(((t,e)=>{t>>12&63,o=n>>>6&63,h=63&n;return l.hslaToColor(a/63,o/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const i=Math.PI*(t/180),r=Math.sin(i),s=Math.cos(i),n=e?Math.abs(this.width*r)+Math.abs(this.height*s):this.width,a=e?Math.abs(this.width*s)+Math.abs(this.height*r):this.height,o=new l(n,a),h=n/2-.5,c=a/2-.5,_=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=_-r*(u-c),i=f+s*(u-c);do{const n=e+s*(t-h),a=i+r*(t-h);l.__interpolate__(this,o,t,u,n,a)}while(t++0&&e>0&&tt[0]-e[0])),i=e.map((t=>parseFloat(t[0]))),r=e.map((t=>t[1]));if(0===i.length)throw new RangeError("Invalid gradient point count");if(1===i.length)return()=>r[0];if(2===i.length){const t=this.__gradient__(r[0],r[1]);return e=>e<=i[0]?r[0]:e>=i[1]?r[1]:t((e-i[0])/(i[1]-i[0]))}const s=Math.min(...i),n=Math.max(...i);let a=[];for(let t=0;t{if(t<=s)return a[0].gradient(0);if(t>=n)return a[a.length-1].gradient(1);for(const e of a)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}return this}static __gradient__(t,e){const i=t>>>24,r=t>>16&255,s=t>>8&255,n=255&t,a=(e>>>24)-i,o=(e>>16&255)-r,h=(e>>8&255)-s,l=(255&e)-n;return t=>(255&i+t*a)<<24|(255&r+t*o)<<16|(255&s+t*h)<<8|255&n+t*l}fisheye(t=2){const e=new l(this.width,this.height),i=this.width,r=this.height,s=this.__u32__,n=e.__u32__,a=1/i,o=1/r;for(const[e,h]of this){const l=e*a-.5,c=h*o-.5,_=Math.sqrt(l**2+c**2),f=2*_**t,u=(f*l/_+.5)*i|0,w=(f*c/_+.5)*r|0;u<1||u>i||w<1||w>r||isNaN(u)||isNaN(w)||(n[h*i+e]=s[i*w+u])}const h=.5*s.length+i/2;return n[h]=s[h],this.__apply__(e)}async encode(t=1){return await r.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await a.init(),a.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),u.isPNG(i)){const{width:i,height:s,pixels:n}=await r.decode(t);e=new l(i,s),e.bitmap.set(n)}else if(u.isJPEG(i)){await a.init();const i=a.decode(t),r=i.width,s=i.height,n=i.format;e=new l(r,s);const o=i.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(i!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const r=n.rasterize(t,i,e),s=new l(r.width,r.height);return s.bitmap.set(r.buffer),s}static async renderText(t,e,i,r=4294967295,n=new f){await s.init(),t=new s.Font(e,t);const[a,o,h,c]=l.colorToRGBA(r),_=new s.Layout;_.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),_.append(t,i,{scale:e});const u=_.rasterize(a,o,h),w=new l(u.width,u.height);return w.bitmap.set(u.buffer),w.height>n.maxHeight&&w.crop(0,0,w.width,Math.floor(_.lines()/w.height*n.maxHeight)*(w.height/_.lines())),t.free(),_.free(),w.opacity(c/255)}}class c extends l{constructor(t,e,i=100,r=0,s=0){if(isNaN(i)||i<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=i,this.xOffset=r,this.yOffset=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,i,r){if(!(t instanceof l))throw new TypeError("Invalid image passed");const s=new c(t.width,t.height,e,i,r);return s.bitmap.set(t.bitmap),s}}class _ extends Array{constructor(t,e=-1){super(...t),this.width=Math.max(...t.map((t=>t.width))),this.height=Math.max(...t.map((t=>t.height)));for(const t of this)if(!(t instanceof c))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=10){await h.init();const e=new h.Encoder(this.width,this.height,this.loopCount);for(const i of this){if(!(i instanceof c))throw new Error("GIF contains invalid frames");e.add(i.xOffset,i.yOffset,~~(i.duration/10),i.width,i.height,i.bitmap,t)}return e.u8()}static async decode(t,e=!1){let i,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),await h.init(),!u.isGIF(r))throw new Error("Unsupported image type");{await h.init();const r=new h.Decoder(t);let s=[];for(const t of r.frames()){const i=new c(t.width,t.height,10*t.delay,t.x,t.y);if(i.bitmap.set(t.buffer),s.push(i),e)break}r.free(),i=new _(s)}return i}}class f{constructor(t){const{maxWidth:e,maxHeight:i,wrapStyle:r,verticalAlign:s,horizontalAlign:n,wrapHardBreaks:a}=t??{};if(this.maxWidth=e??1/0,isNaN(this.maxWidth)||this.maxWidth<1)throw new RangeError("Invalid maxWidth");if(this.maxHeight=i??1/0,isNaN(this.maxHeight)||this.maxHeight<1)throw new RangeError("Invalid maxHeight");if(this.wrapStyle=r??"word",!["word","char"].includes(this.wrapStyle))throw new RangeError("Invalid wrapStyle");if(this.verticalAlign=s??"left",!["left","center","right"].includes(this.verticalAlign))throw new RangeError("Invalid verticalAlign");if(this.horizontalAlign=n??"top",!["top","middle","bottom"].includes(this.horizontalAlign))throw new RangeError("Invalid horizontalAlign");if(this.wrapHardBreaks=a??!0,"boolean"!=typeof this.wrapHardBreaks)throw new TypeError("Invalid wrapHardBreaks")}}class u{static getType(t){let e;return ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),e=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),e=new DataView(t.buffer)),this.isPNG(e)?"png":this.isJPEG(e)?"jpeg":this.isTIFF(e)?"tiff":this.isGIF(e)?"gif":null}static isPNG(t){return 2303741511===t.getUint32(0,!1)}static isJPEG(t){return t.getUint32(0,!1)>>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:l,GIF:_,Frame:c,TextLayout:f,ImageType:u,decode:function(t,e){return"gif"===u.getType(t)?_.decode(t,e):l.decode(t)}}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.0","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let i=0;for(const r of t)e.set(r,i),i+=r.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let i=0,r=4294967295;for(;i>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8;for(;i>>8;return(4294967295^r)>>>0}},347:(t,e,i)=>{const r=i(883),s=i(354),{init:n,compress:a,decompress:o}=i(423),h=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),c=new Uint8Array([73,69,78,68]),_=r(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:i,channels:s,depth:o=8,level:w=0}){let g=0,d=0;const p=e*s,m=new Uint8Array(i+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,i,r,s){let n=0;if(0===i){for(;n{const{version:r}=i(306);let s,n=null;class a{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=a.u8(t,e).slice();return s.wfree(t,e),i}}const o="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),h="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const i=a.alloc(e.length);if(a.u8(i,e.length).set(e),this.ptr=s.font_new(i,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const i=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),r=JSON.parse(h(a.u8(s.font_metrics_buffer(i),a.length())));return s.font_metrics_free(i),r}rasterize(t,e=this.scale){const i=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),r={buffer:a.u8(s.font_rasterize_buffer(i),a.length()).slice(),metrics:JSON.parse(h(a.u8(s.font_rasterize_metrics(i),a.length())))};return s.font_rasterize_free(i),r}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=o(JSON.stringify(t)),n&&(this.refs.length=0);const e=a.alloc(t.length);a.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,i){e=o(e);const r=i||{};n&&this.refs.push(t);const h=a.alloc(e.length);a.u8(h,e.length).set(e);const l="r"in r||"g"in r||"b"in r;s.layout_append(this.ptr,t.ptr,h,e.length,null==r.scale?t.scale:r.scale,l,r.r,r.g,r.b)}rasterize(t,e,i){const r=s.layout_rasterize(this.ptr,t,e,i),n={width:s.layout_rasterize_width(r),height:s.layout_rasterize_height(r),buffer:a.u8(s.layout_rasterize_buffer(r),a.length()).slice()};return s.layout_rasterize_free(r),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},667:(t,e,i)=>{const{version:r}=i(306);let s;const n=new Map;class a{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=a.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={Encoder:class{constructor(t,e,i=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,i)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const i of this.slices)e.set(i,t),t+=i.length;return e}add(t,e,i,r,n,o,h){const l=a.alloc(o.length);a.u8(l,o.length).set(o),s.encoder_add(this.ptr,l,o.length,t,e,r,n,i,h)}},Decoder:class{constructor(t,e=0){const i=a.alloc(t.length);if(a.u8(i,t.length).set(t),this.ptr=s.decoder_new(i,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:s.decoder_frame_x(t),y:s.decoder_frame_y(t),delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:a.u8(s.decoder_frame_buffer(t),a.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e,{env:{push_to_stream(t,e){n.get(t).cb(a.u8(e,a.length()).slice())}}});s=i.exports}}},327:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={encode:function(t,e,i,r){const a=n.alloc(t.length);return n.u8(a,t.length).set(t),n.copy_and_free(s.encode(a,e,i,r),n.length())},decode:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const a=s.decode(r,t.length,e,i);if(0===a)throw new Error("jpg: failed to decode");if(1===a)throw new Error("jpg: failed to scale decoder");const o={width:s.decode_width(a),height:s.decode_height(a),format:s.decode_format(a),buffer:n.u8(s.decode_buffer(a),n.length()).slice()};return s.decode_free(a),o},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},876:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={rasterize:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const a=s.rasterize(r,t.length,e,i);if(0===a)throw new Error("svg: failed to parse");if(1===a)throw new Error("svg: failed to rasterize");const o={width:s.rasterize_width(a),height:s.rasterize_height(a),buffer:n.u8(s.rasterize_buffer(a),n.length()).slice()};return s.rasterize_free(a),o},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},76:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const i=s.decode(e,t.length);if(0===i)throw new Error("tiff: failed to decode");const r={width:s.decode_width(i),height:s.decode_height(i),buffer:n.u8(s.decode_buffer(i),n.length()).slice()};return s.decode_free(i),r},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},423:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={compress:function(t,e=3){const i=n.alloc(t.length);return n.u8(i,t.length).set(t),n.copy_and_free(s.compress(i,t.length,e),n.length())},decompress:function(t,e=0){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const r=s.decompress(i,t.length,e);if(0===r)throw new Error("zlib: failed to decompress");return n.copy_and_free(r,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}}},e={},function i(r){var s=e[r];if(void 0!==s)return s.exports;var n=e[r]={exports:{}};return t[r](n,n.exports,i),n.exports}(655);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index 26e473f..60d224a 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","new","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","compression","encode","level","channels","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","pixels","decode","framebuffer","pixelType","format","pixel","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","text","wrapWidth","Infinity","wrapStyle","WRAP_STYLE_WORD","Font","layout","Layout","reset","wrap_style","max_width","append","free","Frame","duration","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","decoder","Decoder","frameData","delay","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","wasm","registry","mem","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","options","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","instantiate","streams","Map","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /** @private */\n static new(width, height) {\n return new this(width, height);\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n * @returns {void}\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = Image.new(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(x, y, width, height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = Image.new(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image} image\n * @returns {Image}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (view.getUint32(0, false) === 0x89504e47) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new this(width, height);\n image.bitmap.set(pixels);\n } else if ((view.getUint32(0, false) >>> 8) === 0xffd8ff) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new this(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (view.getUint32(0, false) === 0x49492a00) {\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new this(framebuffer.width, framebuffer.height);\n \n image.bitmap.set(framebuffer.buffer);\n \n return image;\n }\n\n /**\n * Wrap at individual characters. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_CHAR() {\n return true;\n }\n\n /**\n * Wrap at word ends. For use with {@link Image.renderText}\n * @return {boolean}\n */\n static get WRAP_STYLE_WORD() {\n return false;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {number} wrapWidth Image width before wrapping\n * @param {boolean} wrapStyle Whether to break at words ({@link WRAP_STYLE_WORD}) or at characters ({@link WRAP_STYLE_CHAR})\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, wrapWidth = Infinity, wrapStyle = this.WRAP_STYLE_WORD) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layout = new fontlib.Layout();\n\n layout.reset({\n wrap_style: wrapStyle === this.WRAP_STYLE_WORD ? 'word' : 'letter',\n max_width: Infinity === wrapWidth ? null : wrapWidth,\n });\n\n layout.append(font, text, { scale });\n const framebuffer = layout.rasterize(r, g, b);\n const image = new this(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n font.free();\n layout.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n constructor(width, height, duration = 100) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @return {Frame}\n */\n static from(image, duration) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = frames[0].width;\n this.height = frames[0].height;\n\n for (const frame of this) {\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (frame.width !== this.width) throw new Error('Frames have different widths');\n if (frame.height !== this.height) throw new Error('Frames have different heights');\n }\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return [...this].reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded GIF\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n await giflib.init();\n\n if ((view.getUint32(0, false) >>> 8) === 0x474946) { // GIF\n const decoder = new giflib.Decoder(data);\n const frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n}\n\nmodule.exports = {Image, GIF, Frame};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n \n wasm = instance.exports;\n },\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(delay, width, height, buffer, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, width, height, delay, quality);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n\n this.free();\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n }\n }\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = await WebAssembly.instantiate(module);\n\n\t\twasm = instance.exports;\n\t}\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","compression","encode","level","channels","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","text","layout","TextLayout","Font","layoutOptions","Layout","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","crop","lines","free","xOffset","yOffset","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","frameData","delay","options","Infinity","getType","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","wasm","registry","mem","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","instantiate","streams","Map","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1');\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {TextLayout} layout The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new fontlib.Layout();\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = Math.max(...frames.map(frame => frame.width));\n this.height = Math.max(...frames.map(frame => frame.height));\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n await giflib.init();\n\n if (ImageType.isGIF(view)) { // GIF\n await giflib.init();\n const decoder = new giflib.Decoder(data);\n let frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay * 10, frameData.x, frameData.y);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n\n if (onlyExtractFirstFrame)\n break;\n }\n\n decoder.free();\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} options\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='string'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options ?? {};\n\n this.maxWidth = maxWidth ?? Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight ?? Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle ?? 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign ?? 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign ?? 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks ?? true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n \n wasm = instance.exports;\n },\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, quality);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n }\n }\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = await WebAssembly.instantiate(module);\n\n\t\twasm = instance.exports;\n\t}\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file From 41cb5936885e7236972e0401c8a81fae2ff79a3f Mon Sep 17 00:00:00 2001 From: evanwashere Date: Sun, 11 Apr 2021 12:48:49 -0400 Subject: [PATCH 053/120] gif or jif (cherry picked from commit 46b181fc550477d6943624244468e98d04fb7e2c) --- ImageScript.js | 2 +- utils/wasm/gif.js | 21 +++++++++++++++++++-- utils/wasm/gif.wasm | Bin 53794 -> 54399 bytes 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index 7ebf2d1..bb55f04 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1389,7 +1389,7 @@ class GIF extends Array { for (const frame of this) { if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames'); - encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality); + encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, 0, quality); } return encoder.u8(); diff --git a/utils/wasm/gif.js b/utils/wasm/gif.js index 1689967..c8543fd 100644 --- a/utils/wasm/gif.js +++ b/utils/wasm/gif.js @@ -45,10 +45,26 @@ class Encoder { return u8; } - add(x, y, delay, width, height, buffer, quality) { + add(x, y, delay, width, height, buffer, dispose, quality) { const ptr = mem.alloc(buffer.length); mem.u8(ptr, buffer.length).set(buffer); - wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, quality); + wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality); + } + + set comment(comment) { + const buffer = Deno.core.encode(comment); + + const ptr = mem.alloc(buffer.length); + mem.u8(ptr, buffer.length).set(buffer); + wasm.encoder_add_comment(this.ptr, ptr, buffer.length); + } + + set application(application) { + const buffer = Deno.core.encode(application); + + const ptr = mem.alloc(buffer.length); + mem.u8(ptr, buffer.length).set(buffer); + wasm.encoder_add_application(this.ptr, ptr, buffer.length); } } @@ -84,6 +100,7 @@ class Decoder { delay: wasm.decoder_frame_delay(ptr), width: wasm.decoder_frame_width(ptr), height: wasm.decoder_frame_height(ptr), + dispose: wasm.decode_frame_dispose(ptr), buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(), }; diff --git a/utils/wasm/gif.wasm b/utils/wasm/gif.wasm index caa00ea8e67c7fbd5dc460613de69fad4760d2d0..9a43d2384027aeb94224654ea63dc8e63e3b5fdc 100644 GIT binary patch literal 54399 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 literal 53794 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 Date: Sun, 11 Apr 2021 12:52:21 -0400 Subject: [PATCH 054/120] i am retard (cherry picked from commit 4c2226ebd5658cefb1f1a4e600dbe51ecaba414a) --- ImageScript.js | 2 +- utils/wasm/gif.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index bb55f04..99568b8 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1389,7 +1389,7 @@ class GIF extends Array { for (const frame of this) { if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames'); - encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, 0, quality); + encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, 1, quality); } return encoder.u8(); diff --git a/utils/wasm/gif.js b/utils/wasm/gif.js index c8543fd..65e7756 100644 --- a/utils/wasm/gif.js +++ b/utils/wasm/gif.js @@ -100,7 +100,7 @@ class Decoder { delay: wasm.decoder_frame_delay(ptr), width: wasm.decoder_frame_width(ptr), height: wasm.decoder_frame_height(ptr), - dispose: wasm.decode_frame_dispose(ptr), + dispose: wasm.decoder_frame_dispose(ptr), buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(), }; From 3d35256a78428efd565e27fb379a849aec77cb9e Mon Sep 17 00:00:00 2001 From: evanwashere Date: Sun, 11 Apr 2021 12:55:20 -0400 Subject: [PATCH 055/120] make it universal (cherry picked from commit 8494c4a6181e339f8650a808fdb94e538548056e) --- utils/wasm/gif.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/utils/wasm/gif.js b/utils/wasm/gif.js index 65e7756..b3a4c7c 100644 --- a/utils/wasm/gif.js +++ b/utils/wasm/gif.js @@ -2,6 +2,7 @@ const {version} = require('../../package.json'); let wasm; const streams = new Map; +const utf8encoder = new TextEncoder; class mem { static length() { return wasm.wlen(); } @@ -52,7 +53,7 @@ class Encoder { } set comment(comment) { - const buffer = Deno.core.encode(comment); + const buffer = utf8encoder.encode(comment); const ptr = mem.alloc(buffer.length); mem.u8(ptr, buffer.length).set(buffer); @@ -60,7 +61,7 @@ class Encoder { } set application(application) { - const buffer = Deno.core.encode(application); + const buffer = utf8encoder.encode(application); const ptr = mem.alloc(buffer.length); mem.u8(ptr, buffer.length).set(buffer); From db373d7d35c7b5fa0b0a53a93d59d93cf58d3e37 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sat, 17 Apr 2021 16:47:56 +0200 Subject: [PATCH 056/120] gif/frame resize helper (cherry picked from commit bdd37042709e54bc4443bb7bb97cb069ff3d83cf) --- ImageScript.js | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index 99568b8..ba7761a 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1332,6 +1332,18 @@ class Frame extends Image { return frame; } + + resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) { + const originalWidth = this.width; + const originalHeight = this.height; + + const result = super.resize(width, height, mode); + + this.xOffset *= result.width / originalWidth; + this.yOffset *= result.height / originalHeight; + + return result; + } } /** @@ -1348,9 +1360,6 @@ class GIF extends Array { constructor(frames, loopCount = -1) { super(...frames); - this.width = Math.max(...frames.map(frame => frame.width)); - this.height = Math.max(...frames.map(frame => frame.height)); - for (const frame of this) if (!(frame instanceof Frame)) throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`); @@ -1361,6 +1370,28 @@ class GIF extends Array { this.loopCount = loopCount; } + get width() { + let max = 0; + for (const frame of this) { + let width = frame.width + frame.xOffset; + if (max < width) + max = width; + } + + return max; + } + + get height() { + let max = 0; + for (const frame of this) { + let height = frame.height + frame.yOffset; + if (max < height) + max = height; + } + + return max; + } + toString() { return `GIF<${this.width}x${this.height}x${this.duration}ms>`; } @@ -1435,6 +1466,11 @@ class GIF extends Array { return image; } + + resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) { + for (const frame of this) + frame.resize(width, height, mode); + } } class TextLayout { From c6cad66c54c0106f88b1c9962bbcb973267c6dd5 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Wed, 21 Apr 2021 15:03:24 +0200 Subject: [PATCH 057/120] support node 12 (cherry picked from commit 5aa11b3c15a2413dca3aa07e9018d392d5deac97) --- ImageScript.js | 65 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index ba7761a..7bf4b2f 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1116,13 +1116,56 @@ class Image { return this.__apply__(r); } + /** + * @typedef {object} PNGMetadata + * @property {string} [title] The images title + * @property {string} [author] The images author + * @property {string} [description] The images description + * @property {string} [copyright] The images copyright info + * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp + * @property {string} [software="github.com/matmen/ImageScript vX.X.X"] The software used to create this image + * @property {string} [disclaimer] A disclaimer for the image + * @property {string} [warning] A warning for the image + * @property {string} [source] The images source + * @property {string} [comment] A comment for the image + */ + /** * Encodes the image into a PNG * @param {number} compression The compression level to use (0-3) + * @param {PNGMetadata} [meta={}] Image metadata * @return {Promise} The encoded data */ - async encode(compression = 1) { - return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4}); + async encode(compression = 1, { + title, + author, + description, + copyright, + creationTime, + software, + disclaimer, + warning, + source, + comment + } = {}) { + return await png.encode(this.bitmap, { + width: this.width, + height: this.height, + level: compression, + channels: 4, + text: { + Title: title, + Author: author, + Description: description, + Copyright: copyright, + 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(), + Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software, + Disclaimer: disclaimer, + Warning: warning, + Source: source, + Comment: comment + } + }); } /** @@ -1476,38 +1519,38 @@ class GIF extends Array { class TextLayout { /** * Layout options for {@link renderText} - * @param {object} options + * @param {object} [options] * @param {number} [options.maxWidth=Infinity] The texts max width * @param {number} [options.maxHeight=Infinity] The texts max height - * @param {string} [options.wrapStyle='string'] The texts wrap style when reaching the max width (word, char) + * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char) * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right) * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom) * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters */ constructor(options) { - const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options ?? {}; + const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {}; - this.maxWidth = maxWidth ?? Infinity; + this.maxWidth = maxWidth || Infinity; if (isNaN(this.maxWidth) || this.maxWidth < 1) throw new RangeError('Invalid maxWidth'); - this.maxHeight = maxHeight ?? Infinity; + this.maxHeight = maxHeight || Infinity; if (isNaN(this.maxHeight) || this.maxHeight < 1) throw new RangeError('Invalid maxHeight'); - this.wrapStyle = wrapStyle ?? 'word'; + this.wrapStyle = wrapStyle || 'word'; if (!['word', 'char'].includes(this.wrapStyle)) throw new RangeError('Invalid wrapStyle'); - this.verticalAlign = verticalAlign ?? 'left'; + this.verticalAlign = verticalAlign || 'left'; if (!['left', 'center', 'right'].includes(this.verticalAlign)) throw new RangeError('Invalid verticalAlign'); - this.horizontalAlign = horizontalAlign ?? 'top'; + this.horizontalAlign = horizontalAlign || 'top'; if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign)) throw new RangeError('Invalid horizontalAlign'); - this.wrapHardBreaks = wrapHardBreaks ?? true; + this.wrapHardBreaks = wrapHardBreaks || true; if (typeof this.wrapHardBreaks !== 'boolean') throw new TypeError('Invalid wrapHardBreaks'); } From af6adf324ce90e50507000117002183272529d6f Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Wed, 21 Apr 2021 15:03:56 +0200 Subject: [PATCH 058/120] 1.2.2 (cherry picked from commit 42dc07917d886161e89d50bed6e6e3187f8fb7a5) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8238f59..0a3b813 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "imagescript", - "version": "1.2.0", + "version": "1.2.2", "description": "zero-dependency javascript image manipulation", "main": "ImageScript.js", "type": "commonjs", From 2e00c0377edfdb2d5aca17779831d2cad752f165 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sat, 24 Apr 2021 21:04:25 +0200 Subject: [PATCH 059/120] api: support disposal modes (cherry picked from commit 3f09bcf2ff00550707940d920839c56e531435b4) --- ImageScript.js | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index 7bf4b2f..d7d25e6 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -965,7 +965,7 @@ class Image { this.bitmap = image.bitmap; if (image instanceof Frame) - return Frame.from(this, image.duration); + return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode); return this; } @@ -1336,6 +1336,30 @@ class Image { * @extends Image */ class Frame extends Image { + /** + * GIF frame disposal mode KEEP. For use with {@link Frame} + * @returns {number} + */ + static get DISPOSAL_KEEP() { + return 1; + } + + /** + * GIF frame disposal mode PREVIOUS. For use with {@link Frame} + * @returns {number} + */ + static get DISPOSAL_PREVIOUS() { + return 2; + } + + /** + * GIF frame disposal mode BACKGROUND. For use with {@link Frame} + * @returns {number} + */ + static get DISPOSAL_BACKGROUND() { + return 3; + } + /** * Creates a new, blank frame * @param {number} width @@ -1343,9 +1367,10 @@ class Frame extends Image { * @param {number} [duration = 100] The frames duration (in ms) * @param {number} [xOffset=0] The frames offset on the x-axis * @param {number} [yOffset=0] The frames offset on the y-axis + * @param {number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode * @return {Frame} */ - constructor(width, height, duration = 100, xOffset = 0, yOffset = 0) { + constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) { if (isNaN(duration) || duration < 0) throw new RangeError('Invalid frame duration'); @@ -1353,6 +1378,7 @@ class Frame extends Image { this.duration = duration; this.xOffset = xOffset; this.yOffset = yOffset; + this.disposalMode = disposalMode; } toString() { @@ -1365,12 +1391,13 @@ class Frame extends Image { * @param {number} [duration = 100] The frames duration (in ms) * @param {number} [xOffset=0] The frames offset on the x-axis * @param {number} [yOffset=0] The frames offset on the y-axis + * @param {number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode * @return {Frame} */ - static from(image, duration, xOffset, yOffset) { + static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) { if (!(image instanceof Image)) throw new TypeError('Invalid image passed'); - const frame = new Frame(image.width, image.height, duration, xOffset, yOffset); + const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode); frame.bitmap.set(image.bitmap); return frame; @@ -1463,7 +1490,7 @@ class GIF extends Array { for (const frame of this) { if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames'); - encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, 1, quality); + encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality); } return encoder.u8(); @@ -1494,7 +1521,7 @@ class GIF extends Array { const decoder = new giflib.Decoder(data); let frames = []; for (const frameData of decoder.frames()) { - const frame = new Frame(frameData.width, frameData.height, frameData.delay * 10, frameData.x, frameData.y); + const frame = new Frame(frameData.width, frameData.height, frameData.delay * 10, frameData.x, frameData.y, frameData.dispose); frame.bitmap.set(frameData.buffer); frames.push(frame); From 168162a2e887120c05b911e9d7be5753d286ed45 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sat, 24 Apr 2021 21:07:48 +0200 Subject: [PATCH 060/120] 1.2.3 (cherry picked from commit ab79aec7c18d0a783afbcba64933a5ce325df370) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0a3b813..7c857e0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "imagescript", - "version": "1.2.2", + "version": "1.2.3", "description": "zero-dependency javascript image manipulation", "main": "ImageScript.js", "type": "commonjs", From 6b6713b0294fb782090f42a9a3513d879859e530 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 24 Apr 2021 19:11:50 +0000 Subject: [PATCH 061/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index ae51f1b..70f055c 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,i)=>{const r=i(347),s=i(723),n=i(876),a=i(327),o=i(76),h=i(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let i=1;i<=this.width;i++)yield[i,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,i,r){return((255&t)<<24|(255&e)<<16|(255&i)<<8|255&r)>>>0}static rgbToColor(t,e,i){return l.rgbaToColor(t,e,i,255)}static hslaToColor(t,e,i,r){let s,n,a;if(t%=1,e=Math.min(1,Math.max(0,e)),i=Math.min(1,Math.max(0,i)),r=Math.min(1,Math.max(0,r)),0===e)s=n=a=i;else{const r=(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),o=i<.5?i*(1+e):i+e-i*e,h=2*i-o;s=r(h,o,t+1/3),n=r(h,o,t),a=r(h,o,t-1/3)}return l.rgbaToColor(255*s,255*n,255*a,255*r)}static hslToColor(t,e,i){return l.hslaToColor(t,e,i,1)}static rgbaToHSLA(t,e,i,r){t/=255,e/=255,i/=255;const s=Math.max(t,e,i),n=Math.min(t,e,i);let a,o,h=(s+n)/2;if(s===n)a=o=0;else{const r=s-n;switch(o=h>.5?r/(2-s-n):r/(s+n),s){case t:a=(e-i)/r+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const i=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(i,i+4)}setPixelAt(t,e,i){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,i),this}__set_pixel__(t,e,i){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),i,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let i=1;i<=this.height;i++)for(let r=1;r<=this.width;r++)this.__view__.setUint32(e,t(r,i),!1),e+=4}return this}clone(){const t=new l(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__scale__(t,e);return this.__apply__(i)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__resize__(t,e,i);return this.__apply__(r)}__resize__(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let r;if(i!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return r=this.__resize_nearest_neighbor__(t,e),r}__resize_nearest_neighbor__(t,e){const i=new this.constructor(t,e);for(let r=0;rthis.width&&(i=this.width),r>this.height&&(r=this.height),this.__apply__(this.__crop__(~~t,~~e,~~i,~~r))}__crop__(t,e,i,r){t=~~t,e=~~e;const s=new this.constructor(i,r);for(let n=0;nthis.width||a>this.height)continue;const o=s(r,n);this.__set_pixel__(i,a,o)}return this}__fast_box__(t,e,i,r,s){t<0&&(i+=t,t=1),e<0&&(r+=e,e=1);const n=Math.max(Math.min(t+i,this.width),1);let a=n;for(;t<=--a;)this.__view__.setUint32(4*(a+e*this.width),s);const o=4*(n+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+r,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,o);return this}drawCircle(t,e,i,r){const s=i**2;for(let n=Math.max(1,e-i);n<=Math.min(e+i,this.height);n++)for(let a=Math.max(1,t-i);a<=Math.min(t+i,this.width);a++)(a-t)**2+(n-e)**2i?this.bitmap[o]=0:e&&(this.bitmap[o]*=Math.max(0,Math.min(1,1-a/i*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,i){for(let r=i;r{const[s,n,a,o]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,n,t*(e?1:a),o)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((i,r)=>{const[s,n,a,o]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,t*(e?1:n),a,o)}))}composite(t,e=0,i=0){e=~~e,i=~~i;for(let r=0;r=this.height)break;for(let i=0;i=this.width)break;const a=4*(n+s*this.width),o=t.__view__.getUint32(4*(i+r*t.width),!1),h=this.__view__.getUint32(a,!1);255==(255&o)?this.__view__.setUint32(a,o,!1):0==(255&o)?this.__view__.setUint32(a,h,!1):this.__view__.setUint32(a,l.__alpha_blend__(o,h),!1)}}}return this}static __alpha_blend__(t,e){const i=255&t,r=i+1,s=256-i;return(255&r*(t>>>24)+s*(e>>>24)>>8)<<24|(255&r*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&r*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(i,255&e)}invert(){for(const[t,e,i]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-i&4294967040|255&i);return this}invertValue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,a]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,s,1-n,a))}return this}invertSaturation(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,a]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,1-s,n,a))}return this}invertHue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,a]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(1-r,s,n,a))}return this}hueShift(t){for(const[e,i,r]of this.iterateWithColors()){const[s,n,a,o]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(e,i,l.hslaToColor(s+t/360,n,a,o))}return this}averageColor(){let t=[0,0,0],e=0;for(let i=0;it/e)),255)}dominantColor(t=!0,e=!0,i=15){const r=new Array(262143);for(let s=0;s~~(63*t)));if(t&&h63-i)continue;const c=a<<12|o<<6|h;r[c]=(r[c]||0)+1}let s=-1,n=0;if(r.forEach(((t,e)=>{t>>12&63,o=n>>>6&63,h=63&n;return l.hslaToColor(a/63,o/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const i=Math.PI*(t/180),r=Math.sin(i),s=Math.cos(i),n=e?Math.abs(this.width*r)+Math.abs(this.height*s):this.width,a=e?Math.abs(this.width*s)+Math.abs(this.height*r):this.height,o=new l(n,a),h=n/2-.5,c=a/2-.5,_=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=_-r*(u-c),i=f+s*(u-c);do{const n=e+s*(t-h),a=i+r*(t-h);l.__interpolate__(this,o,t,u,n,a)}while(t++0&&e>0&&tt[0]-e[0])),i=e.map((t=>parseFloat(t[0]))),r=e.map((t=>t[1]));if(0===i.length)throw new RangeError("Invalid gradient point count");if(1===i.length)return()=>r[0];if(2===i.length){const t=this.__gradient__(r[0],r[1]);return e=>e<=i[0]?r[0]:e>=i[1]?r[1]:t((e-i[0])/(i[1]-i[0]))}const s=Math.min(...i),n=Math.max(...i);let a=[];for(let t=0;t{if(t<=s)return a[0].gradient(0);if(t>=n)return a[a.length-1].gradient(1);for(const e of a)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}return this}static __gradient__(t,e){const i=t>>>24,r=t>>16&255,s=t>>8&255,n=255&t,a=(e>>>24)-i,o=(e>>16&255)-r,h=(e>>8&255)-s,l=(255&e)-n;return t=>(255&i+t*a)<<24|(255&r+t*o)<<16|(255&s+t*h)<<8|255&n+t*l}fisheye(t=2){const e=new l(this.width,this.height),i=this.width,r=this.height,s=this.__u32__,n=e.__u32__,a=1/i,o=1/r;for(const[e,h]of this){const l=e*a-.5,c=h*o-.5,_=Math.sqrt(l**2+c**2),f=2*_**t,u=(f*l/_+.5)*i|0,w=(f*c/_+.5)*r|0;u<1||u>i||w<1||w>r||isNaN(u)||isNaN(w)||(n[h*i+e]=s[i*w+u])}const h=.5*s.length+i/2;return n[h]=s[h],this.__apply__(e)}async encode(t=1){return await r.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4})}async encodeJPEG(t=90){return await a.init(),a.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),u.isPNG(i)){const{width:i,height:s,pixels:n}=await r.decode(t);e=new l(i,s),e.bitmap.set(n)}else if(u.isJPEG(i)){await a.init();const i=a.decode(t),r=i.width,s=i.height,n=i.format;e=new l(r,s);const o=i.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(i!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const r=n.rasterize(t,i,e),s=new l(r.width,r.height);return s.bitmap.set(r.buffer),s}static async renderText(t,e,i,r=4294967295,n=new f){await s.init(),t=new s.Font(e,t);const[a,o,h,c]=l.colorToRGBA(r),_=new s.Layout;_.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),_.append(t,i,{scale:e});const u=_.rasterize(a,o,h),w=new l(u.width,u.height);return w.bitmap.set(u.buffer),w.height>n.maxHeight&&w.crop(0,0,w.width,Math.floor(_.lines()/w.height*n.maxHeight)*(w.height/_.lines())),t.free(),_.free(),w.opacity(c/255)}}class c extends l{constructor(t,e,i=100,r=0,s=0){if(isNaN(i)||i<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=i,this.xOffset=r,this.yOffset=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,i,r){if(!(t instanceof l))throw new TypeError("Invalid image passed");const s=new c(t.width,t.height,e,i,r);return s.bitmap.set(t.bitmap),s}}class _ extends Array{constructor(t,e=-1){super(...t),this.width=Math.max(...t.map((t=>t.width))),this.height=Math.max(...t.map((t=>t.height)));for(const t of this)if(!(t instanceof c))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}toString(){return`GIF<${this.width}x${this.height}x${this.duration}ms>`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=10){await h.init();const e=new h.Encoder(this.width,this.height,this.loopCount);for(const i of this){if(!(i instanceof c))throw new Error("GIF contains invalid frames");e.add(i.xOffset,i.yOffset,~~(i.duration/10),i.width,i.height,i.bitmap,t)}return e.u8()}static async decode(t,e=!1){let i,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),await h.init(),!u.isGIF(r))throw new Error("Unsupported image type");{await h.init();const r=new h.Decoder(t);let s=[];for(const t of r.frames()){const i=new c(t.width,t.height,10*t.delay,t.x,t.y);if(i.bitmap.set(t.buffer),s.push(i),e)break}r.free(),i=new _(s)}return i}}class f{constructor(t){const{maxWidth:e,maxHeight:i,wrapStyle:r,verticalAlign:s,horizontalAlign:n,wrapHardBreaks:a}=t??{};if(this.maxWidth=e??1/0,isNaN(this.maxWidth)||this.maxWidth<1)throw new RangeError("Invalid maxWidth");if(this.maxHeight=i??1/0,isNaN(this.maxHeight)||this.maxHeight<1)throw new RangeError("Invalid maxHeight");if(this.wrapStyle=r??"word",!["word","char"].includes(this.wrapStyle))throw new RangeError("Invalid wrapStyle");if(this.verticalAlign=s??"left",!["left","center","right"].includes(this.verticalAlign))throw new RangeError("Invalid verticalAlign");if(this.horizontalAlign=n??"top",!["top","middle","bottom"].includes(this.horizontalAlign))throw new RangeError("Invalid horizontalAlign");if(this.wrapHardBreaks=a??!0,"boolean"!=typeof this.wrapHardBreaks)throw new TypeError("Invalid wrapHardBreaks")}}class u{static getType(t){let e;return ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),e=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),e=new DataView(t.buffer)),this.isPNG(e)?"png":this.isJPEG(e)?"jpeg":this.isTIFF(e)?"tiff":this.isGIF(e)?"gif":null}static isPNG(t){return 2303741511===t.getUint32(0,!1)}static isJPEG(t){return t.getUint32(0,!1)>>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:l,GIF:_,Frame:c,TextLayout:f,ImageType:u,decode:function(t,e){return"gif"===u.getType(t)?_.decode(t,e):l.decode(t)}}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.0","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let i=0;for(const r of t)e.set(r,i),i+=r.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let i=0,r=4294967295;for(;i>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8;for(;i>>8;return(4294967295^r)>>>0}},347:(t,e,i)=>{const r=i(883),s=i(354),{init:n,compress:a,decompress:o}=i(423),h=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),c=new Uint8Array([73,69,78,68]),_=r(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:i,channels:s,depth:o=8,level:w=0}){let g=0,d=0;const p=e*s,m=new Uint8Array(i+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,i,r,s){let n=0;if(0===i){for(;n{const{version:r}=i(306);let s,n=null;class a{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=a.u8(t,e).slice();return s.wfree(t,e),i}}const o="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),h="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const i=a.alloc(e.length);if(a.u8(i,e.length).set(e),this.ptr=s.font_new(i,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const i=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),r=JSON.parse(h(a.u8(s.font_metrics_buffer(i),a.length())));return s.font_metrics_free(i),r}rasterize(t,e=this.scale){const i=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),r={buffer:a.u8(s.font_rasterize_buffer(i),a.length()).slice(),metrics:JSON.parse(h(a.u8(s.font_rasterize_metrics(i),a.length())))};return s.font_rasterize_free(i),r}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=o(JSON.stringify(t)),n&&(this.refs.length=0);const e=a.alloc(t.length);a.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,i){e=o(e);const r=i||{};n&&this.refs.push(t);const h=a.alloc(e.length);a.u8(h,e.length).set(e);const l="r"in r||"g"in r||"b"in r;s.layout_append(this.ptr,t.ptr,h,e.length,null==r.scale?t.scale:r.scale,l,r.r,r.g,r.b)}rasterize(t,e,i){const r=s.layout_rasterize(this.ptr,t,e,i),n={width:s.layout_rasterize_width(r),height:s.layout_rasterize_height(r),buffer:a.u8(s.layout_rasterize_buffer(r),a.length()).slice()};return s.layout_rasterize_free(r),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},667:(t,e,i)=>{const{version:r}=i(306);let s;const n=new Map;class a{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=a.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={Encoder:class{constructor(t,e,i=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,i)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const i of this.slices)e.set(i,t),t+=i.length;return e}add(t,e,i,r,n,o,h){const l=a.alloc(o.length);a.u8(l,o.length).set(o),s.encoder_add(this.ptr,l,o.length,t,e,r,n,i,h)}},Decoder:class{constructor(t,e=0){const i=a.alloc(t.length);if(a.u8(i,t.length).set(t),this.ptr=s.decoder_new(i,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:s.decoder_frame_x(t),y:s.decoder_frame_y(t),delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),buffer:a.u8(s.decoder_frame_buffer(t),a.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e,{env:{push_to_stream(t,e){n.get(t).cb(a.u8(e,a.length()).slice())}}});s=i.exports}}},327:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={encode:function(t,e,i,r){const a=n.alloc(t.length);return n.u8(a,t.length).set(t),n.copy_and_free(s.encode(a,e,i,r),n.length())},decode:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const a=s.decode(r,t.length,e,i);if(0===a)throw new Error("jpg: failed to decode");if(1===a)throw new Error("jpg: failed to scale decoder");const o={width:s.decode_width(a),height:s.decode_height(a),format:s.decode_format(a),buffer:n.u8(s.decode_buffer(a),n.length()).slice()};return s.decode_free(a),o},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},876:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={rasterize:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const a=s.rasterize(r,t.length,e,i);if(0===a)throw new Error("svg: failed to parse");if(1===a)throw new Error("svg: failed to rasterize");const o={width:s.rasterize_width(a),height:s.rasterize_height(a),buffer:n.u8(s.rasterize_buffer(a),n.length()).slice()};return s.rasterize_free(a),o},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},76:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const i=s.decode(e,t.length);if(0===i)throw new Error("tiff: failed to decode");const r={width:s.decode_width(i),height:s.decode_height(i),buffer:n.u8(s.decode_buffer(i),n.length()).slice()};return s.decode_free(i),r},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},423:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={compress:function(t,e=3){const i=n.alloc(t.length);return n.u8(i,t.length).set(t),n.copy_and_free(s.compress(i,t.length,e),n.length())},decompress:function(t,e=0){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const r=s.decompress(i,t.length,e);if(0===r)throw new Error("zlib: failed to decompress");return n.copy_and_free(r,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}}},e={},function i(r){var s=e[r];if(void 0!==s)return s.exports;var n=e[r]={exports:{}};return t[r](n,n.exports,i),n.exports}(655);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,i)=>{const r=i(347),s=i(723),n=i(876),o=i(327),a=i(76),h=i(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let i=1;i<=this.width;i++)yield[i,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,i,r){return((255&t)<<24|(255&e)<<16|(255&i)<<8|255&r)>>>0}static rgbToColor(t,e,i){return l.rgbaToColor(t,e,i,255)}static hslaToColor(t,e,i,r){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),i=Math.min(1,Math.max(0,i)),r=Math.min(1,Math.max(0,r)),0===e)s=n=o=i;else{const r=(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),a=i<.5?i*(1+e):i+e-i*e,h=2*i-a;s=r(h,a,t+1/3),n=r(h,a,t),o=r(h,a,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*r)}static hslToColor(t,e,i){return l.hslaToColor(t,e,i,1)}static rgbaToHSLA(t,e,i,r){t/=255,e/=255,i/=255;const s=Math.max(t,e,i),n=Math.min(t,e,i);let o,a,h=(s+n)/2;if(s===n)o=a=0;else{const r=s-n;switch(a=h>.5?r/(2-s-n):r/(s+n),s){case t:o=(e-i)/r+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const i=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(i,i+4)}setPixelAt(t,e,i){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,i),this}__set_pixel__(t,e,i){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),i,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let i=1;i<=this.height;i++)for(let r=1;r<=this.width;r++)this.__view__.setUint32(e,t(r,i),!1),e+=4}return this}clone(){const t=new l(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__scale__(t,e);return this.__apply__(i)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__resize__(t,e,i);return this.__apply__(r)}__resize__(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let r;if(i!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return r=this.__resize_nearest_neighbor__(t,e),r}__resize_nearest_neighbor__(t,e){const i=new this.constructor(t,e);for(let r=0;rthis.width&&(i=this.width),r>this.height&&(r=this.height),this.__apply__(this.__crop__(~~t,~~e,~~i,~~r))}__crop__(t,e,i,r){t=~~t,e=~~e;const s=new this.constructor(i,r);for(let n=0;nthis.width||o>this.height)continue;const a=s(r,n);this.__set_pixel__(i,o,a)}return this}__fast_box__(t,e,i,r,s){t<0&&(i+=t,t=1),e<0&&(r+=e,e=1);const n=Math.max(Math.min(t+i,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const a=4*(n+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+r,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,i,r){const s=i**2;for(let n=Math.max(1,e-i);n<=Math.min(e+i,this.height);n++)for(let o=Math.max(1,t-i);o<=Math.min(t+i,this.width);o++)(o-t)**2+(n-e)**2i?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/i*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,i){for(let r=i;r{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,n,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((i,r)=>{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,t*(e?1:n),o,a)}))}composite(t,e=0,i=0){e=~~e,i=~~i;for(let r=0;r=this.height)break;for(let i=0;i=this.width)break;const o=4*(n+s*this.width),a=t.__view__.getUint32(4*(i+r*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,l.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const i=255&t,r=i+1,s=256-i;return(255&r*(t>>>24)+s*(e>>>24)>>8)<<24|(255&r*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&r*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(i,255&e)}invert(){for(const[t,e,i]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-i&4294967040|255&i);return this}invertValue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,s,1-n,o))}return this}invertSaturation(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,1-s,n,o))}return this}invertHue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(1-r,s,n,o))}return this}hueShift(t){for(const[e,i,r]of this.iterateWithColors()){const[s,n,o,a]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(e,i,l.hslaToColor(s+t/360,n,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let i=0;it/e)),255)}dominantColor(t=!0,e=!0,i=15){const r=new Array(262143);for(let s=0;s~~(63*t)));if(t&&h63-i)continue;const c=o<<12|a<<6|h;r[c]=(r[c]||0)+1}let s=-1,n=0;if(r.forEach(((t,e)=>{t>>12&63,a=n>>>6&63,h=63&n;return l.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const i=Math.PI*(t/180),r=Math.sin(i),s=Math.cos(i),n=e?Math.abs(this.width*r)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*r):this.height,a=new l(n,o),h=n/2-.5,c=o/2-.5,_=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=_-r*(u-c),i=f+s*(u-c);do{const n=e+s*(t-h),o=i+r*(t-h);l.__interpolate__(this,a,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),i=e.map((t=>parseFloat(t[0]))),r=e.map((t=>t[1]));if(0===i.length)throw new RangeError("Invalid gradient point count");if(1===i.length)return()=>r[0];if(2===i.length){const t=this.__gradient__(r[0],r[1]);return e=>e<=i[0]?r[0]:e>=i[1]?r[1]:t((e-i[0])/(i[1]-i[0]))}const s=Math.min(...i),n=Math.max(...i);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}return this}static __gradient__(t,e){const i=t>>>24,r=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-i,a=(e>>16&255)-r,h=(e>>8&255)-s,l=(255&e)-n;return t=>(255&i+t*o)<<24|(255&r+t*a)<<16|(255&s+t*h)<<8|255&n+t*l}fisheye(t=2){const e=new l(this.width,this.height),i=this.width,r=this.height,s=this.__u32__,n=e.__u32__,o=1/i,a=1/r;for(const[e,h]of this){const l=e*o-.5,c=h*a-.5,_=Math.sqrt(l**2+c**2),f=2*_**t,u=(f*l/_+.5)*i|0,w=(f*c/_+.5)*r|0;u<1||u>i||w<1||w>r||isNaN(u)||isNaN(w)||(n[h*i+e]=s[i*w+u])}const h=.5*s.length+i/2;return n[h]=s[h],this.__apply__(e)}async encode(t=1,{title:e,author:i,description:s,copyright:n,creationTime:o,software:a,disclaimer:h,warning:l,source:c,comment:_}={}){return await r.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:i,Description:s,Copyright:n,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===a?`github.com/matmen/ImageScript v${version}`:a,Disclaimer:h,Warning:l,Source:c,Comment:_}})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),u.isPNG(i)){const{width:i,height:s,pixels:n}=await r.decode(t);e=new l(i,s),e.bitmap.set(n)}else if(u.isJPEG(i)){await o.init();const i=o.decode(t),r=i.width,s=i.height,n=i.format;e=new l(r,s);const a=i.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(i!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const r=n.rasterize(t,i,e),s=new l(r.width,r.height);return s.bitmap.set(r.buffer),s}static async renderText(t,e,i,r=4294967295,n=new f){await s.init(),t=new s.Font(e,t);const[o,a,h,c]=l.colorToRGBA(r),_=new s.Layout;_.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),_.append(t,i,{scale:e});const u=_.rasterize(o,a,h),w=new l(u.width,u.height);return w.bitmap.set(u.buffer),w.height>n.maxHeight&&w.crop(0,0,w.width,Math.floor(_.lines()/w.height*n.maxHeight)*(w.height/_.lines())),t.free(),_.free(),w.opacity(c/255)}}class c extends l{static get DISPOSAL_KEEP(){return 1}static get DISPOSAL_PREVIOUS(){return 2}static get DISPOSAL_BACKGROUND(){return 3}constructor(t,e,i=100,r=0,s=0,n=c.DISPOSAL_KEEP){if(isNaN(i)||i<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=i,this.xOffset=r,this.yOffset=s,this.disposalMode=n}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,i,r,s=c.DISPOSAL_KEEP){if(!(t instanceof l))throw new TypeError("Invalid image passed");const n=new c(t.width,t.height,e,i,r,s);return n.bitmap.set(t.bitmap),n}resize(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){const r=this.width,s=this.height,n=super.resize(t,e,i);return this.xOffset*=n.width/r,this.yOffset*=n.height/s,n}}class _ extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof c))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let i=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=10){await h.init();const e=new h.Encoder(this.width,this.height,this.loopCount);for(const i of this){if(!(i instanceof c))throw new Error("GIF contains invalid frames");e.add(i.xOffset,i.yOffset,~~(i.duration/10),i.width,i.height,i.bitmap,i.disposalMode,t)}return e.u8()}static async decode(t,e=!1){let i,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),await h.init(),!u.isGIF(r))throw new Error("Unsupported image type");{await h.init();const r=new h.Decoder(t);let s=[];for(const t of r.frames()){const i=new c(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);if(i.bitmap.set(t.buffer),s.push(i),e)break}r.free(),i=new _(s)}return i}resize(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){for(const r of this)r.resize(t,e,i)}}class f{constructor(t){const{maxWidth:e,maxHeight:i,wrapStyle:r,verticalAlign:s,horizontalAlign:n,wrapHardBreaks:o}=t||{};if(this.maxWidth=e||1/0,isNaN(this.maxWidth)||this.maxWidth<1)throw new RangeError("Invalid maxWidth");if(this.maxHeight=i||1/0,isNaN(this.maxHeight)||this.maxHeight<1)throw new RangeError("Invalid maxHeight");if(this.wrapStyle=r||"word",!["word","char"].includes(this.wrapStyle))throw new RangeError("Invalid wrapStyle");if(this.verticalAlign=s||"left",!["left","center","right"].includes(this.verticalAlign))throw new RangeError("Invalid verticalAlign");if(this.horizontalAlign=n||"top",!["top","middle","bottom"].includes(this.horizontalAlign))throw new RangeError("Invalid horizontalAlign");if(this.wrapHardBreaks=o||!0,"boolean"!=typeof this.wrapHardBreaks)throw new TypeError("Invalid wrapHardBreaks")}}class u{static getType(t){let e;return ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),e=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),e=new DataView(t.buffer)),this.isPNG(e)?"png":this.isJPEG(e)?"jpeg":this.isTIFF(e)?"tiff":this.isGIF(e)?"gif":null}static isPNG(t){return 2303741511===t.getUint32(0,!1)}static isJPEG(t){return t.getUint32(0,!1)>>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:l,GIF:_,Frame:c,TextLayout:f,ImageType:u,decode:function(t,e){return"gif"===u.getType(t)?_.decode(t,e):l.decode(t)}}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.3","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let i=0;for(const r of t)e.set(r,i),i+=r.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let i=0,r=4294967295;for(;i>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8;for(;i>>8;return(4294967295^r)>>>0}},347:(t,e,i)=>{const r=i(883),s=i(354),{init:n,compress:o,decompress:a}=i(423),h=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),c=new Uint8Array([73,69,78,68]),_=r(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:i,channels:s,depth:a=8,level:w=0}){let g=0,d=0;const p=e*s,m=new Uint8Array(i+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,i,r,s){let n=0;if(0===i){for(;n{const{version:r}=i(306);let s,n=null;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}const a="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),h="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const i=o.alloc(e.length);if(o.u8(i,e.length).set(e),this.ptr=s.font_new(i,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const i=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),r=JSON.parse(h(o.u8(s.font_metrics_buffer(i),o.length())));return s.font_metrics_free(i),r}rasterize(t,e=this.scale){const i=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),r={buffer:o.u8(s.font_rasterize_buffer(i),o.length()).slice(),metrics:JSON.parse(h(o.u8(s.font_rasterize_metrics(i),o.length())))};return s.font_rasterize_free(i),r}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=a(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,i){e=a(e);const r=i||{};n&&this.refs.push(t);const h=o.alloc(e.length);o.u8(h,e.length).set(e);const l="r"in r||"g"in r||"b"in r;s.layout_append(this.ptr,t.ptr,h,e.length,null==r.scale?t.scale:r.scale,l,r.r,r.g,r.b)}rasterize(t,e,i){const r=s.layout_rasterize(this.ptr,t,e,i),n={width:s.layout_rasterize_width(r),height:s.layout_rasterize_height(r),buffer:o.u8(s.layout_rasterize_buffer(r),o.length()).slice()};return s.layout_rasterize_free(r),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},667:(t,e,i)=>{const{version:r}=i(306);let s;const n=new Map,o=new TextEncoder;class a{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=a.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={Encoder:class{constructor(t,e,i=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,i)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const i of this.slices)e.set(i,t),t+=i.length;return e}add(t,e,i,r,n,o,h,l){const c=a.alloc(o.length);a.u8(c,o.length).set(o),s.encoder_add(this.ptr,c,o.length,t,e,r,n,i,h,l)}set comment(t){const e=o.encode(t),i=a.alloc(e.length);a.u8(i,e.length).set(e),s.encoder_add_comment(this.ptr,i,e.length)}set application(t){const e=o.encode(t),i=a.alloc(e.length);a.u8(i,e.length).set(e),s.encoder_add_application(this.ptr,i,e.length)}},Decoder:class{constructor(t,e=0){const i=a.alloc(t.length);if(a.u8(i,t.length).set(t),this.ptr=s.decoder_new(i,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:s.decoder_frame_x(t),y:s.decoder_frame_y(t),delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),dispose:s.decoder_frame_dispose(t),buffer:a.u8(s.decoder_frame_buffer(t),a.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e,{env:{push_to_stream(t,e){n.get(t).cb(a.u8(e,a.length()).slice())}}});s=i.exports}}},327:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={encode:function(t,e,i,r){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,i,r),n.length())},decode:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.decode(r,t.length,e,i);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},876:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={rasterize:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.rasterize(r,t.length,e,i);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},76:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const i=s.decode(e,t.length);if(0===i)throw new Error("tiff: failed to decode");const r={width:s.decode_width(i),height:s.decode_height(i),buffer:n.u8(s.decode_buffer(i),n.length()).slice()};return s.decode_free(i),r},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},423:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={compress:function(t,e=3){const i=n.alloc(t.length);return n.u8(i,t.length).set(t),n.copy_and_free(s.compress(i,t.length,e),n.length())},decompress:function(t,e=0){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const r=s.decompress(i,t.length,e);if(0===r)throw new Error("zlib: failed to decompress");return n.copy_and_free(r,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}}},e={},function i(r){var s=e[r];if(void 0!==s)return s.exports;var n=e[r]={exports:{}};return t[r](n,n.exports,i),n.exports}(655);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index 60d224a..1879af5 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","compression","encode","level","channels","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","text","layout","TextLayout","Font","layoutOptions","Layout","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","crop","lines","free","xOffset","yOffset","super","frame","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","frameData","delay","options","Infinity","getType","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","version","wasm","registry","mem","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","instantiate","streams","Map","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @return {Promise} The encoded data\n */\n async encode(compression = 1) {\n return await png.encode(this.bitmap, {width: this.width, height: this.height, level: compression, channels: 4});\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1');\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {TextLayout} layout The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new fontlib.Layout();\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n this.width = Math.max(...frames.map(frame => frame.width));\n this.height = Math.max(...frames.map(frame => frame.height));\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n await giflib.init();\n\n if (ImageType.isGIF(view)) { // GIF\n await giflib.init();\n const decoder = new giflib.Decoder(data);\n let frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay * 10, frameData.x, frameData.y);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n\n if (onlyExtractFirstFrame)\n break;\n }\n\n decoder.free();\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} options\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='string'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options ?? {};\n\n this.maxWidth = maxWidth ?? Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight ?? Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle ?? 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign ?? 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign ?? 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks ?? true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n \n wasm = instance.exports;\n },\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, quality);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n }\n }\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = await WebAssembly.instantiate(module);\n\n\t\twasm = instance.exports;\n\t}\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","version","Disclaimer","Warning","Source","Comment","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","layout","TextLayout","Font","layoutOptions","Layout","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","crop","lines","free","DISPOSAL_KEEP","super","frame","originalWidth","originalHeight","result","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","frameData","delay","dispose","options","Infinity","getType","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","wasm","registry","mem","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","instantiate","streams","Map","utf8encoder","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return await png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1');\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {TextLayout} layout The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new fontlib.Layout();\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {number}\n */\n static get DISPOSAL_KEEP() {\n return 1;\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {number}\n */\n static get DISPOSAL_PREVIOUS() {\n return 2;\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {number}\n */\n static get DISPOSAL_BACKGROUND() {\n return 3;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n await giflib.init();\n\n if (ImageType.isGIF(view)) { // GIF\n await giflib.init();\n const decoder = new giflib.Decoder(data);\n let frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay * 10, frameData.x, frameData.y, frameData.dispose);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n\n if (onlyExtractFirstFrame)\n break;\n }\n\n decoder.free();\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n \n wasm = instance.exports;\n },\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\nconst utf8encoder = new TextEncoder;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n }\n }\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = await WebAssembly.instantiate(module);\n\n\t\twasm = instance.exports;\n\t}\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file From a070066b8bb0e91e18a88a8bf7388ac63e669276 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sat, 24 Apr 2021 23:39:21 +0200 Subject: [PATCH 062/120] nice job --- ImageScript.js | 1 + 1 file changed, 1 insertion(+) diff --git a/ImageScript.js b/ImageScript.js index d7d25e6..47eedf6 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -4,6 +4,7 @@ const svglib = require('./utils/wasm/svg'); const jpeglib = require('./utils/wasm/jpeg'); const tifflib = require('./utils/wasm/tiff'); const giflib = require('./utils/wasm/gif'); +const {version} = require('./package.json'); const MAGIC_NUMBERS = { PNG: 0x89504e47, From 221096bad76d32b1d50318bd57d9f2c5f5b10616 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 24 Apr 2021 21:39:50 +0000 Subject: [PATCH 063/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index 70f055c..dd1e03a 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,i)=>{const r=i(347),s=i(723),n=i(876),o=i(327),a=i(76),h=i(667);class l{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let i=1;i<=this.width;i++)yield[i,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,i,r){return((255&t)<<24|(255&e)<<16|(255&i)<<8|255&r)>>>0}static rgbToColor(t,e,i){return l.rgbaToColor(t,e,i,255)}static hslaToColor(t,e,i,r){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),i=Math.min(1,Math.max(0,i)),r=Math.min(1,Math.max(0,r)),0===e)s=n=o=i;else{const r=(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),a=i<.5?i*(1+e):i+e-i*e,h=2*i-a;s=r(h,a,t+1/3),n=r(h,a,t),o=r(h,a,t-1/3)}return l.rgbaToColor(255*s,255*n,255*o,255*r)}static hslToColor(t,e,i){return l.hslaToColor(t,e,i,1)}static rgbaToHSLA(t,e,i,r){t/=255,e/=255,i/=255;const s=Math.max(t,e,i),n=Math.min(t,e,i);let o,a,h=(s+n)/2;if(s===n)o=a=0;else{const r=s-n;switch(a=h>.5?r/(2-s-n):r/(s+n),s){case t:o=(e-i)/r+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return l.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const i=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(i,i+4)}setPixelAt(t,e,i){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,i),this}__set_pixel__(t,e,i){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),i,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${l.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${l.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${l.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${l.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let i=1;i<=this.height;i++)for(let r=1;r<=this.width;r++)this.__view__.setUint32(e,t(r,i),!1),e+=4}return this}clone(){const t=new l(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=l.RESIZE_NEAREST_NEIGHBOR){const i=this.__scale__(t,e);return this.__apply__(i)}__scale__(t,e=l.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){const r=this.__resize__(t,e,i);return this.__apply__(r)}__resize__(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){if(t===l.RESIZE_AUTO&&e===l.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===l.RESIZE_AUTO?t=this.width/this.height*e:e===l.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let r;if(i!==l.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return r=this.__resize_nearest_neighbor__(t,e),r}__resize_nearest_neighbor__(t,e){const i=new this.constructor(t,e);for(let r=0;rthis.width&&(i=this.width),r>this.height&&(r=this.height),this.__apply__(this.__crop__(~~t,~~e,~~i,~~r))}__crop__(t,e,i,r){t=~~t,e=~~e;const s=new this.constructor(i,r);for(let n=0;nthis.width||o>this.height)continue;const a=s(r,n);this.__set_pixel__(i,o,a)}return this}__fast_box__(t,e,i,r,s){t<0&&(i+=t,t=1),e<0&&(r+=e,e=1);const n=Math.max(Math.min(t+i,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const a=4*(n+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+r,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,i,r){const s=i**2;for(let n=Math.max(1,e-i);n<=Math.min(e+i,this.height);n++)for(let o=Math.max(1,t-i);o<=Math.min(t+i,this.width);o++)(o-t)**2+(n-e)**2i?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/i*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,i){for(let r=i;r{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,n,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((i,r)=>{const[s,n,o,a]=l.rgbaToHSLA(...this.getRGBAAt(i,r));return l.hslaToColor(s,t*(e?1:n),o,a)}))}composite(t,e=0,i=0){e=~~e,i=~~i;for(let r=0;r=this.height)break;for(let i=0;i=this.width)break;const o=4*(n+s*this.width),a=t.__view__.getUint32(4*(i+r*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,l.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const i=255&t,r=i+1,s=256-i;return(255&r*(t>>>24)+s*(e>>>24)>>8)<<24|(255&r*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&r*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(i,255&e)}invert(){for(const[t,e,i]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-i&4294967040|255&i);return this}invertValue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,s,1-n,o))}return this}invertSaturation(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(r,1-s,n,o))}return this}invertHue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=l.rgbaToHSLA(...l.colorToRGBA(i));this.__set_pixel__(t,e,l.hslaToColor(1-r,s,n,o))}return this}hueShift(t){for(const[e,i,r]of this.iterateWithColors()){const[s,n,o,a]=l.rgbaToHSLA(...l.colorToRGBA(r));this.__set_pixel__(e,i,l.hslaToColor(s+t/360,n,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let i=0;it/e)),255)}dominantColor(t=!0,e=!0,i=15){const r=new Array(262143);for(let s=0;s~~(63*t)));if(t&&h63-i)continue;const c=o<<12|a<<6|h;r[c]=(r[c]||0)+1}let s=-1,n=0;if(r.forEach(((t,e)=>{t>>12&63,a=n>>>6&63,h=63&n;return l.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const i=Math.PI*(t/180),r=Math.sin(i),s=Math.cos(i),n=e?Math.abs(this.width*r)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*r):this.height,a=new l(n,o),h=n/2-.5,c=o/2-.5,_=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=_-r*(u-c),i=f+s*(u-c);do{const n=e+s*(t-h),o=i+r*(t-h);l.__interpolate__(this,a,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),i=e.map((t=>parseFloat(t[0]))),r=e.map((t=>t[1]));if(0===i.length)throw new RangeError("Invalid gradient point count");if(1===i.length)return()=>r[0];if(2===i.length){const t=this.__gradient__(r[0],r[1]);return e=>e<=i[0]?r[0]:e>=i[1]?r[1]:t((e-i[0])/(i[1]-i[0]))}const s=Math.min(...i),n=Math.max(...i);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}return this}static __gradient__(t,e){const i=t>>>24,r=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-i,a=(e>>16&255)-r,h=(e>>8&255)-s,l=(255&e)-n;return t=>(255&i+t*o)<<24|(255&r+t*a)<<16|(255&s+t*h)<<8|255&n+t*l}fisheye(t=2){const e=new l(this.width,this.height),i=this.width,r=this.height,s=this.__u32__,n=e.__u32__,o=1/i,a=1/r;for(const[e,h]of this){const l=e*o-.5,c=h*a-.5,_=Math.sqrt(l**2+c**2),f=2*_**t,u=(f*l/_+.5)*i|0,w=(f*c/_+.5)*r|0;u<1||u>i||w<1||w>r||isNaN(u)||isNaN(w)||(n[h*i+e]=s[i*w+u])}const h=.5*s.length+i/2;return n[h]=s[h],this.__apply__(e)}async encode(t=1,{title:e,author:i,description:s,copyright:n,creationTime:o,software:a,disclaimer:h,warning:l,source:c,comment:_}={}){return await r.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:i,Description:s,Copyright:n,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===a?`github.com/matmen/ImageScript v${version}`:a,Disclaimer:h,Warning:l,Source:c,Comment:_}})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),u.isPNG(i)){const{width:i,height:s,pixels:n}=await r.decode(t);e=new l(i,s),e.bitmap.set(n)}else if(u.isJPEG(i)){await o.init();const i=o.decode(t),r=i.width,s=i.height,n=i.format;e=new l(r,s);const a=i.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(i!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const r=n.rasterize(t,i,e),s=new l(r.width,r.height);return s.bitmap.set(r.buffer),s}static async renderText(t,e,i,r=4294967295,n=new f){await s.init(),t=new s.Font(e,t);const[o,a,h,c]=l.colorToRGBA(r),_=new s.Layout;_.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),_.append(t,i,{scale:e});const u=_.rasterize(o,a,h),w=new l(u.width,u.height);return w.bitmap.set(u.buffer),w.height>n.maxHeight&&w.crop(0,0,w.width,Math.floor(_.lines()/w.height*n.maxHeight)*(w.height/_.lines())),t.free(),_.free(),w.opacity(c/255)}}class c extends l{static get DISPOSAL_KEEP(){return 1}static get DISPOSAL_PREVIOUS(){return 2}static get DISPOSAL_BACKGROUND(){return 3}constructor(t,e,i=100,r=0,s=0,n=c.DISPOSAL_KEEP){if(isNaN(i)||i<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=i,this.xOffset=r,this.yOffset=s,this.disposalMode=n}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,i,r,s=c.DISPOSAL_KEEP){if(!(t instanceof l))throw new TypeError("Invalid image passed");const n=new c(t.width,t.height,e,i,r,s);return n.bitmap.set(t.bitmap),n}resize(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){const r=this.width,s=this.height,n=super.resize(t,e,i);return this.xOffset*=n.width/r,this.yOffset*=n.height/s,n}}class _ extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof c))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let i=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=10){await h.init();const e=new h.Encoder(this.width,this.height,this.loopCount);for(const i of this){if(!(i instanceof c))throw new Error("GIF contains invalid frames");e.add(i.xOffset,i.yOffset,~~(i.duration/10),i.width,i.height,i.bitmap,i.disposalMode,t)}return e.u8()}static async decode(t,e=!1){let i,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),await h.init(),!u.isGIF(r))throw new Error("Unsupported image type");{await h.init();const r=new h.Decoder(t);let s=[];for(const t of r.frames()){const i=new c(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);if(i.bitmap.set(t.buffer),s.push(i),e)break}r.free(),i=new _(s)}return i}resize(t,e,i=l.RESIZE_NEAREST_NEIGHBOR){for(const r of this)r.resize(t,e,i)}}class f{constructor(t){const{maxWidth:e,maxHeight:i,wrapStyle:r,verticalAlign:s,horizontalAlign:n,wrapHardBreaks:o}=t||{};if(this.maxWidth=e||1/0,isNaN(this.maxWidth)||this.maxWidth<1)throw new RangeError("Invalid maxWidth");if(this.maxHeight=i||1/0,isNaN(this.maxHeight)||this.maxHeight<1)throw new RangeError("Invalid maxHeight");if(this.wrapStyle=r||"word",!["word","char"].includes(this.wrapStyle))throw new RangeError("Invalid wrapStyle");if(this.verticalAlign=s||"left",!["left","center","right"].includes(this.verticalAlign))throw new RangeError("Invalid verticalAlign");if(this.horizontalAlign=n||"top",!["top","middle","bottom"].includes(this.horizontalAlign))throw new RangeError("Invalid horizontalAlign");if(this.wrapHardBreaks=o||!0,"boolean"!=typeof this.wrapHardBreaks)throw new TypeError("Invalid wrapHardBreaks")}}class u{static getType(t){let e;return ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),e=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),e=new DataView(t.buffer)),this.isPNG(e)?"png":this.isJPEG(e)?"jpeg":this.isTIFF(e)?"tiff":this.isGIF(e)?"gif":null}static isPNG(t){return 2303741511===t.getUint32(0,!1)}static isJPEG(t){return t.getUint32(0,!1)>>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:l,GIF:_,Frame:c,TextLayout:f,ImageType:u,decode:function(t,e){return"gif"===u.getType(t)?_.decode(t,e):l.decode(t)}}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.3","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let i=0;for(const r of t)e.set(r,i),i+=r.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let i=0,r=4294967295;for(;i>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8;for(;i>>8;return(4294967295^r)>>>0}},347:(t,e,i)=>{const r=i(883),s=i(354),{init:n,compress:o,decompress:a}=i(423),h=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),c=new Uint8Array([73,69,78,68]),_=r(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:i,channels:s,depth:a=8,level:w=0}){let g=0,d=0;const p=e*s,m=new Uint8Array(i+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,i,r,s){let n=0;if(0===i){for(;n{const{version:r}=i(306);let s,n=null;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}const a="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),h="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const i=o.alloc(e.length);if(o.u8(i,e.length).set(e),this.ptr=s.font_new(i,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const i=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),r=JSON.parse(h(o.u8(s.font_metrics_buffer(i),o.length())));return s.font_metrics_free(i),r}rasterize(t,e=this.scale){const i=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),r={buffer:o.u8(s.font_rasterize_buffer(i),o.length()).slice(),metrics:JSON.parse(h(o.u8(s.font_rasterize_metrics(i),o.length())))};return s.font_rasterize_free(i),r}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=a(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,i){e=a(e);const r=i||{};n&&this.refs.push(t);const h=o.alloc(e.length);o.u8(h,e.length).set(e);const l="r"in r||"g"in r||"b"in r;s.layout_append(this.ptr,t.ptr,h,e.length,null==r.scale?t.scale:r.scale,l,r.r,r.g,r.b)}rasterize(t,e,i){const r=s.layout_rasterize(this.ptr,t,e,i),n={width:s.layout_rasterize_width(r),height:s.layout_rasterize_height(r),buffer:o.u8(s.layout_rasterize_buffer(r),o.length()).slice()};return s.layout_rasterize_free(r),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},667:(t,e,i)=>{const{version:r}=i(306);let s;const n=new Map,o=new TextEncoder;class a{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=a.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={Encoder:class{constructor(t,e,i=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,i)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const i of this.slices)e.set(i,t),t+=i.length;return e}add(t,e,i,r,n,o,h,l){const c=a.alloc(o.length);a.u8(c,o.length).set(o),s.encoder_add(this.ptr,c,o.length,t,e,r,n,i,h,l)}set comment(t){const e=o.encode(t),i=a.alloc(e.length);a.u8(i,e.length).set(e),s.encoder_add_comment(this.ptr,i,e.length)}set application(t){const e=o.encode(t),i=a.alloc(e.length);a.u8(i,e.length).set(e),s.encoder_add_application(this.ptr,i,e.length)}},Decoder:class{constructor(t,e=0){const i=a.alloc(t.length);if(a.u8(i,t.length).set(t),this.ptr=s.decoder_new(i,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:s.decoder_frame_x(t),y:s.decoder_frame_y(t),delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),dispose:s.decoder_frame_dispose(t),buffer:a.u8(s.decoder_frame_buffer(t),a.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e,{env:{push_to_stream(t,e){n.get(t).cb(a.u8(e,a.length()).slice())}}});s=i.exports}}},327:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={encode:function(t,e,i,r){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,i,r),n.length())},decode:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.decode(r,t.length,e,i);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},876:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={rasterize:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.rasterize(r,t.length,e,i);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},76:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const i=s.decode(e,t.length);if(0===i)throw new Error("tiff: failed to decode");const r={width:s.decode_width(i),height:s.decode_height(i),buffer:n.u8(s.decode_buffer(i),n.length()).slice()};return s.decode_free(i),r},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},423:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={compress:function(t,e=3){const i=n.alloc(t.length);return n.u8(i,t.length).set(t),n.copy_and_free(s.compress(i,t.length,e),n.length())},decompress:function(t,e=0){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const r=s.decompress(i,t.length,e);if(0===r)throw new Error("zlib: failed to decompress");return n.copy_and_free(r,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}}},e={},function i(r){var s=e[r];if(void 0!==s)return s.exports;var n=e[r]={exports:{}};return t[r](n,n.exports,i),n.exports}(655);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,i)=>{const r=i(347),s=i(723),n=i(876),o=i(327),a=i(76),h=i(667),{version:l}=i(306);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let i=1;i<=this.width;i++)yield[i,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,i,r){return((255&t)<<24|(255&e)<<16|(255&i)<<8|255&r)>>>0}static rgbToColor(t,e,i){return c.rgbaToColor(t,e,i,255)}static hslaToColor(t,e,i,r){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),i=Math.min(1,Math.max(0,i)),r=Math.min(1,Math.max(0,r)),0===e)s=n=o=i;else{const r=(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),a=i<.5?i*(1+e):i+e-i*e,h=2*i-a;s=r(h,a,t+1/3),n=r(h,a,t),o=r(h,a,t-1/3)}return c.rgbaToColor(255*s,255*n,255*o,255*r)}static hslToColor(t,e,i){return c.hslaToColor(t,e,i,1)}static rgbaToHSLA(t,e,i,r){t/=255,e/=255,i/=255;const s=Math.max(t,e,i),n=Math.min(t,e,i);let o,a,h=(s+n)/2;if(s===n)o=a=0;else{const r=s-n;switch(a=h>.5?r/(2-s-n):r/(s+n),s){case t:o=(e-i)/r+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const i=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(i,i+4)}setPixelAt(t,e,i){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,i),this}__set_pixel__(t,e,i){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),i,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let i=1;i<=this.height;i++)for(let r=1;r<=this.width;r++)this.__view__.setUint32(e,t(r,i),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__scale__(t,e);return this.__apply__(i)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,i=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__resize__(t,e,i);return this.__apply__(r)}__resize__(t,e,i=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let r;if(i!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return r=this.__resize_nearest_neighbor__(t,e),r}__resize_nearest_neighbor__(t,e){const i=new this.constructor(t,e);for(let r=0;rthis.width&&(i=this.width),r>this.height&&(r=this.height),this.__apply__(this.__crop__(~~t,~~e,~~i,~~r))}__crop__(t,e,i,r){t=~~t,e=~~e;const s=new this.constructor(i,r);for(let n=0;nthis.width||o>this.height)continue;const a=s(r,n);this.__set_pixel__(i,o,a)}return this}__fast_box__(t,e,i,r,s){t<0&&(i+=t,t=1),e<0&&(r+=e,e=1);const n=Math.max(Math.min(t+i,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const a=4*(n+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+r,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,i,r){const s=i**2;for(let n=Math.max(1,e-i);n<=Math.min(e+i,this.height);n++)for(let o=Math.max(1,t-i);o<=Math.min(t+i,this.width);o++)(o-t)**2+(n-e)**2i?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/i*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,i){for(let r=i;r{const[s,n,o,a]=c.rgbaToHSLA(...this.getRGBAAt(i,r));return c.hslaToColor(s,n,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((i,r)=>{const[s,n,o,a]=c.rgbaToHSLA(...this.getRGBAAt(i,r));return c.hslaToColor(s,t*(e?1:n),o,a)}))}composite(t,e=0,i=0){e=~~e,i=~~i;for(let r=0;r=this.height)break;for(let i=0;i=this.width)break;const o=4*(n+s*this.width),a=t.__view__.getUint32(4*(i+r*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const i=255&t,r=i+1,s=256-i;return(255&r*(t>>>24)+s*(e>>>24)>>8)<<24|(255&r*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&r*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(i,255&e)}invert(){for(const[t,e,i]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-i&4294967040|255&i);return this}invertValue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(t,e,c.hslaToColor(r,s,1-n,o))}return this}invertSaturation(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(t,e,c.hslaToColor(r,1-s,n,o))}return this}invertHue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(t,e,c.hslaToColor(1-r,s,n,o))}return this}hueShift(t){for(const[e,i,r]of this.iterateWithColors()){const[s,n,o,a]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(e,i,c.hslaToColor(s+t/360,n,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let i=0;it/e)),255)}dominantColor(t=!0,e=!0,i=15){const r=new Array(262143);for(let s=0;s~~(63*t)));if(t&&h63-i)continue;const l=o<<12|a<<6|h;r[l]=(r[l]||0)+1}let s=-1,n=0;if(r.forEach(((t,e)=>{t>>12&63,a=n>>>6&63,h=63&n;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const i=Math.PI*(t/180),r=Math.sin(i),s=Math.cos(i),n=e?Math.abs(this.width*r)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*r):this.height,a=new c(n,o),h=n/2-.5,l=o/2-.5,_=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=_-r*(u-l),i=f+s*(u-l);do{const n=e+s*(t-h),o=i+r*(t-h);c.__interpolate__(this,a,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),i=e.map((t=>parseFloat(t[0]))),r=e.map((t=>t[1]));if(0===i.length)throw new RangeError("Invalid gradient point count");if(1===i.length)return()=>r[0];if(2===i.length){const t=this.__gradient__(r[0],r[1]);return e=>e<=i[0]?r[0]:e>=i[1]?r[1]:t((e-i[0])/(i[1]-i[0]))}const s=Math.min(...i),n=Math.max(...i);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}return this}static __gradient__(t,e){const i=t>>>24,r=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-i,a=(e>>16&255)-r,h=(e>>8&255)-s,l=(255&e)-n;return t=>(255&i+t*o)<<24|(255&r+t*a)<<16|(255&s+t*h)<<8|255&n+t*l}fisheye(t=2){const e=new c(this.width,this.height),i=this.width,r=this.height,s=this.__u32__,n=e.__u32__,o=1/i,a=1/r;for(const[e,h]of this){const l=e*o-.5,c=h*a-.5,_=Math.sqrt(l**2+c**2),f=2*_**t,u=(f*l/_+.5)*i|0,w=(f*c/_+.5)*r|0;u<1||u>i||w<1||w>r||isNaN(u)||isNaN(w)||(n[h*i+e]=s[i*w+u])}const h=.5*s.length+i/2;return n[h]=s[h],this.__apply__(e)}async encode(t=1,{title:e,author:i,description:s,copyright:n,creationTime:o,software:a,disclaimer:h,warning:c,source:_,comment:f}={}){return await r.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:i,Description:s,Copyright:n,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===a?`github.com/matmen/ImageScript v${l}`:a,Disclaimer:h,Warning:c,Source:_,Comment:f}})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),w.isPNG(i)){const{width:i,height:s,pixels:n}=await r.decode(t);e=new c(i,s),e.bitmap.set(n)}else if(w.isJPEG(i)){await o.init();const i=o.decode(t),r=i.width,s=i.height,n=i.format;e=new c(r,s);const a=i.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(i!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const r=n.rasterize(t,i,e),s=new c(r.width,r.height);return s.bitmap.set(r.buffer),s}static async renderText(t,e,i,r=4294967295,n=new u){await s.init(),t=new s.Font(e,t);const[o,a,h,l]=c.colorToRGBA(r),_=new s.Layout;_.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),_.append(t,i,{scale:e});const f=_.rasterize(o,a,h),w=new c(f.width,f.height);return w.bitmap.set(f.buffer),w.height>n.maxHeight&&w.crop(0,0,w.width,Math.floor(_.lines()/w.height*n.maxHeight)*(w.height/_.lines())),t.free(),_.free(),w.opacity(l/255)}}class _ extends c{static get DISPOSAL_KEEP(){return 1}static get DISPOSAL_PREVIOUS(){return 2}static get DISPOSAL_BACKGROUND(){return 3}constructor(t,e,i=100,r=0,s=0,n=_.DISPOSAL_KEEP){if(isNaN(i)||i<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=i,this.xOffset=r,this.yOffset=s,this.disposalMode=n}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,i,r,s=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");const n=new _(t.width,t.height,e,i,r,s);return n.bitmap.set(t.bitmap),n}resize(t,e,i=c.RESIZE_NEAREST_NEIGHBOR){const r=this.width,s=this.height,n=super.resize(t,e,i);return this.xOffset*=n.width/r,this.yOffset*=n.height/s,n}}class f extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let i=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=10){await h.init();const e=new h.Encoder(this.width,this.height,this.loopCount);for(const i of this){if(!(i instanceof _))throw new Error("GIF contains invalid frames");e.add(i.xOffset,i.yOffset,~~(i.duration/10),i.width,i.height,i.bitmap,i.disposalMode,t)}return e.u8()}static async decode(t,e=!1){let i,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),await h.init(),!w.isGIF(r))throw new Error("Unsupported image type");{await h.init();const r=new h.Decoder(t);let s=[];for(const t of r.frames()){const i=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);if(i.bitmap.set(t.buffer),s.push(i),e)break}r.free(),i=new f(s)}return i}resize(t,e,i=c.RESIZE_NEAREST_NEIGHBOR){for(const r of this)r.resize(t,e,i)}}class u{constructor(t){const{maxWidth:e,maxHeight:i,wrapStyle:r,verticalAlign:s,horizontalAlign:n,wrapHardBreaks:o}=t||{};if(this.maxWidth=e||1/0,isNaN(this.maxWidth)||this.maxWidth<1)throw new RangeError("Invalid maxWidth");if(this.maxHeight=i||1/0,isNaN(this.maxHeight)||this.maxHeight<1)throw new RangeError("Invalid maxHeight");if(this.wrapStyle=r||"word",!["word","char"].includes(this.wrapStyle))throw new RangeError("Invalid wrapStyle");if(this.verticalAlign=s||"left",!["left","center","right"].includes(this.verticalAlign))throw new RangeError("Invalid verticalAlign");if(this.horizontalAlign=n||"top",!["top","middle","bottom"].includes(this.horizontalAlign))throw new RangeError("Invalid horizontalAlign");if(this.wrapHardBreaks=o||!0,"boolean"!=typeof this.wrapHardBreaks)throw new TypeError("Invalid wrapHardBreaks")}}class w{static getType(t){let e;return ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),e=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),e=new DataView(t.buffer)),this.isPNG(e)?"png":this.isJPEG(e)?"jpeg":this.isTIFF(e)?"tiff":this.isGIF(e)?"gif":null}static isPNG(t){return 2303741511===t.getUint32(0,!1)}static isJPEG(t){return t.getUint32(0,!1)>>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:f,Frame:_,TextLayout:u,ImageType:w,decode:function(t,e){return"gif"===w.getType(t)?f.decode(t,e):c.decode(t)}}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.3","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let i=0;for(const r of t)e.set(r,i),i+=r.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let i=0,r=4294967295;for(;i>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8;for(;i>>8;return(4294967295^r)>>>0}},347:(t,e,i)=>{const r=i(883),s=i(354),{init:n,compress:o,decompress:a}=i(423),h=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),c=new Uint8Array([73,69,78,68]),_=r(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:i,channels:s,depth:a=8,level:w=0}){let g=0,d=0;const p=e*s,m=new Uint8Array(i+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,i,r,s){let n=0;if(0===i){for(;n{const{version:r}=i(306);let s,n=null;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}const a="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),h="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const i=o.alloc(e.length);if(o.u8(i,e.length).set(e),this.ptr=s.font_new(i,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const i=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),r=JSON.parse(h(o.u8(s.font_metrics_buffer(i),o.length())));return s.font_metrics_free(i),r}rasterize(t,e=this.scale){const i=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),r={buffer:o.u8(s.font_rasterize_buffer(i),o.length()).slice(),metrics:JSON.parse(h(o.u8(s.font_rasterize_metrics(i),o.length())))};return s.font_rasterize_free(i),r}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=a(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,i){e=a(e);const r=i||{};n&&this.refs.push(t);const h=o.alloc(e.length);o.u8(h,e.length).set(e);const l="r"in r||"g"in r||"b"in r;s.layout_append(this.ptr,t.ptr,h,e.length,null==r.scale?t.scale:r.scale,l,r.r,r.g,r.b)}rasterize(t,e,i){const r=s.layout_rasterize(this.ptr,t,e,i),n={width:s.layout_rasterize_width(r),height:s.layout_rasterize_height(r),buffer:o.u8(s.layout_rasterize_buffer(r),o.length()).slice()};return s.layout_rasterize_free(r),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},667:(t,e,i)=>{const{version:r}=i(306);let s;const n=new Map,o=new TextEncoder;class a{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=a.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={Encoder:class{constructor(t,e,i=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,i)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const i of this.slices)e.set(i,t),t+=i.length;return e}add(t,e,i,r,n,o,h,l){const c=a.alloc(o.length);a.u8(c,o.length).set(o),s.encoder_add(this.ptr,c,o.length,t,e,r,n,i,h,l)}set comment(t){const e=o.encode(t),i=a.alloc(e.length);a.u8(i,e.length).set(e),s.encoder_add_comment(this.ptr,i,e.length)}set application(t){const e=o.encode(t),i=a.alloc(e.length);a.u8(i,e.length).set(e),s.encoder_add_application(this.ptr,i,e.length)}},Decoder:class{constructor(t,e=0){const i=a.alloc(t.length);if(a.u8(i,t.length).set(t),this.ptr=s.decoder_new(i,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:s.decoder_frame_x(t),y:s.decoder_frame_y(t),delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),dispose:s.decoder_frame_dispose(t),buffer:a.u8(s.decoder_frame_buffer(t),a.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e,{env:{push_to_stream(t,e){n.get(t).cb(a.u8(e,a.length()).slice())}}});s=i.exports}}},327:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={encode:function(t,e,i,r){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,i,r),n.length())},decode:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.decode(r,t.length,e,i);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},876:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={rasterize:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.rasterize(r,t.length,e,i);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},76:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const i=s.decode(e,t.length);if(0===i)throw new Error("tiff: failed to decode");const r={width:s.decode_width(i),height:s.decode_height(i),buffer:n.u8(s.decode_buffer(i),n.length()).slice()};return s.decode_free(i),r},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},423:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={compress:function(t,e=3){const i=n.alloc(t.length);return n.u8(i,t.length).set(t),n.copy_and_free(s.compress(i,t.length,e),n.length())},decompress:function(t,e=0){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const r=s.decompress(i,t.length,e);if(0===r)throw new Error("zlib: failed to decompress");return n.copy_and_free(r,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}}},e={},function i(r){var s=e[r];if(void 0!==s)return s.exports;var n=e[r]={exports:{}};return t[r](n,n.exports,i),n.exports}(655);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index 1879af5..bf72292 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","version","Disclaimer","Warning","Source","Comment","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","layout","TextLayout","Font","layoutOptions","Layout","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","crop","lines","free","DISPOSAL_KEEP","super","frame","originalWidth","originalHeight","result","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","frameData","delay","dispose","options","Infinity","getType","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","wasm","registry","mem","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","instantiate","streams","Map","utf8encoder","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return await png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1');\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {TextLayout} layout The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new fontlib.Layout();\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {number}\n */\n static get DISPOSAL_KEEP() {\n return 1;\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {number}\n */\n static get DISPOSAL_PREVIOUS() {\n return 2;\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {number}\n */\n static get DISPOSAL_BACKGROUND() {\n return 3;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n await giflib.init();\n\n if (ImageType.isGIF(view)) { // GIF\n await giflib.init();\n const decoder = new giflib.Decoder(data);\n let frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay * 10, frameData.x, frameData.y, frameData.dispose);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n\n if (onlyExtractFirstFrame)\n break;\n }\n\n decoder.free();\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n \n wasm = instance.exports;\n },\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\nconst utf8encoder = new TextEncoder;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n }\n }\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = await WebAssembly.instantiate(module);\n\n\t\twasm = instance.exports;\n\t}\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","version","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","layout","TextLayout","Font","layoutOptions","Layout","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","crop","lines","free","DISPOSAL_KEEP","super","frame","originalWidth","originalHeight","result","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","frameData","delay","dispose","options","Infinity","getType","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","wasm","registry","mem","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","instantiate","streams","Map","utf8encoder","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\nconst {version} = require('./package.json');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return await png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1');\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {TextLayout} layout The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new fontlib.Layout();\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {number}\n */\n static get DISPOSAL_KEEP() {\n return 1;\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {number}\n */\n static get DISPOSAL_PREVIOUS() {\n return 2;\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {number}\n */\n static get DISPOSAL_BACKGROUND() {\n return 3;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n await giflib.init();\n\n if (ImageType.isGIF(view)) { // GIF\n await giflib.init();\n const decoder = new giflib.Decoder(data);\n let frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay * 10, frameData.x, frameData.y, frameData.dispose);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n\n if (onlyExtractFirstFrame)\n break;\n }\n\n decoder.free();\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n \n wasm = instance.exports;\n },\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\nconst utf8encoder = new TextEncoder;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n }\n }\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = await WebAssembly.instantiate(module);\n\n\t\twasm = instance.exports;\n\t}\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file From 24946cef1b3fa91c1887686e6ad2ee79f4ffcd58 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Tue, 27 Apr 2021 21:46:05 +0200 Subject: [PATCH 064/120] update readme --- README.md | 45 +++++++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index cd2c4ef..24c1f09 100644 --- a/README.md +++ b/README.md @@ -1,46 +1,43 @@ # ImageScript ##### zero-dependency JavaScript image manipulation [![Discord Server](https://img.shields.io/discord/691713541262147687.svg?label=Discord&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2&style=for-the-badge)](https://discord.gg/8hPrwAH) -[![Documentation](https://img.shields.io/badge/Documentationn-informational?style=for-the-badge)](https://oss-is.dreadful.tech/) +[![Documentation](https://img.shields.io/badge/Documentationn-informational?style=for-the-badge)](https://imagescript.dreadful.tech/) [![Github](https://img.shields.io/badge/Github-Repository-181717?logo=github&style=for-the-badge)](https://github.com/matmen/ImageScript) -[![deno.land](https://img.shields.io/badge/deno.land-181717?logo=deno&style=for-the-badge)](https://deno.land/x/imagescript) [![NPM](https://nodei.co/npm/imagescript.png)](https://www.npmjs.com/package/imagescript) --- -**ImageScript** is a zero-dependency alternative to common JavaScript bitmap image manipulation tools. -It can achieve much more performant results by utilizing lower-level memory access, less memory copying and WebAssembly for compression and encoding. +**ImageScript** is a zero-dependency alternative to common JavaScript bitmap image manipulation tools. It can achieve +much more performant results by utilizing lower-level memory access, less memory copying and WebAssembly / native +binaries for decoding and encoding. --- ### Features -- [Decoding images](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#decode) + +- [Decoding images](https://imagescript.dreadful.tech/Image.html#.decode) - PNGs (grayscale, RGB, indexed colors) with and without alpha channels - JPEGs (grayscale, RGB, CMYK) - TIFFs -- [Decoding GIFs](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.gif.html#decode) -- [Rendering SVGs](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#rendersvg) -- [Rendering vector fonts](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#rendertext) -- Image manipulation - functions ([crop](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#crop) - , [rotate](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#rotate) - , [composite](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#composite), ...) -- Color manipulation - functions ([invert](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#invert) - , [hueShift](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#hueshift), ...) -- Color information - functions ([averageColor](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#averagecolor) - , [dominantColor](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#dominantcolor), ...) -- Encoding images as [PNGs](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#encode) - , [JPEGs](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.image.html#encodejpeg) - and [GIFs](https://oss-is.dreadful.tech/classes/_imagescript_.gif.html#encode) -- [Encoding GIFs](https://oss-is.dreadful.tech/classes/_imagescript_._imagescript_-1.gif.html#encode) +- [Decoding GIFs](https://imagescript.dreadful.tech/GIF.html#.decode) +- [Rendering SVGs](https://imagescript.dreadful.tech/Image.html#.renderSVG) +- [Rendering vector fonts](https://imagescript.dreadful.tech/Image.html#.renderText) +- Image manipulation functions ([crop](https://imagescript.dreadful.tech/Image.html#crop) + , [rotate](https://imagescript.dreadful.tech/Image.html#rotate) + , [composite](https://imagescript.dreadful.tech/Image.html#composite), ...) +- Color manipulation functions ([invert](https://imagescript.dreadful.tech/Image.html##invert) + , [hueShift](https://imagescript.dreadful.tech/Image.html##hueshift), ...) +- Color information functions ([averageColor](https://imagescript.dreadful.tech/Image.html##averagecolor) + , [dominantColor](https://imagescript.dreadful.tech/Image.html##dominantcolor), ...) +- Encoding images as [PNGs](https://imagescript.dreadful.tech/Image.html##encode) + , [JPEGs](https://imagescript.dreadful.tech/Image.html##encodejpeg) + and [GIFs](https://imagescript.dreadful.tech/GIF.html#encode) --- -### Usage +### Example -An example on how to integrate ImageScript into your web project can be found in [/example/](/example/). +[![Example](https://github.com/matmen/ImageScript/raw/master/tests/targets/readme.png)](https://github.com/matmen/ImageScript/blob/master/tests/readme.js) --- From 20c559c90f336f87a3afdcba3663ba2a2332ec21 Mon Sep 17 00:00:00 2001 From: evanwashere Date: Thu, 29 Apr 2021 07:03:41 -0400 Subject: [PATCH 065/120] backport from master --- .gitignore | 4 +- ImageScript.js | 222 ++++++++++++++++-------- utils/buffer.js | 41 +++-- utils/crc32.js | 99 +++++------ utils/png.js | 404 +++++++++++++++++++++++-------------------- utils/wasm/font.js | 265 ++++++++++++++-------------- utils/wasm/gif.js | 233 +++++++++++++------------ utils/wasm/jpeg.js | 102 +++++------ utils/wasm/svg.js | 75 ++++---- utils/wasm/tiff.js | 83 ++++----- utils/wasm/zlib.js | 45 ----- utils/wasm/zlib.wasm | Bin 46748 -> 0 bytes 12 files changed, 827 insertions(+), 746 deletions(-) delete mode 100644 utils/wasm/zlib.js delete mode 100644 utils/wasm/zlib.wasm diff --git a/.gitignore b/.gitignore index 6268e56..3f36f21 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ old/ .idea/ -.nyc_output/ coverage/ +.DS_Store +.nyc_output/ node_modules/ +utils/zlib.js \ No newline at end of file diff --git a/ImageScript.js b/ImageScript.js index 47eedf6..77df92c 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1,10 +1,11 @@ const png = require('./utils/png'); -const fontlib = require('./utils/wasm/font'); +const mem = require('./utils/buffer.js'); +const giflib = require('./utils/wasm/gif'); const svglib = require('./utils/wasm/svg'); +const {version} = require('./package.json'); +const fontlib = require('./utils/wasm/font'); const jpeglib = require('./utils/wasm/jpeg'); const tifflib = require('./utils/wasm/tiff'); -const giflib = require('./utils/wasm/gif'); -const {version} = require('./package.json'); const MAGIC_NUMBERS = { PNG: 0x89504e47, @@ -74,8 +75,8 @@ class Image { } /** - * Yields an [x,y] array for every pixel in the image - * @yields {[number, number]} The coordinates of the pixel + * Yields an [x, y] array for every pixel in the image + * @yields {number[]} The coordinates of the pixel ([x, y]) * @returns {void} */ * [Symbol.iterator]() { @@ -87,8 +88,8 @@ class Image { } /** - * Yields an [x,y,color] array for every pixel in the image - * @yields {[number, number, number]} The coordinates and color of the pixel + * Yields an [x, y, color] array for every pixel in the image + * @yields {number[]} The coordinates and color of the pixel ([x, y, color]) */ * iterateWithColors() { let offset = 0; @@ -179,7 +180,7 @@ class Image { * @param g {number} (0..255) * @param b {number} (0..255) * @param a {number} (0..255) - * @returns {(number)[]} The HSLA values ([H, S, L, A]) + * @returns {number[]} The HSLA values ([H, S, L, A]) */ static rgbaToHSLA(r, g, b, a) { r /= 255; @@ -369,6 +370,7 @@ class Image { return this.__apply__(image); } + /** @private */ __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) { if (factor === 1) return this; return this.__resize__(this.width * factor, this.height * factor, mode); @@ -387,6 +389,7 @@ class Image { return this.__apply__(image); } + /** @private */ __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) { if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both'); else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height; @@ -1133,7 +1136,7 @@ class Image { /** * Encodes the image into a PNG - * @param {number} compression The compression level to use (0-3) + * @param {number} compression The compression level to use (0-9) * @param {PNGMetadata} [meta={}] Image metadata * @return {Promise} The encoded data */ @@ -1149,7 +1152,7 @@ class Image { source, comment } = {}) { - return await png.encode(this.bitmap, { + return png.encode(this.bitmap, { width: this.width, height: this.height, level: compression, @@ -1171,12 +1174,11 @@ class Image { /** * Encodes the image into a JPEG - * @param {number} [quality=90] The JPEG quality to use + * @param {number} [quality=90] The JPEG quality to use (1-100) * @return {Promise} */ async encodeJPEG(quality = 90) { - await jpeglib.init(); - return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality))); + return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality); } /** @@ -1187,22 +1189,15 @@ class Image { static async decode(data) { let image; - let view; - if (!ArrayBuffer.isView(data)) { - data = new Uint8Array(data); - view = new DataView(data.buffer); - } else { - data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength); - view = new DataView(data.buffer, data.byteOffset, data.byteLength); - } + data = mem.view(data); + const view = new DataView(data.buffer, data.byteOffset, data.byteLength); if (ImageType.isPNG(view)) { // PNG - const {width, height, pixels} = await png.decode(data); + const {width, height, pixels} = png.decode(data); image = new Image(width, height); image.bitmap.set(pixels); } else if (ImageType.isJPEG(view)) { // JPEG - await jpeglib.init(); - const framebuffer = jpeglib.decode(data); + const framebuffer = (await jpeglib.init()).decode(data); const width = framebuffer.width; const height = framebuffer.height; @@ -1231,8 +1226,7 @@ class Image { } } } else if (ImageType.isTIFF(view)) { // TIFF - await tifflib.init(); - const framebuffer = tifflib.decode(data); + const framebuffer = (await tifflib.init()).decode(data); image = new Image(framebuffer.width, framebuffer.height); image.bitmap.set(framebuffer.buffer); @@ -1279,12 +1273,11 @@ class Image { if (mode === this.SVG_MODE_SCALE && size <= 0) throw new RangeError('SVG scale must be > 0'); if (mode !== this.SVG_MODE_SCALE && size < 1) - throw new RangeError('SVG size must be >= 1'); + throw new RangeError('SVG size must be >= 1') if (typeof svg === 'string') svg = new TextEncoder().encode(svg); + const framebuffer = (await svglib.init()).rasterize(svg, mode, size); - await svglib.init(); - const framebuffer = svglib.rasterize(svg, mode, size); const image = new Image(framebuffer.width, framebuffer.height); image.bitmap.set(framebuffer.buffer); @@ -1297,16 +1290,18 @@ class Image { * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use * @param {number} scale Font size to use * @param {string} text Text to render - * @param {number} color Text color to use - * @param {TextLayout} layout The text layout to use + * @param {number} [color=0xffffffff] Text color to use + * @param {TextLayout} [layout] The text layout to use * @return {Promise} The rendered text */ static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) { - await fontlib.init(); - font = new fontlib.Font(scale, font); + const { Font, Layout } = await fontlib.init(); + + font = new Font(scale, font); const [r, g, b, a] = Image.colorToRGBA(color); - const layoutOptions = new fontlib.Layout(); + const layoutOptions = new Layout(); + layoutOptions.reset({ max_width: layout.maxWidth, max_height: layout.maxHeight, @@ -1336,29 +1331,38 @@ class Image { * Represents a frame in a GIF * @extends Image */ -class Frame extends Image { + class Frame extends Image { /** * GIF frame disposal mode KEEP. For use with {@link Frame} - * @returns {number} + * @returns {string} */ static get DISPOSAL_KEEP() { - return 1; + return 'keep'; } /** * GIF frame disposal mode PREVIOUS. For use with {@link Frame} - * @returns {number} + * @returns {string} */ static get DISPOSAL_PREVIOUS() { - return 2; + return 'previous'; } /** * GIF frame disposal mode BACKGROUND. For use with {@link Frame} - * @returns {number} + * @returns {string} */ static get DISPOSAL_BACKGROUND() { - return 3; + return 'background'; + } + + static __convert_disposal_mode__(mode) { + if (typeof mode === 'string') + mode = ['any', 'keep', 'previous', 'background'].indexOf(mode); + if (mode < 0 || mode > 3) + throw new RangeError('Invalid disposal mode'); + + return mode; } /** @@ -1368,13 +1372,15 @@ class Frame extends Image { * @param {number} [duration = 100] The frames duration (in ms) * @param {number} [xOffset=0] The frames offset on the x-axis * @param {number} [yOffset=0] The frames offset on the y-axis - * @param {number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode + * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND}) * @return {Frame} */ constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) { if (isNaN(duration) || duration < 0) throw new RangeError('Invalid frame duration'); + disposalMode = Frame.__convert_disposal_mode__(disposalMode); + super(width, height); this.duration = duration; this.xOffset = xOffset; @@ -1392,12 +1398,15 @@ class Frame extends Image { * @param {number} [duration = 100] The frames duration (in ms) * @param {number} [xOffset=0] The frames offset on the x-axis * @param {number} [yOffset=0] The frames offset on the y-axis - * @param {number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode + * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND}) * @return {Frame} */ static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) { if (!(image instanceof Image)) throw new TypeError('Invalid image passed'); + + disposalMode = Frame.__convert_disposal_mode__(disposalMode); + const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode); frame.bitmap.set(image.bitmap); @@ -1441,6 +1450,10 @@ class GIF extends Array { this.loopCount = loopCount; } + /** + * The GIFs width + * @returns {number} + */ get width() { let max = 0; for (const frame of this) { @@ -1452,6 +1465,10 @@ class GIF extends Array { return max; } + /** + * The GIFs height + * @returns {number} + */ get height() { let max = 0; for (const frame of this) { @@ -1467,6 +1484,9 @@ class GIF extends Array { return `GIF<${this.width}x${this.height}x${this.duration}ms>`; } + /** + * @returns {Generator} + */ * [Symbol.iterator]() { for (let i = 0; i < this.length; i++) yield this[i]; @@ -1482,16 +1502,15 @@ class GIF extends Array { /** * Encodes the image into a GIF - * @param {number} [quality=10] GIF quality ((best) 1..30 (worst)) + * @param {number} [quality=95] GIF quality 0-100 * @return {Promise} The encoded data */ - async encode(quality = 10) { - await giflib.init(); - const encoder = new giflib.Encoder(this.width, this.height, this.loopCount); + async encode(quality = 95) { + const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount); for (const frame of this) { if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames'); - encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality); + encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, Math.abs(30/100 * quality - 29)); } return encoder.u8(); @@ -1505,32 +1524,99 @@ class GIF extends Array { */ static async decode(data, onlyExtractFirstFrame = false) { let image; + data = mem.view(data); + const view = new DataView(data.buffer, data.byteOffset, data.byteLength); - let view; - if (!ArrayBuffer.isView(data)) { - data = new Uint8Array(data); - view = new DataView(data.buffer); - } else { - data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength); - view = new DataView(data.buffer, data.byteOffset, data.byteLength); - } + if (ImageType.isGIF(view)) { // GIF + const frames = []; + const decoder = new (await giflib.init()).Decoder(data); - await giflib.init(); + if (onlyExtractFirstFrame) { + const first = decoder.frames().next().value; + const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose); - if (ImageType.isGIF(view)) { // GIF - await giflib.init(); - const decoder = new giflib.Decoder(data); - let frames = []; - for (const frameData of decoder.frames()) { - const frame = new Frame(frameData.width, frameData.height, frameData.delay * 10, frameData.x, frameData.y, frameData.dispose); - frame.bitmap.set(frameData.buffer); - frames.push(frame); + frame.bitmap.set(first.buffer); - if (onlyExtractFirstFrame) - break; + frames.push(frame); + image = new GIF(frames); } - decoder.free(); + const gwidth = decoder.width | 0; + const gheight = decoder.height | 0; + const u32 = new Uint32Array(decoder.width * decoder.height); + const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength); + + for (const frame of decoder.frames()) { + let offset8 = 0 | 0; + let offset32 = 0 | 0; + const fx = frame.x | 0; + const fy = frame.y | 0; + const f8 = frame.buffer; + const mode = frame.dispose; + const width = frame.width | 0; + const height = frame.height | 0; + const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height); + const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1]; + + const t8 = f.bitmap; + const t32 = new Uint32Array(t8.buffer); + + t8.set(u8); + + if (2 === mode) { + for (let y = 0 | 0; y < height; y++) { + const y_offset = fx + gwidth * (y + fy) | 0; + + for (let x = 0 | 0; x < width; x++) { + const x_offset = x + y_offset; + + if (0 === f8[3 + offset8]) + t32[x_offset] = u32[x_offset]; + else t32[x_offset] = f32[offset32]; + + offset32++; + offset8 += 4; + } + } + } + + else if (3 === mode) { + for (let y = 0 | 0; y < height; y++) { + const y_offset = fx + gwidth * (y + fy) | 0; + + for (let x = 0 | 0; x < width; x++) { + const x_offset = x + y_offset; + + if (0 === f8[3 + offset8]) + t32[x_offset] = u32[x_offset]; + else t32[x_offset] = f32[offset32]; + + offset32++; + offset8 += 4; + u32[x_offset] = 0; + } + } + } + + else if (0 === mode || 1 === mode) { + t8.set(u8) + for (let y = 0 | 0; y < height; y++) { + const y_offset = fx + gwidth * (y + fy) | 0; + + for (let x = 0 | 0; x < width; x++) { + const x_offset = x + y_offset; + + if (0 === f8[3 + offset8]) + t32[x_offset] = u32[x_offset]; + else t32[x_offset] = f32[offset32]; + + offset32++; + offset8 += 4; + u32[x_offset] = t32[x_offset]; + } + } + }; + } image = new GIF(frames); } else throw new Error('Unsupported image type'); diff --git a/utils/buffer.js b/utils/buffer.js index 04c0318..07942e6 100644 --- a/utils/buffer.js +++ b/utils/buffer.js @@ -1,15 +1,26 @@ -module.exports = class Buffer { - static concat(...arrays) { - const array = new Uint8Array( - arrays.reduce((length, array) => length + array.length, 0) - ); - - let offset = 0; - for (const x of arrays) { - array.set(x, offset); - offset += x.length; - } - - return array; - } -}; \ No newline at end of file +function view(buffer, shared = false) { + if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer); + if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer); + if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength); + + throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'"); + } + + function from_parts(buffers, shared = false) { + let length = 0; + let offset = 0; + buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength)); + + const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length); + + buffers.forEach(buffer => { + const ref = Array.isArray(buffer) ? buffer : view(buffer, true); + + u8.set(ref, offset); + offset += ref.length; + }); + + return u8; + } + + module.exports = { view, from_parts }; \ No newline at end of file diff --git a/utils/crc32.js b/utils/crc32.js index c1da781..5221bd1 100644 --- a/utils/crc32.js +++ b/utils/crc32.js @@ -1,62 +1,49 @@ const table = new Uint32Array([ - 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, - 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, - 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, - 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, - 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, - 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, - 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, - 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, - 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, - 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, - 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106, - 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, - 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, - 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, - 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, - 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, - 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, - 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, - 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, - 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, - 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, - 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, - 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, - 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, - 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, - 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, - 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, - 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, - 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, - 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, - 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, - 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, - 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, - 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, - 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, - 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, - 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, - 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, - 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, - 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, - 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, - 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, + 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, + 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A, + 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, + 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, + 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, + 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, + 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4, + 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, + 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, + 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, + 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, + 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, + 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, + 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76, + 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, + 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, + 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, + 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, + 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, + 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, + 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278, + 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, + 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330, + 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]); - -module.exports = function crc32(buffer) { - let offset = 0; - let crc = 0xFFFFFFFF; - - while (offset < buffer.length - 4) { - crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8); - crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8); - crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8); - crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8); + + module.exports = function crc32(buffer) { + let offset = 0 | 0; + let crc = 0xFFFFFFFF | 0; + const bl = (buffer.length - 4) | 0; + + while (bl > offset) { + crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8); + crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8); + crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8); + crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8); } - + while (offset < buffer.length) { - crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8); + crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8); } - + return (crc ^ 0xFFFFFFFF) >>> 0; -}; \ No newline at end of file + }; \ No newline at end of file diff --git a/utils/png.js b/utils/png.js index 60b7d9e..8f4a2a9 100644 --- a/utils/png.js +++ b/utils/png.js @@ -1,7 +1,7 @@ /* global SharedArrayBuffer */ +const mem = require('./buffer.js'); const crc32 = require('./crc32.js'); -const Buffer = require('./buffer'); -const {init, compress, decompress} = require('./wasm/zlib.js'); +const { compress, decompress } = require('./zlib.js'); const __IHDR__ = new Uint8Array([73, 72, 68, 82]); const __IDAT__ = new Uint8Array([73, 68, 65, 84]); @@ -10,220 +10,248 @@ const __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68])); const HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]); const color_types = { - GREYSCALE: 0, - TRUECOLOR: 2, - INDEXED_COLOR: 3, - GREYSCALE_ALPHA: 4, - TRUECOLOR_ALPHA: 6 + GREYSCALE: 0, + TRUECOLOR: 2, + INDEXED_COLOR: 3, + GREYSCALE_ALPHA: 4, + TRUECOLOR_ALPHA: 6 }; const channels_to_color_type = { - 1: color_types.GREYSCALE, - 2: color_types.GREYSCALE_ALPHA, + 1: color_types.GREYSCALE, + 2: color_types.GREYSCALE_ALPHA, - 3: color_types.TRUECOLOR, - 4: color_types.TRUECOLOR_ALPHA + 3: color_types.TRUECOLOR, + 4: color_types.TRUECOLOR_ALPHA }; +const utf8encoder = new TextEncoder; // replace with latin1 encoder or iext + module.exports = { - async encode(data, {width, height, channels, depth = 8, level = 0}) { - let offset = 0; - let tmp_offset = 0; - const row_length = width * channels; - const tmp = new Uint8Array(height + data.length); + encode(data, { text, width, height, channels, depth = 8, level = 0 }) { + let offset = 0; + let tmp_offset = 0; + const row_length = width * channels; + const tmp = new Uint8Array(height + data.length); - while (offset < data.length) { - tmp[tmp_offset++] = 0; - tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset); + while (offset < data.length) { + tmp[tmp_offset++] = 0; + tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset); - tmp_offset += row_length; - } + tmp_offset += row_length; + } - await init(); - const compressed = compress(tmp, level); - const array = new Uint8Array(49 + HEAD.length + compressed.length); - - array[26] = 0; - array[27] = 0; - array[28] = 0; - array[24] = depth; - array.set(HEAD, 0); - array.set(__IHDR__, 12); - array.set(__IDAT__, 37); - array.set(compressed, 41); - array.set(__IEND__, 49 + compressed.length); - array[25] = channels_to_color_type[channels]; - - const view = new DataView(array.buffer); - - view.setUint32(8, 13); - view.setUint32(16, width); - view.setUint32(20, height); - view.setUint32(33, compressed.length); - view.setUint32(45 + compressed.length, 0); - view.setUint32(53 + compressed.length, __IEND_CRC__); - view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17))); - view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length))); - - return array; - }, - async decode(array) { - let view = new DataView(array.buffer, array.byteOffset, array.byteLength); - - const width = view.getUint32(16); - const height = view.getUint32(20); - const bpc = array[24]; - const pixel_type = array[25]; - let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type]; - const bytespp = channels * bpc / 8; - - const row_length = width * bytespp; - let pixels = new Uint8Array(height * row_length); - - let offset = 0; - let p_offset = 0; - - let c_offset = 33; - const chunks = []; - - let palette, alphaPalette; - - let type; - while (type !== 1229278788) { - type = view.getUint32(4 + c_offset); - - // IDAT - if (type === 1229209940) - chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset))); - else if (type === 1347179589) { // PLTE - if (palette) - throw new Error('PLTE can only occur once in an image'); - palette = new Uint32Array(view.getUint32(c_offset)); - for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3) - palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff; - } else if (type === 1951551059) { // tRNS - if (alphaPalette) - throw new Error('tRNS can only occur once in an image'); - alphaPalette = new Uint8Array(view.getUint32(c_offset)); - for (let i = 0; i < alphaPalette.length; i++) - alphaPalette[i] = array[8 + c_offset + i]; - } - - c_offset += 4 + 4 + 4 + view.getUint32(c_offset); - } + if (text) { + let chunks = []; + for (const key in text) { + if (!text[key]) continue; + const kb = utf8encoder.encode(key); + const tb = utf8encoder.encode(text[key]); + const chunk = new Uint8Array(1 + 12 + kb.length + tb.length); + + const view = new DataView(chunk.buffer); + + chunk[4] = 0x74; + chunk[5] = 0x45; + chunk[6] = 0x58; + chunk[7] = 0x74; + chunk.set(kb, 8); + chunks.push(chunk); + chunk.set(tb, 9 + kb.length); + view.setUint32(0, chunk.length - 12); + view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4))); + } + + text = mem.from_parts(chunks); + } - await init(); - array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks)); + offset = text ? text.length : 0; + const compressed = compress(tmp, level); + const array = new Uint8Array(49 + offset + HEAD.length + compressed.length); + + array[26] = 0; + array[27] = 0; + array[28] = 0; + array[24] = depth; + array.set(HEAD, 0); + array.set(__IHDR__, 12); + array.set(__IDAT__, 37); + array.set(compressed, 41); + array[25] = channels_to_color_type[channels]; + if (text) array.set(text, 45 + compressed.length); + array.set(__IEND__, 49 + offset + compressed.length); + + const view = new DataView(array.buffer); + + view.setUint32(8, 13); + view.setUint32(16, width); + view.setUint32(20, height); + view.setUint32(33, compressed.length); + view.setUint32(45 + offset + compressed.length, 0); + view.setUint32(53 + offset + compressed.length, __IEND_CRC__); + view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17))); + view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length))); + + return array; + }, + + decode(array) { + let view = new DataView(array.buffer, array.byteOffset, array.byteLength); + + const width = view.getUint32(16); + const height = view.getUint32(20); + const bpc = array[24]; + const pixel_type = array[25]; + let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type]; + const bytespp = channels * bpc / 8; + + const row_length = width * bytespp; + let pixels = new Uint8Array(height * row_length); + + let offset = 0; + let p_offset = 0; + + let c_offset = 33; + const chunks = []; + + let palette, alphaPalette; + + const maxSearchOffset = array.length - 5; + + let type; + while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND + if (type === 1229209940) // IDAT + chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset))); + else if (type === 1347179589) { // PLTE + if (palette) + throw new Error('PLTE can only occur once in an image'); + palette = new Uint32Array(view.getUint32(c_offset)); + for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3) + palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff; + } else if (type === 1951551059) { // tRNS + if (alphaPalette) + throw new Error('tRNS can only occur once in an image'); + alphaPalette = new Uint8Array(view.getUint32(c_offset)); + for (let i = 0; i < alphaPalette.length; i++) + alphaPalette[i] = array[8 + c_offset + i]; + } + + c_offset += 4 + 4 + 4 + view.getUint32(c_offset); + if (c_offset > maxSearchOffset) // missing IEND + break; + } - while (offset < array.byteLength) { - const filter = array[offset++]; - const slice = array.subarray(offset, offset += row_length); + array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length); - if (0 === filter) pixels.set(slice, p_offset); - else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length); - else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length); - else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length); - else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length); + while (offset < array.byteLength) { + const filter = array[offset++]; + const slice = array.subarray(offset, offset += row_length); - p_offset += row_length; - } + if (0 === filter) pixels.set(slice, p_offset); + else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length); + else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length); + else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length); + else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length); - if (pixel_type === 3) { - if (!palette) - throw new Error('Indexed color PNG has no PLTE'); + p_offset += row_length; + } - if (alphaPalette) - for (let i = 0; i < alphaPalette.length; i++) - palette[i] &= 0xffffff00 | alphaPalette[i]; + if (pixel_type === 3) { + if (!palette) + throw new Error('Indexed color PNG has no PLTE'); - channels = 4; - const newPixels = new Uint8Array(width * height * 4); - const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength); - for (let i = 0; i < pixels.length; i++) - pixelView.setUint32(i * 4, palette[pixels[i]], false); - pixels = newPixels; - } + if (alphaPalette) + for (let i = 0; i < alphaPalette.length; i++) + palette[i] &= 0xffffff00 | alphaPalette[i]; - if (bpc !== 8) { - const newPixels = new Uint8Array(pixels.length / bpc * 8); - for (let i = 0; i < pixels.length; i += 2) - newPixels[i / 2] = pixels[i]; - pixels = newPixels; - } + channels = 4; + const newPixels = new Uint8Array(width * height * 4); + const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength); + for (let i = 0; i < pixels.length; i++) + pixelView.setUint32(i * 4, palette[pixels[i]], false); + pixels = newPixels; + } - if (channels !== 4) { - const newPixels = new Uint8Array(width * height * 4); - const view = new DataView(newPixels.buffer); - - if (channels === 1) { - for (let i = 0; i < width * height; i++) { - const pixel = pixels[i]; - view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false); - } - } else if (channels === 2) { - for (let i = 0; i < width * height * 2; i += 2) { - const pixel = pixels[i]; - view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false); - } - } else if (channels === 3) { - newPixels.fill(0xff); - for (let i = 0; i < width * height; i++) - newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4); - } - - pixels = newPixels; + if (bpc !== 8) { + const newPixels = new Uint8Array(pixels.length / bpc * 8); + for (let i = 0; i < pixels.length; i += 2) + newPixels[i / 2] = pixels[i]; + pixels = newPixels; + } + + if (channels !== 4) { + const newPixels = new Uint8Array(width * height * 4); + const view = new DataView(newPixels.buffer); + + if (channels === 1) { + for (let i = 0; i < width * height; i++) { + const pixel = pixels[i]; + view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false); + } + } else if (channels === 2) { + for (let i = 0; i < width * height * 2; i += 2) { + const pixel = pixels[i]; + view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false); } + } else if (channels === 3) { + newPixels.fill(0xff); + for (let i = 0; i < width * height; i++) + newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4); + } - return {width, height, pixels}; - }, + pixels = newPixels; + } - filter_1(slice, pixels, p_offset, bytespp, row_length) { - let i = 0; - while (i < bytespp) pixels[i + p_offset] = slice[i++]; - while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp]; - }, + return { width, height, pixels }; + }, - filter_2(slice, pixels, p_offset, bytespp, row_length) { - if (0 === p_offset) pixels.set(slice, p_offset); - else { - let i = 0; - while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length]; - } - }, + filter_1(slice, pixels, p_offset, bytespp, row_length) { + let i = 0; + while (i < bytespp) pixels[i + p_offset] = slice[i++]; + while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp]; + }, - filter_3(slice, pixels, p_offset, bytespp, row_length) { - let i = 0; + filter_2(slice, pixels, p_offset, bytespp, row_length) { + if (0 === p_offset) pixels.set(slice, p_offset); + else { + let i = 0; + while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length]; + } + }, - if (0 === p_offset) { - while (i < bytespp) pixels[i] = slice[i++]; - while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1); - } else { - while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1); - while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1); - } - }, + filter_3(slice, pixels, p_offset, bytespp, row_length) { + let i = 0; - filter_4(slice, pixels, p_offset, bytespp, row_length) { - let i = 0; + if (0 === p_offset) { + while (i < bytespp) pixels[i] = slice[i++]; + while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1); + } else { + while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1); + while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1); + } + }, - if (0 === p_offset) { - while (i < bytespp) pixels[i] = slice[i++]; - while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp]; - } else { - while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length]; + filter_4(slice, pixels, p_offset, bytespp, row_length) { + let i = 0; - while (i < row_length) { - const a = pixels[i + p_offset - bytespp]; - const b = pixels[i + p_offset - row_length]; - const c = pixels[i + p_offset - bytespp - row_length]; + if (0 === p_offset) { + while (i < bytespp) pixels[i] = slice[i++]; + while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp]; + } else { + while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length]; - const p = a + b - c; - const pa = Math.abs(p - a); - const pb = Math.abs(p - b); - const pc = Math.abs(p - c); + while (i < row_length) { + const a = pixels[i + p_offset - bytespp]; + const b = pixels[i + p_offset - row_length]; + const c = pixels[i + p_offset - bytespp - row_length]; - pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c)); - } - } + const p = a + b - c; + const pa = Math.abs(p - a); + const pb = Math.abs(p - b); + const pc = Math.abs(p - c); + + pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c)); + } } -}; + } +}; \ No newline at end of file diff --git a/utils/wasm/font.js b/utils/wasm/font.js index 71c2ff1..398644c 100644 --- a/utils/wasm/font.js +++ b/utils/wasm/font.js @@ -1,141 +1,142 @@ const {version} = require('../../package.json'); -let wasm; -let registry = null; - -class mem { - static length() { return wasm.wlen(); } - static alloc(size) { return wasm.walloc(size); } - static free(ptr, size) { return wasm.wfree(ptr, size); } - static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } - static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } - - static copy_and_free(ptr, size) { - let slice = mem.u8(ptr, size).slice(); - return (wasm.wfree(ptr, size), slice); - } -} - -const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => { - const encoder = new TextEncoder(); - return string => encoder.encode(string); -})(); - -const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => { - const decoder = new TextDecoder(); - return buffer => decoder.decode(buffer); -})(); - -if ('FinalizationRegistry' in globalThis) { - registry = new FinalizationRegistry(([t, ptr]) => { - if (t === 0) wasm.font_free(ptr); - if (t === 1) wasm.layout_free(ptr); - }); -} - -class Font { - constructor(scale, buffer) { - this.scale = scale; - const ptr = mem.alloc(buffer.length); - mem.u8(ptr, buffer.length).set(buffer); - this.ptr = wasm.font_new(ptr, buffer.length, scale); - - if (!this.ptr) throw new Error('invalid font'); - if (registry) registry.register(this, [0, this.ptr], this); - } - - free() { - this.ptr = wasm.font_free(this.ptr); - if (registry) registry.unregister(this); - } - - has(char) { - return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0)); - } - - metrics(char, scale = this.scale) { - const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale); - const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length()))); - - return (wasm.font_metrics_free(ptr), metrics); - } - - rasterize(char, scale = this.scale) { - const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale); - - const glyph = { - buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(), - metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))), +let mod = null; +module.exports = { + async init() { + if (!mod) { + const streaming = 'compileStreaming' in WebAssembly; + mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer())); } + + return this.new(); + }, - return (wasm.font_rasterize_free(ptr), glyph); - } -} - -class Layout { - constructor() { - this.ptr = wasm.layout_new(); - if (registry) this.refs = []; - if (registry) registry.register(this, [1, this.ptr], this); - } - - clear() { - wasm.layout_clear(this.ptr); - if (registry) this.refs.length = 0; - } - - lines() { - return wasm.layout_lines(this.ptr); - } - - free() { - if (registry) this.refs.length = 0; - this.ptr = wasm.layout_free(this.ptr); - if (registry) registry.unregister(this); - } - - reset(options = {}) { - options = encode_utf8(JSON.stringify(options)); - - if (registry) this.refs.length = 0; - const ptr = mem.alloc(options.length); - mem.u8(ptr, options.length).set(options); - wasm.layout_reset(this.ptr, ptr, options.length); - } - - append(font, text, init) { - text = encode_utf8(text); - const options = init || {}; - if (registry) this.refs.push(font); - const ptr = mem.alloc(text.length); - mem.u8(ptr, text.length).set(text); - const has_color = ('r' in options) || ('g' in options) || ('b' in options); - wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b); - } - - rasterize(r, g, b) { - const ptr = wasm.layout_rasterize(this.ptr, r, g, b); - - const framebuffer = { - width: wasm.layout_rasterize_width(ptr), - height: wasm.layout_rasterize_height(ptr), - buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(), + new() { + let registry = null; + const wasm = new WebAssembly.Instance(mod).exports; + + class mem { + static length() { return wasm.wlen(); } + static alloc(size) { return wasm.walloc(size); } + static free(ptr, size) { return wasm.wfree(ptr, size); } + static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } + static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } + + static copy_and_free(ptr, size) { + let slice = mem.u8(ptr, size).slice(); + return (wasm.wfree(ptr, size), slice); + } + } + const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => { + const encoder = new TextEncoder(); + return string => encoder.encode(string); + })(); + + const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => { + const decoder = new TextDecoder(); + return buffer => decoder.decode(buffer); + })(); + + if ('FinalizationRegistry' in globalThis) { + registry = new FinalizationRegistry(([t, ptr]) => { + if (t === 0) wasm.font_free(ptr); + if (t === 1) wasm.layout_free(ptr); + }); } - return (wasm.layout_rasterize_free(ptr), framebuffer); - } -} + class Font { + constructor(scale, buffer) { + this.scale = scale; + const ptr = mem.alloc(buffer.length); + mem.u8(ptr, buffer.length).set(buffer); + this.ptr = wasm.font_new(ptr, buffer.length, scale); -module.exports = { - Font, - Layout, + if (!this.ptr) throw new Error('invalid font'); + if (registry) registry.register(this, [0, this.ptr], this); + } - async init() { - if (wasm) return; - const streaming = 'compileStreaming' in WebAssembly; - const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer())); - const instance = await WebAssembly.instantiate(module); - - wasm = instance.exports; + free() { + this.ptr = wasm.font_free(this.ptr); + if (registry) registry.unregister(this); + } + + has(char) { + return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0)); + } + + metrics(char, scale = this.scale) { + const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale); + const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length()))); + + return (wasm.font_metrics_free(ptr), metrics); + } + + rasterize(char, scale = this.scale) { + const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale); + + const glyph = { + buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(), + metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))), + } + + return (wasm.font_rasterize_free(ptr), glyph); + } + } + + class Layout { + constructor() { + this.ptr = wasm.layout_new(); + if (registry) this.refs = []; + if (registry) registry.register(this, [1, this.ptr], this); + } + + clear() { + wasm.layout_clear(this.ptr); + if (registry) this.refs.length = 0; + } + + lines() { + return wasm.layout_lines(this.ptr); + } + + free() { + if (registry) this.refs.length = 0; + this.ptr = wasm.layout_free(this.ptr); + if (registry) registry.unregister(this); + } + + reset(options = {}) { + options = encode_utf8(JSON.stringify(options)); + + if (registry) this.refs.length = 0; + const ptr = mem.alloc(options.length); + mem.u8(ptr, options.length).set(options); + wasm.layout_reset(this.ptr, ptr, options.length); + } + + append(font, text, init) { + text = encode_utf8(text); + const options = init || {}; + if (registry) this.refs.push(font); + const ptr = mem.alloc(text.length); + mem.u8(ptr, text.length).set(text); + const has_color = ('r' in options) || ('g' in options) || ('b' in options); + wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b); + } + + rasterize(r, g, b) { + const ptr = wasm.layout_rasterize(this.ptr, r, g, b); + + const framebuffer = { + width: wasm.layout_rasterize_width(ptr), + height: wasm.layout_rasterize_height(ptr), + buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(), + } + + return (wasm.layout_rasterize_free(ptr), framebuffer); + } + } + + return { Font, Layout }; }, -} +} \ No newline at end of file diff --git a/utils/wasm/gif.js b/utils/wasm/gif.js index b3a4c7c..80fec7e 100644 --- a/utils/wasm/gif.js +++ b/utils/wasm/gif.js @@ -1,130 +1,133 @@ const {version} = require('../../package.json'); -let wasm; -const streams = new Map; -const utf8encoder = new TextEncoder; - -class mem { - static length() { return wasm.wlen(); } - static alloc(size) { return wasm.walloc(size); } - static free(ptr, size) { return wasm.wfree(ptr, size); } - static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } - static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } - - static copy_and_free(ptr, size) { - let slice = mem.u8(ptr, size).slice(); - return (wasm.wfree(ptr, size), slice); - } -} +let mod = null; +module.exports = { + async init() { + if (!mod) { + const streaming = 'compileStreaming' in WebAssembly; + mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer())); + }; -class Encoder { - constructor(width, height, loops = -1) { - this.slices = []; - streams.set(0, this); - this.ptr = wasm.encoder_new(0, width, height, loops); - } - - cb(buffer) { - this.slices.push(buffer); - } - - free() { - this.ptr = wasm.encoder_free(this.ptr); - streams.delete(0); - } - - u8() { - this.free(); - let offset = 0; - const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0)); - - for (const x of this.slices) { - u8.set(x, offset); - offset += x.length; - } + return this.new(); + }, - return u8; - } + new() { + const streams = new Map; + const utf8encoder = new TextEncoder; - add(x, y, delay, width, height, buffer, dispose, quality) { - const ptr = mem.alloc(buffer.length); - mem.u8(ptr, buffer.length).set(buffer); - wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality); - } + const wasm = new WebAssembly.Instance(mod, { + env: { + push_to_stream(id, ptr) { + streams.get(id).cb(mem.u8(ptr, mem.length()).slice()); + }, + }, + }).exports; + + class mem { + static length() { return wasm.wlen(); } + static alloc(size) { return wasm.walloc(size); } + static free(ptr, size) { return wasm.wfree(ptr, size); } + static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } + static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } + + static copy_and_free(ptr, size) { + let slice = mem.u8(ptr, size).slice(); + return (wasm.wfree(ptr, size), slice); + } + } + + class Encoder { + constructor(width, height, loops = -1) { + this.slices = []; + streams.set(0, this); + this.ptr = wasm.encoder_new(0, width, height, loops); + } + + cb(buffer) { + this.slices.push(buffer); + } + + free() { + this.ptr = wasm.encoder_free(this.ptr); + streams.delete(0); + } + + u8() { + this.free(); + let offset = 0; + const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0)); + + for (const x of this.slices) { + u8.set(x, offset); + offset += x.length; + } + + return u8; + } + + add(x, y, delay, width, height, buffer, dispose, quality) { + const ptr = mem.alloc(buffer.length); + mem.u8(ptr, buffer.length).set(buffer); + wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality); + } + + set comment(comment) { + const buffer = utf8encoder.encode(comment); + + const ptr = mem.alloc(buffer.length); + mem.u8(ptr, buffer.length).set(buffer); + wasm.encoder_add_comment(this.ptr, ptr, buffer.length); + } + + set application(application) { + const buffer = utf8encoder.encode(application); + + const ptr = mem.alloc(buffer.length); + mem.u8(ptr, buffer.length).set(buffer); + wasm.encoder_add_application(this.ptr, ptr, buffer.length); + } + } - set comment(comment) { - const buffer = utf8encoder.encode(comment); + class Decoder { + constructor(buffer, limit = 0) { + const bptr = mem.alloc(buffer.length); + mem.u8(bptr, buffer.length).set(buffer); + this.ptr = wasm.decoder_new(bptr, buffer.length, limit); + if (0 === this.ptr) throw new Error('gif: failed to parse gif header'); - const ptr = mem.alloc(buffer.length); - mem.u8(ptr, buffer.length).set(buffer); - wasm.encoder_add_comment(this.ptr, ptr, buffer.length); - } + this.width = wasm.decoder_width(this.ptr); + this.height = wasm.decoder_height(this.ptr); + } - set application(application) { - const buffer = utf8encoder.encode(application); + free() { + this.ptr = wasm.decoder_free(this.ptr); + } - const ptr = mem.alloc(buffer.length); - mem.u8(ptr, buffer.length).set(buffer); - wasm.encoder_add_application(this.ptr, ptr, buffer.length); - } -} + *frames() { + let frame; + while (frame = this.frame()) yield frame; + } -class Decoder { - constructor(buffer, limit = 0) { - const bptr = mem.alloc(buffer.length); - mem.u8(bptr, buffer.length).set(buffer); - this.ptr = wasm.decoder_new(bptr, buffer.length, limit); - if (0 === this.ptr) throw new Error('gif: failed to parse gif header'); - - this.width = wasm.decoder_width(this.ptr); - this.height = wasm.decoder_height(this.ptr); - } - - free() { - this.ptr = wasm.decoder_free(this.ptr); - } - - *frames() { - let frame; - while (frame = this.frame()) yield frame; - } - - frame() { - const ptr = wasm.decoder_frame(this.ptr); - - if (1 === ptr) return null; - if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame')); - - const framebuffer = { - x: wasm.decoder_frame_x(ptr), - y: wasm.decoder_frame_y(ptr), - delay: wasm.decoder_frame_delay(ptr), - width: wasm.decoder_frame_width(ptr), - height: wasm.decoder_frame_height(ptr), - dispose: wasm.decoder_frame_dispose(ptr), - buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(), - }; + frame() { + const ptr = wasm.decoder_frame(this.ptr); - return (wasm.decoder_frame_free(ptr), framebuffer); - } -} + if (1 === ptr) return null; + if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame')); -module.exports = { - Encoder, - Decoder, + const framebuffer = { + x: wasm.decoder_frame_x(ptr), + y: wasm.decoder_frame_y(ptr), + delay: wasm.decoder_frame_delay(ptr), + width: wasm.decoder_frame_width(ptr), + height: wasm.decoder_frame_height(ptr), + dispose: wasm.decoder_frame_dispose(ptr), + buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(), + }; - async init() { - if (wasm) return; - const streaming = 'compileStreaming' in WebAssembly; - const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer())); - const instance = await WebAssembly.instantiate(module, { - env: { - push_to_stream(id, ptr) { - streams.get(id).cb(mem.u8(ptr, mem.length()).slice()); - } + return (wasm.decoder_frame_free(ptr), framebuffer); } - }); - - wasm = instance.exports; - } + } + + return { Encoder, Decoder }; + }, } diff --git a/utils/wasm/jpeg.js b/utils/wasm/jpeg.js index 063de94..d81041a 100644 --- a/utils/wasm/jpeg.js +++ b/utils/wasm/jpeg.js @@ -1,54 +1,56 @@ const {version} = require('../../package.json'); -let wasm; - -class mem { - static length() { return wasm.wlen(); } - static alloc(size) { return wasm.walloc(size); } - static free(ptr, size) { return wasm.wfree(ptr, size); } - static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } - static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } - - static copy_and_free(ptr, size) { - let slice = mem.u8(ptr, size).slice(); - return (wasm.wfree(ptr, size), slice); - } -} - -function encode(buffer, width, height, quality) { - const ptr = mem.alloc(buffer.length); - mem.u8(ptr, buffer.length).set(buffer); - return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length()); -} - -function decode(buffer, width, height) { - const bptr = mem.alloc(buffer.length); - mem.u8(bptr, buffer.length).set(buffer); - const ptr = wasm.decode(bptr, buffer.length, width, height); - - if (0 === ptr) throw new Error('jpg: failed to decode'); - if (1 === ptr) throw new Error('jpg: failed to scale decoder'); - - const framebuffer = { - width: wasm.decode_width(ptr), - height: wasm.decode_height(ptr), - format: wasm.decode_format(ptr), - buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(), - } - - return (wasm.decode_free(ptr), framebuffer); -} - +let mod = null; module.exports = { - encode, - decode, - async init() { - if (wasm) return; - const streaming = 'compileStreaming' in WebAssembly; - const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer())); - const instance = await WebAssembly.instantiate(module); - - wasm = instance.exports; - } -} + if (!mod) { + const streaming = 'compileStreaming' in WebAssembly; + mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer())); + }; + + return this.new(); + }, + + new() { + const wasm = new WebAssembly.Instance(mod).exports; + + class mem { + static length() { return wasm.wlen(); } + static alloc(size) { return wasm.walloc(size); } + static free(ptr, size) { return wasm.wfree(ptr, size); } + static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } + static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } + + static copy_and_free(ptr, size) { + let slice = mem.u8(ptr, size).slice(); + return (wasm.wfree(ptr, size), slice); + } + } + + function encode(buffer, width, height, quality) { + const ptr = mem.alloc(buffer.length); + mem.u8(ptr, buffer.length).set(buffer); + return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length()); + } + + function decode(buffer, width, height) { + const bptr = mem.alloc(buffer.length); + mem.u8(bptr, buffer.length).set(buffer); + const ptr = wasm.decode(bptr, buffer.length, width, height); + + if (0 === ptr) throw new Error('jpg: failed to decode'); + if (1 === ptr) throw new Error('jpg: failed to scale decoder'); + + const framebuffer = { + width: wasm.decode_width(ptr), + height: wasm.decode_height(ptr), + format: wasm.decode_format(ptr), + buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(), + } + + return (wasm.decode_free(ptr), framebuffer); + } + + return { encode, decode }; + }, +} \ No newline at end of file diff --git a/utils/wasm/svg.js b/utils/wasm/svg.js index f4492c8..c2dda2c 100644 --- a/utils/wasm/svg.js +++ b/utils/wasm/svg.js @@ -1,46 +1,49 @@ -const {version} = require('../../package.json'); +const { version } = require('../../package.json'); -let wasm; +let mod = null; +module.exports = { + async init() { + if (!mod) { + const streaming = 'compileStreaming' in WebAssembly; + mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer())); + }; -class mem { - static length() { return wasm.wlen(); } - static alloc(size) { return wasm.walloc(size); } - static free(ptr, size) { return wasm.wfree(ptr, size); } - static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } - static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } + return this.new(); + }, - static copy_and_free(ptr, size) { - let slice = mem.u8(ptr, size).slice(); - return (wasm.wfree(ptr, size), slice); - } -} + new() { + const wasm = new WebAssembly.Instance(mod).exports; -function rasterize(buffer, fit, scale) { - const bptr = mem.alloc(buffer.length); - mem.u8(bptr, buffer.length).set(buffer); - const ptr = wasm.rasterize(bptr, buffer.length, fit, scale); - - if (0 === ptr) throw new Error('svg: failed to parse'); - if (1 === ptr) throw new Error('svg: failed to rasterize'); - - const framebuffer = { - width: wasm.rasterize_width(ptr), - height: wasm.rasterize_height(ptr), - buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(), + class mem { + static length() { return wasm.wlen(); } + static alloc(size) { return wasm.walloc(size); } + static free(ptr, size) { return wasm.wfree(ptr, size); } + static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } + static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } + + static copy_and_free(ptr, size) { + let slice = mem.u8(ptr, size).slice(); + return (wasm.wfree(ptr, size), slice); + } } - - return (wasm.rasterize_free(ptr), framebuffer); -} -module.exports = { - rasterize, + function rasterize(buffer, fit, scale) { + const bptr = mem.alloc(buffer.length); + mem.u8(bptr, buffer.length).set(buffer); + const ptr = wasm.rasterize(bptr, buffer.length, fit, scale); + + if (0 === ptr) throw new Error('svg: failed to parse'); + if (1 === ptr) throw new Error('svg: failed to rasterize'); - async init() { - if (wasm) return; - const streaming = 'compileStreaming' in WebAssembly; - const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer())); - const instance = await WebAssembly.instantiate(module); + const framebuffer = { + width: wasm.rasterize_width(ptr), + height: wasm.rasterize_height(ptr), + buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(), + } - wasm = instance.exports; + return (wasm.rasterize_free(ptr), framebuffer); } + + return { rasterize }; + }, } diff --git a/utils/wasm/tiff.js b/utils/wasm/tiff.js index 5849b24..17f5c1d 100644 --- a/utils/wasm/tiff.js +++ b/utils/wasm/tiff.js @@ -1,44 +1,47 @@ -const {version} = require('../../package.json'); - -let wasm; - -class mem { - static length() { return wasm.wlen(); } - static alloc(size) { return wasm.walloc(size); } - static free(ptr, size) { return wasm.wfree(ptr, size); } - static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } - static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } - - static copy_and_free(ptr, size) { - let slice = mem.u8(ptr, size).slice(); - return (wasm.wfree(ptr, size), slice); - } -} - -function decode(buffer) { - const bptr = mem.alloc(buffer.length); - mem.u8(bptr, buffer.length).set(buffer); - const ptr = wasm.decode(bptr, buffer.length); - if (0 === ptr) throw new Error('tiff: failed to decode'); - - const framebuffer = { - width: wasm.decode_width(ptr), - height: wasm.decode_height(ptr), - buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(), - } - - return (wasm.decode_free(ptr), framebuffer); -} +const { version } = require('../../package.json'); +let mod = null; module.exports = { - decode, - async init() { - if (wasm) return; - const streaming = 'compileStreaming' in WebAssembly; - const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer())); - const instance = await WebAssembly.instantiate(module); - - wasm = instance.exports; - } + if (!mod) { + const streaming = 'compileStreaming' in WebAssembly; + mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer())); + }; + + return this.new(); + }, + + new() { + const wasm = new WebAssembly.Instance(mod).exports; + + class mem { + static length() { return wasm.wlen(); } + static alloc(size) { return wasm.walloc(size); } + static free(ptr, size) { return wasm.wfree(ptr, size); } + static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } + static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } + + static copy_and_free(ptr, size) { + let slice = mem.u8(ptr, size).slice(); + return (wasm.wfree(ptr, size), slice); + } + } + + function decode(buffer) { + const bptr = mem.alloc(buffer.length); + mem.u8(bptr, buffer.length).set(buffer); + const ptr = wasm.decode(bptr, buffer.length); + if (0 === ptr) throw new Error('tiff: failed to decode'); + + const framebuffer = { + width: wasm.decode_width(ptr), + height: wasm.decode_height(ptr), + buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(), + } + + return (wasm.decode_free(ptr), framebuffer); + } + + return { decode }; + }, } diff --git a/utils/wasm/zlib.js b/utils/wasm/zlib.js deleted file mode 100644 index a7875ad..0000000 --- a/utils/wasm/zlib.js +++ /dev/null @@ -1,45 +0,0 @@ -const {version} = require('../../package.json'); - -let wasm; - -class mem { - static length() { return wasm.wlen(); } - static alloc(size) { return wasm.walloc(size); } - static free(ptr, size) { return wasm.wfree(ptr, size); } - static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); } - static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); } - - static copy_and_free(ptr, size) { - let slice = mem.u8(ptr, size).slice(); - return (wasm.wfree(ptr, size), slice); - } -} - -function compress(buffer, level = 3) { - const ptr = mem.alloc(buffer.length); - mem.u8(ptr, buffer.length).set(buffer); - return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length()); -} - -function decompress(buffer, limit = 0) { - const ptr = mem.alloc(buffer.length); - mem.u8(ptr, buffer.length).set(buffer); - const x = wasm.decompress(ptr, buffer.length, limit); - if (0 === x) throw new Error('zlib: failed to decompress'); - - return mem.copy_and_free(x, mem.length()); -} - -module.exports = { - compress, - decompress, - - async init() { - if (wasm) return; - const streaming = 'compileStreaming' in WebAssembly; - const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer())); - const instance = await WebAssembly.instantiate(module); - - wasm = instance.exports; - } -} diff --git a/utils/wasm/zlib.wasm b/utils/wasm/zlib.wasm deleted file mode 100644 index 33162ee30b8830a316bf07eeeeea172931e05a1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46748 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 Date: Thu, 29 Apr 2021 07:04:56 -0400 Subject: [PATCH 066/120] what in the github --- .gitignore | 3 +- utils/zlib.js | 622 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 623 insertions(+), 2 deletions(-) create mode 100644 utils/zlib.js diff --git a/.gitignore b/.gitignore index 3f36f21..d229b68 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,4 @@ old/ coverage/ .DS_Store .nyc_output/ -node_modules/ -utils/zlib.js \ No newline at end of file +node_modules/ \ No newline at end of file diff --git a/utils/zlib.js b/utils/zlib.js new file mode 100644 index 0000000..3367764 --- /dev/null +++ b/utils/zlib.js @@ -0,0 +1,622 @@ +// node_modules/fflate/esm/browser.js +// https://github.com/101arrowz/fflate + +// MIT License + +// Copyright (c) 2020 Arjun Barrett + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + + +var u8 = Uint8Array; +var u16 = Uint16Array; +var u32 = Uint32Array; +var fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]); +var fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]); +var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]); +var freb = function (eb, start) { + var b = new u16(31); + for (var i = 0; i < 31; ++i) { + b[i] = start += 1 << eb[i - 1]; + } + var r = new u32(b[30]); + for (var i = 1; i < 30; ++i) { + for (var j = b[i]; j < b[i + 1]; ++j) { + r[j] = j - b[i] << 5 | i; + } + } + return [b, r]; +}; +var _a = freb(fleb, 2); +var fl = _a[0]; +var revfl = _a[1]; +fl[28] = 258, revfl[258] = 28; +var _b = freb(fdeb, 0); +var fd = _b[0]; +var revfd = _b[1]; +var rev = new u16(32768); +for (var i = 0; i < 32768; ++i) { + x = (i & 43690) >>> 1 | (i & 21845) << 1; + x = (x & 52428) >>> 2 | (x & 13107) << 2; + x = (x & 61680) >>> 4 | (x & 3855) << 4; + rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1; +} +var x; +var hMap = function (cd, mb, r) { + var s = cd.length; + var i = 0; + var l = new u16(mb); + for (; i < s; ++i) + ++l[cd[i] - 1]; + var le = new u16(mb); + for (i = 0; i < mb; ++i) { + le[i] = le[i - 1] + l[i - 1] << 1; + } + var co; + if (r) { + co = new u16(1 << mb); + var rvb = 15 - mb; + for (i = 0; i < s; ++i) { + if (cd[i]) { + var sv = i << 4 | cd[i]; + var r_1 = mb - cd[i]; + var v = le[cd[i] - 1]++ << r_1; + for (var m = v | (1 << r_1) - 1; v <= m; ++v) { + co[rev[v] >>> rvb] = sv; + } + } + } + } else { + co = new u16(s); + for (i = 0; i < s; ++i) { + if (cd[i]) { + co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i]; + } + } + } + return co; +}; +var flt = new u8(288); +for (var i = 0; i < 144; ++i) + flt[i] = 8; +for (var i = 144; i < 256; ++i) + flt[i] = 9; +for (var i = 256; i < 280; ++i) + flt[i] = 7; +for (var i = 280; i < 288; ++i) + flt[i] = 8; +var fdt = new u8(32); +for (var i = 0; i < 32; ++i) + fdt[i] = 5; +var flm = hMap(flt, 9, 0); +var flrm = hMap(flt, 9, 1); +var fdm = hMap(fdt, 5, 0); +var fdrm = hMap(fdt, 5, 1); +var max = function (a) { + var m = a[0]; + for (var i = 1; i < a.length; ++i) { + if (a[i] > m) + m = a[i]; + } + return m; +}; +var bits = function (d, p, m) { + var o = p >> 3 | 0; + return (d[o] | d[o + 1] << 8) >> (p & 7) & m; +}; +var bits16 = function (d, p) { + var o = p >> 3 | 0; + return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7); +}; +var shft = function (p) { + return (p >> 3 | 0) + (p & 7 && 1); +}; +var slc = function (v, s, e) { + if (s == null || s < 0) + s = 0; + if (e == null || e > v.length) + e = v.length; + var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s); + n.set(v.subarray(s, e)); + return n; +}; +var inflt = function (dat, buf, st) { + var sl = dat.length; + if (!sl || st && !st.l && sl < 5) + return buf || new u8(0); + var noBuf = !buf || st; + var noSt = !st || st.i; + if (!st) + st = {}; + if (!buf) + buf = new u8(sl * 3); + var cbuf = function (l2) { + var bl = buf.length; + if (l2 > bl) { + var nbuf = new u8(Math.max(bl * 2, l2)); + nbuf.set(buf); + buf = nbuf; + } + }; + var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n; + var tbts = sl * 8; + do { + if (!lm) { + st.f = final = bits(dat, pos, 1); + var type = bits(dat, pos + 1, 3); + pos += 3; + if (!type) { + var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l; + if (t > sl) { + if (noSt) + throw "unexpected EOF"; + break; + } + if (noBuf) + cbuf(bt + l); + buf.set(dat.subarray(s, t), bt); + st.b = bt += l, st.p = pos = t * 8; + continue; + } else if (type === 1) + lm = flrm, dm = fdrm, lbt = 9, dbt = 5; + else if (type === 2) { + var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4; + var tl = hLit + bits(dat, pos + 5, 31) + 1; + pos += 14; + var ldt = new u8(tl); + var clt = new u8(19); + for (var i = 0; i < hcLen; ++i) { + clt[clim[i]] = bits(dat, pos + i * 3, 7); + } + pos += hcLen * 3; + var clb = max(clt), clbmsk = (1 << clb) - 1; + var clm = hMap(clt, clb, 1); + for (var i = 0; i < tl;) { + var r = clm[bits(dat, pos, clbmsk)]; + pos += r & 15; + var s = r >>> 4; + if (s < 16) { + ldt[i++] = s; + } else { + var c = 0, n = 0; + if (s === 16) + n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1]; + else if (s === 17) + n = 3 + bits(dat, pos, 7), pos += 3; + else if (s === 18) + n = 11 + bits(dat, pos, 127), pos += 7; + while (n--) + ldt[i++] = c; + } + } + var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit); + lbt = max(lt); + dbt = max(dt); + lm = hMap(lt, lbt, 1); + dm = hMap(dt, dbt, 1); + } else + throw "invalid block type"; + if (pos > tbts) { + if (noSt) + throw "unexpected EOF"; + break; + } + } + if (noBuf) + cbuf(bt + 131072); + var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1; + var lpos = pos; + for (; ; lpos = pos) { + var c = lm[bits16(dat, pos) & lms], sym = c >>> 4; + pos += c & 15; + if (pos > tbts) { + if (noSt) + throw "unexpected EOF"; + break; + } + if (!c) + throw "invalid length/literal"; + if (sym < 256) + buf[bt++] = sym; + else if (sym === 256) { + lpos = pos, lm = null; + break; + } else { + var add = sym - 254; + if (sym > 264) { + var i = sym - 257, b = fleb[i]; + add = bits(dat, pos, (1 << b) - 1) + fl[i]; + pos += b; + } + var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4; + if (!d) + throw "invalid distance"; + pos += d & 15; + var dt = fd[dsym]; + if (dsym > 3) { + var b = fdeb[dsym]; + dt += bits16(dat, pos) & (1 << b) - 1, pos += b; + } + if (pos > tbts) { + if (noSt) + throw "unexpected EOF"; + break; + } + if (noBuf) + cbuf(bt + 131072); + var end = bt + add; + for (; bt < end; bt += 4) { + buf[bt] = buf[bt - dt]; + buf[bt + 1] = buf[bt + 1 - dt]; + buf[bt + 2] = buf[bt + 2 - dt]; + buf[bt + 3] = buf[bt + 3 - dt]; + } + bt = end; + } + } + st.l = lm, st.p = lpos, st.b = bt; + if (lm) + final = 1, st.m = lbt, st.d = dm, st.n = dbt; + } while (!final); + return bt === buf.length ? buf : slc(buf, 0, bt); +}; +var wbits = function (d, p, v) { + v <<= p & 7; + var o = p >> 3 | 0; + d[o] |= v; + d[o + 1] |= v >>> 8; +}; +var wbits16 = function (d, p, v) { + v <<= p & 7; + var o = p >> 3 | 0; + d[o] |= v; + d[o + 1] |= v >>> 8; + d[o + 2] |= v >>> 16; +}; +var hTree = function (d, mb) { + var t = []; + for (var i = 0; i < d.length; ++i) { + if (d[i]) + t.push({ s: i, f: d[i] }); + } + var s = t.length; + var t2 = t.slice(); + if (!s) + return [et, 0]; + if (s === 1) { + var v = new u8(t[0].s + 1); + v[t[0].s] = 1; + return [v, 1]; + } + t.sort(function (a, b) { + return a.f - b.f; + }); + t.push({ s: -1, f: 25001 }); + var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2; + t[0] = { s: -1, f: l.f + r.f, l, r }; + while (i1 !== s - 1) { + l = t[t[i0].f < t[i2].f ? i0++ : i2++]; + r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++]; + t[i1++] = { s: -1, f: l.f + r.f, l, r }; + } + var maxSym = t2[0].s; + for (var i = 1; i < s; ++i) { + if (t2[i].s > maxSym) + maxSym = t2[i].s; + } + var tr = new u16(maxSym + 1); + var mbt = ln(t[i1 - 1], tr, 0); + if (mbt > mb) { + var i = 0, dt = 0; + var lft = mbt - mb, cst = 1 << lft; + t2.sort(function (a, b) { + return tr[b.s] - tr[a.s] || a.f - b.f; + }); + for (; i < s; ++i) { + var i2_1 = t2[i].s; + if (tr[i2_1] > mb) { + dt += cst - (1 << mbt - tr[i2_1]); + tr[i2_1] = mb; + } else + break; + } + dt >>>= lft; + while (dt > 0) { + var i2_2 = t2[i].s; + if (tr[i2_2] < mb) + dt -= 1 << mb - tr[i2_2]++ - 1; + else + ++i; + } + for (; i >= 0 && dt; --i) { + var i2_3 = t2[i].s; + if (tr[i2_3] === mb) { + --tr[i2_3]; + ++dt; + } + } + mbt = mb; + } + return [new u8(tr), mbt]; +}; +var ln = function (n, l, d) { + return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d; +}; +var lc = function (c) { + var s = c.length; + while (s && !c[--s]) + ; + var cl = new u16(++s); + var cli = 0, cln = c[0], cls = 1; + var w = function (v) { + cl[cli++] = v; + }; + for (var i = 1; i <= s; ++i) { + if (c[i] === cln && i !== s) + ++cls; + else { + if (!cln && cls > 2) { + for (; cls > 138; cls -= 138) + w(32754); + if (cls > 2) { + w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305); + cls = 0; + } + } else if (cls > 3) { + w(cln), --cls; + for (; cls > 6; cls -= 6) + w(8304); + if (cls > 2) + w(cls - 3 << 5 | 8208), cls = 0; + } + while (cls--) + w(cln); + cls = 1; + cln = c[i]; + } + } + return [cl.subarray(0, cli), s]; +}; +var clen = function (cf, cl) { + var l = 0; + for (var i = 0; i < cl.length; ++i) + l += cf[i] * cl[i]; + return l; +}; +var wfblk = function (out, pos, dat) { + var s = dat.length; + var o = shft(pos + 2); + out[o] = s & 255; + out[o + 1] = s >>> 8; + out[o + 2] = out[o] ^ 255; + out[o + 3] = out[o + 1] ^ 255; + for (var i = 0; i < s; ++i) + out[o + i + 4] = dat[i]; + return (o + 4 + s) * 8; +}; +var wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) { + wbits(out, p++, final); + ++lf[256]; + var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1]; + var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1]; + var _c = lc(dlt), lclt = _c[0], nlc = _c[1]; + var _d = lc(ddt), lcdt = _d[0], ndc = _d[1]; + var lcfreq = new u16(19); + for (var i = 0; i < lclt.length; ++i) + lcfreq[lclt[i] & 31]++; + for (var i = 0; i < lcdt.length; ++i) + lcfreq[lcdt[i] & 31]++; + var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1]; + var nlcc = 19; + for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc) + ; + var flen = bl + 5 << 3; + var ftlen = clen(lf, flt) + clen(df, fdt) + eb; + var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]); + if (flen <= ftlen && flen <= dtlen) + return wfblk(out, p, dat.subarray(bs, bs + bl)); + var lm, ll, dm, dl; + wbits(out, p, 1 + (dtlen < ftlen)), p += 2; + if (dtlen < ftlen) { + lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt; + var llm = hMap(lct, mlcb, 0); + wbits(out, p, nlc - 257); + wbits(out, p + 5, ndc - 1); + wbits(out, p + 10, nlcc - 4); + p += 14; + for (var i = 0; i < nlcc; ++i) + wbits(out, p + 3 * i, lct[clim[i]]); + p += 3 * nlcc; + var lcts = [lclt, lcdt]; + for (var it = 0; it < 2; ++it) { + var clct = lcts[it]; + for (var i = 0; i < clct.length; ++i) { + var len = clct[i] & 31; + wbits(out, p, llm[len]), p += lct[len]; + if (len > 15) + wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12; + } + } + } else { + lm = flm, ll = flt, dm = fdm, dl = fdt; + } + for (var i = 0; i < li; ++i) { + if (syms[i] > 255) { + var len = syms[i] >>> 18 & 31; + wbits16(out, p, lm[len + 257]), p += ll[len + 257]; + if (len > 7) + wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len]; + var dst = syms[i] & 31; + wbits16(out, p, dm[dst]), p += dl[dst]; + if (dst > 3) + wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst]; + } else { + wbits16(out, p, lm[syms[i]]), p += ll[syms[i]]; + } + } + wbits16(out, p, lm[256]); + return p + ll[256]; +}; +var deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]); +var et = new u8(0); +var dflt = function (dat, lvl, plvl, pre, post, lst) { + var s = dat.length; + var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post); + var w = o.subarray(pre, o.length - post); + var pos = 0; + if (!lvl || s < 8) { + for (var i = 0; i <= s; i += 65535) { + var e = i + 65535; + if (e < s) { + pos = wfblk(w, pos, dat.subarray(i, e)); + } else { + w[i] = lst; + pos = wfblk(w, pos, dat.subarray(i, s)); + } + } + } else { + var opt = deo[lvl - 1]; + var n = opt >>> 13, c = opt & 8191; + var msk_1 = (1 << plvl) - 1; + var prev = new u16(32768), head = new u16(msk_1 + 1); + var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1; + var hsh = function (i2) { + return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1; + }; + var syms = new u32(25e3); + var lf = new u16(288), df = new u16(32); + var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0; + for (; i < s; ++i) { + var hv = hsh(i); + var imod = i & 32767, pimod = head[hv]; + prev[imod] = pimod; + head[hv] = imod; + if (wi <= i) { + var rem = s - i; + if ((lc_1 > 7e3 || li > 24576) && rem > 423) { + pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos); + li = lc_1 = eb = 0, bs = i; + for (var j = 0; j < 286; ++j) + lf[j] = 0; + for (var j = 0; j < 30; ++j) + df[j] = 0; + } + var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767; + if (rem > 2 && hv === hsh(i - dif)) { + var maxn = Math.min(n, rem) - 1; + var maxd = Math.min(32767, i); + var ml = Math.min(258, rem); + while (dif <= maxd && --ch_1 && imod !== pimod) { + if (dat[i + l] === dat[i + l - dif]) { + var nl = 0; + for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl) + ; + if (nl > l) { + l = nl, d = dif; + if (nl > maxn) + break; + var mmd = Math.min(dif, nl - 2); + var md = 0; + for (var j = 0; j < mmd; ++j) { + var ti = i - dif + j + 32768 & 32767; + var pti = prev[ti]; + var cd = ti - pti + 32768 & 32767; + if (cd > md) + md = cd, pimod = ti; + } + } + } + imod = pimod, pimod = prev[imod]; + dif += imod - pimod + 32768 & 32767; + } + } + if (d) { + syms[li++] = 268435456 | revfl[l] << 18 | revfd[d]; + var lin = revfl[l] & 31, din = revfd[d] & 31; + eb += fleb[lin] + fdeb[din]; + ++lf[257 + lin]; + ++df[din]; + wi = i + l; + ++lc_1; + } else { + syms[li++] = dat[i]; + ++lf[dat[i]]; + } + } + } + pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos); + if (!lst && pos & 7) + pos = wfblk(w, pos + 1, et); + } + return slc(o, 0, pre + shft(pos) + post); +}; +var adler = function () { + var a = 1, b = 0; + return { + p: function (d) { + var n = a, m = b; + var l = d.length | 0; + for (var i = 0; i !== l;) { + var e = Math.min(i + 2655, l); + for (; i < e; ++i) + m += n += d[i]; + n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16); + } + a = n, b = m; + }, + d: function () { + a %= 65521, b %= 65521; + return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8; + } + }; +}; +var dopt = function (dat, opt, pre, post, st) { + return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st); +}; +var wbytes = function (d, b, v) { + for (; v; ++b) + d[b] = v, v >>>= 8; +}; +var zlh = function (c, o) { + var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2; + c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1); +}; +var zlv = function (d) { + if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31) + throw "invalid zlib data"; + if (d[1] & 32) + throw "invalid zlib data: preset dictionaries not supported"; +}; +function zlibSync(data, opts) { + if (!opts) + opts = {}; + var a = adler(); + a.p(data); + var d = dopt(data, opts, 2, 4); + return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d; +} +function unzlibSync(data, out) { + return inflt((zlv(data), data.subarray(2, -4)), out); +} + +// bundle.js +function compress(buf, level) { + return zlibSync(buf, { level }); +} + +function decompress(buf, limit) { + return unzlibSync(buf, new Uint8Array(limit)); +} + +module.exports = { + compress, + decompress +}; From 56e15be1831cef83610fa9e2f8d7ee31f3c83712 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 29 Apr 2021 11:05:35 +0000 Subject: [PATCH 067/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index dd1e03a..df2f74a 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,i)=>{const r=i(347),s=i(723),n=i(876),o=i(327),a=i(76),h=i(667),{version:l}=i(306);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let i=1;i<=this.width;i++)yield[i,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,i,r){return((255&t)<<24|(255&e)<<16|(255&i)<<8|255&r)>>>0}static rgbToColor(t,e,i){return c.rgbaToColor(t,e,i,255)}static hslaToColor(t,e,i,r){let s,n,o;if(t%=1,e=Math.min(1,Math.max(0,e)),i=Math.min(1,Math.max(0,i)),r=Math.min(1,Math.max(0,r)),0===e)s=n=o=i;else{const r=(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),a=i<.5?i*(1+e):i+e-i*e,h=2*i-a;s=r(h,a,t+1/3),n=r(h,a,t),o=r(h,a,t-1/3)}return c.rgbaToColor(255*s,255*n,255*o,255*r)}static hslToColor(t,e,i){return c.hslaToColor(t,e,i,1)}static rgbaToHSLA(t,e,i,r){t/=255,e/=255,i/=255;const s=Math.max(t,e,i),n=Math.min(t,e,i);let o,a,h=(s+n)/2;if(s===n)o=a=0;else{const r=s-n;switch(a=h>.5?r/(2-s-n):r/(s+n),s){case t:o=(e-i)/r+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const i=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(i,i+4)}setPixelAt(t,e,i){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,i),this}__set_pixel__(t,e,i){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),i,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let i=1;i<=this.height;i++)for(let r=1;r<=this.width;r++)this.__view__.setUint32(e,t(r,i),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__scale__(t,e);return this.__apply__(i)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,i=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__resize__(t,e,i);return this.__apply__(r)}__resize__(t,e,i=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let r;if(i!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return r=this.__resize_nearest_neighbor__(t,e),r}__resize_nearest_neighbor__(t,e){const i=new this.constructor(t,e);for(let r=0;rthis.width&&(i=this.width),r>this.height&&(r=this.height),this.__apply__(this.__crop__(~~t,~~e,~~i,~~r))}__crop__(t,e,i,r){t=~~t,e=~~e;const s=new this.constructor(i,r);for(let n=0;nthis.width||o>this.height)continue;const a=s(r,n);this.__set_pixel__(i,o,a)}return this}__fast_box__(t,e,i,r,s){t<0&&(i+=t,t=1),e<0&&(r+=e,e=1);const n=Math.max(Math.min(t+i,this.width),1);let o=n;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),s);const a=4*(n+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+r,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,i,r){const s=i**2;for(let n=Math.max(1,e-i);n<=Math.min(e+i,this.height);n++)for(let o=Math.max(1,t-i);o<=Math.min(t+i,this.width);o++)(o-t)**2+(n-e)**2i?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/i*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,i){for(let r=i;r{const[s,n,o,a]=c.rgbaToHSLA(...this.getRGBAAt(i,r));return c.hslaToColor(s,n,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((i,r)=>{const[s,n,o,a]=c.rgbaToHSLA(...this.getRGBAAt(i,r));return c.hslaToColor(s,t*(e?1:n),o,a)}))}composite(t,e=0,i=0){e=~~e,i=~~i;for(let r=0;r=this.height)break;for(let i=0;i=this.width)break;const o=4*(n+s*this.width),a=t.__view__.getUint32(4*(i+r*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const i=255&t,r=i+1,s=256-i;return(255&r*(t>>>24)+s*(e>>>24)>>8)<<24|(255&r*(t>>16&255)+s*(e>>16&255)>>8)<<16|(255&r*(t>>8&255)+s*(e>>8&255)>>8)<<8|255&Math.max(i,255&e)}invert(){for(const[t,e,i]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-i&4294967040|255&i);return this}invertValue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(t,e,c.hslaToColor(r,s,1-n,o))}return this}invertSaturation(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(t,e,c.hslaToColor(r,1-s,n,o))}return this}invertHue(){for(const[t,e,i]of this.iterateWithColors()){const[r,s,n,o]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(t,e,c.hslaToColor(1-r,s,n,o))}return this}hueShift(t){for(const[e,i,r]of this.iterateWithColors()){const[s,n,o,a]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(e,i,c.hslaToColor(s+t/360,n,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let i=0;it/e)),255)}dominantColor(t=!0,e=!0,i=15){const r=new Array(262143);for(let s=0;s~~(63*t)));if(t&&h63-i)continue;const l=o<<12|a<<6|h;r[l]=(r[l]||0)+1}let s=-1,n=0;if(r.forEach(((t,e)=>{t>>12&63,a=n>>>6&63,h=63&n;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const i=Math.PI*(t/180),r=Math.sin(i),s=Math.cos(i),n=e?Math.abs(this.width*r)+Math.abs(this.height*s):this.width,o=e?Math.abs(this.width*s)+Math.abs(this.height*r):this.height,a=new c(n,o),h=n/2-.5,l=o/2-.5,_=this.width/2-.5,f=this.height/2-.5;let u=0;do{let t=0;const e=_-r*(u-l),i=f+s*(u-l);do{const n=e+s*(t-h),o=i+r*(t-h);c.__interpolate__(this,a,t,u,n,o)}while(t++0&&e>0&&tt[0]-e[0])),i=e.map((t=>parseFloat(t[0]))),r=e.map((t=>t[1]));if(0===i.length)throw new RangeError("Invalid gradient point count");if(1===i.length)return()=>r[0];if(2===i.length){const t=this.__gradient__(r[0],r[1]);return e=>e<=i[0]?r[0]:e>=i[1]?r[1]:t((e-i[0])/(i[1]-i[0]))}const s=Math.min(...i),n=Math.max(...i);let o=[];for(let t=0;t{if(t<=s)return o[0].gradient(0);if(t>=n)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=1;i<=t;i++){const r=(i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=1;s<=t;s++)r+(s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}for(let i=this.width-t;i<=this.width;i++){const r=(this.width-i-t)**2;for(let s=this.height-t;s<=this.height;s++)r+(this.height-s-t)**2>e&&(this.bitmap[4*((s-1)*this.width+i-1)+3]=0)}return this}static __gradient__(t,e){const i=t>>>24,r=t>>16&255,s=t>>8&255,n=255&t,o=(e>>>24)-i,a=(e>>16&255)-r,h=(e>>8&255)-s,l=(255&e)-n;return t=>(255&i+t*o)<<24|(255&r+t*a)<<16|(255&s+t*h)<<8|255&n+t*l}fisheye(t=2){const e=new c(this.width,this.height),i=this.width,r=this.height,s=this.__u32__,n=e.__u32__,o=1/i,a=1/r;for(const[e,h]of this){const l=e*o-.5,c=h*a-.5,_=Math.sqrt(l**2+c**2),f=2*_**t,u=(f*l/_+.5)*i|0,w=(f*c/_+.5)*r|0;u<1||u>i||w<1||w>r||isNaN(u)||isNaN(w)||(n[h*i+e]=s[i*w+u])}const h=.5*s.length+i/2;return n[h]=s[h],this.__apply__(e)}async encode(t=1,{title:e,author:i,description:s,copyright:n,creationTime:o,software:a,disclaimer:h,warning:c,source:_,comment:f}={}){return await r.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:i,Description:s,Copyright:n,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===a?`github.com/matmen/ImageScript v${l}`:a,Disclaimer:h,Warning:c,Source:_,Comment:f}})}async encodeJPEG(t=90){return await o.init(),o.encode(this.bitmap,this.width,this.height,Math.max(1,Math.min(100,t)))}static async decode(t){let e,i;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),i=new DataView(t.buffer)),w.isPNG(i)){const{width:i,height:s,pixels:n}=await r.decode(t);e=new c(i,s),e.bitmap.set(n)}else if(w.isJPEG(i)){await o.init();const i=o.decode(t),r=i.width,s=i.height,n=i.format;e=new c(r,s);const a=i.buffer;if(0===n){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(i!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t)),await n.init();const r=n.rasterize(t,i,e),s=new c(r.width,r.height);return s.bitmap.set(r.buffer),s}static async renderText(t,e,i,r=4294967295,n=new u){await s.init(),t=new s.Font(e,t);const[o,a,h,l]=c.colorToRGBA(r),_=new s.Layout;_.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),_.append(t,i,{scale:e});const f=_.rasterize(o,a,h),w=new c(f.width,f.height);return w.bitmap.set(f.buffer),w.height>n.maxHeight&&w.crop(0,0,w.width,Math.floor(_.lines()/w.height*n.maxHeight)*(w.height/_.lines())),t.free(),_.free(),w.opacity(l/255)}}class _ extends c{static get DISPOSAL_KEEP(){return 1}static get DISPOSAL_PREVIOUS(){return 2}static get DISPOSAL_BACKGROUND(){return 3}constructor(t,e,i=100,r=0,s=0,n=_.DISPOSAL_KEEP){if(isNaN(i)||i<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=i,this.xOffset=r,this.yOffset=s,this.disposalMode=n}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,i,r,s=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");const n=new _(t.width,t.height,e,i,r,s);return n.bitmap.set(t.bitmap),n}resize(t,e,i=c.RESIZE_NEAREST_NEIGHBOR){const r=this.width,s=this.height,n=super.resize(t,e,i);return this.xOffset*=n.width/r,this.yOffset*=n.height/s,n}}class f extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let i=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=10){await h.init();const e=new h.Encoder(this.width,this.height,this.loopCount);for(const i of this){if(!(i instanceof _))throw new Error("GIF contains invalid frames");e.add(i.xOffset,i.yOffset,~~(i.duration/10),i.width,i.height,i.bitmap,i.disposalMode,t)}return e.u8()}static async decode(t,e=!1){let i,r;if(ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),r=new DataView(t.buffer)),await h.init(),!w.isGIF(r))throw new Error("Unsupported image type");{await h.init();const r=new h.Decoder(t);let s=[];for(const t of r.frames()){const i=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);if(i.bitmap.set(t.buffer),s.push(i),e)break}r.free(),i=new f(s)}return i}resize(t,e,i=c.RESIZE_NEAREST_NEIGHBOR){for(const r of this)r.resize(t,e,i)}}class u{constructor(t){const{maxWidth:e,maxHeight:i,wrapStyle:r,verticalAlign:s,horizontalAlign:n,wrapHardBreaks:o}=t||{};if(this.maxWidth=e||1/0,isNaN(this.maxWidth)||this.maxWidth<1)throw new RangeError("Invalid maxWidth");if(this.maxHeight=i||1/0,isNaN(this.maxHeight)||this.maxHeight<1)throw new RangeError("Invalid maxHeight");if(this.wrapStyle=r||"word",!["word","char"].includes(this.wrapStyle))throw new RangeError("Invalid wrapStyle");if(this.verticalAlign=s||"left",!["left","center","right"].includes(this.verticalAlign))throw new RangeError("Invalid verticalAlign");if(this.horizontalAlign=n||"top",!["top","middle","bottom"].includes(this.horizontalAlign))throw new RangeError("Invalid horizontalAlign");if(this.wrapHardBreaks=o||!0,"boolean"!=typeof this.wrapHardBreaks)throw new TypeError("Invalid wrapHardBreaks")}}class w{static getType(t){let e;return ArrayBuffer.isView(t)?(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),e=new DataView(t.buffer,t.byteOffset,t.byteLength)):(t=new Uint8Array(t),e=new DataView(t.buffer)),this.isPNG(e)?"png":this.isJPEG(e)?"jpeg":this.isTIFF(e)?"tiff":this.isGIF(e)?"gif":null}static isPNG(t){return 2303741511===t.getUint32(0,!1)}static isJPEG(t){return t.getUint32(0,!1)>>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:f,Frame:_,TextLayout:u,ImageType:w,decode:function(t,e){return"gif"===w.getType(t)?f.decode(t,e):c.decode(t)}}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.3","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{t.exports=class{static concat(...t){const e=new Uint8Array(t.reduce(((t,e)=>t+e.length),0));let i=0;for(const r of t)e.set(r,i),i+=r.length;return e}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let i=0,r=4294967295;for(;i>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8,r=e[255&(r^t[i++])]^r>>>8;for(;i>>8;return(4294967295^r)>>>0}},347:(t,e,i)=>{const r=i(883),s=i(354),{init:n,compress:o,decompress:a}=i(423),h=new Uint8Array([73,72,68,82]),l=new Uint8Array([73,68,65,84]),c=new Uint8Array([73,69,78,68]),_=r(new Uint8Array([73,69,78,68])),f=new Uint8Array([137,80,78,71,13,10,26,10]),u={1:0,2:4,3:2,4:6};t.exports={async encode(t,{width:e,height:i,channels:s,depth:a=8,level:w=0}){let g=0,d=0;const p=e*s,m=new Uint8Array(i+t.length);for(;g>1)}else{for(;n>1);for(;n>1)}},filter_4(t,e,i,r,s){let n=0;if(0===i){for(;n{const{version:r}=i(306);let s,n=null;class o{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=o.u8(t,e).slice();return s.wfree(t,e),i}}const a="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),h="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();"FinalizationRegistry"in globalThis&&(n=new FinalizationRegistry((([t,e])=>{0===t&&s.font_free(e),1===t&&s.layout_free(e)}))),t.exports={Font:class{constructor(t,e){this.scale=t;const i=o.alloc(e.length);if(o.u8(i,e.length).set(e),this.ptr=s.font_new(i,e.length,t),!this.ptr)throw new Error("invalid font");n&&n.register(this,[0,this.ptr],this)}free(){this.ptr=s.font_free(this.ptr),n&&n.unregister(this)}has(t){return s.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,e=this.scale){const i=s.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),e),r=JSON.parse(h(o.u8(s.font_metrics_buffer(i),o.length())));return s.font_metrics_free(i),r}rasterize(t,e=this.scale){const i=s.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),e),r={buffer:o.u8(s.font_rasterize_buffer(i),o.length()).slice(),metrics:JSON.parse(h(o.u8(s.font_rasterize_metrics(i),o.length())))};return s.font_rasterize_free(i),r}},Layout:class{constructor(){this.ptr=s.layout_new(),n&&(this.refs=[]),n&&n.register(this,[1,this.ptr],this)}clear(){s.layout_clear(this.ptr),n&&(this.refs.length=0)}lines(){return s.layout_lines(this.ptr)}free(){n&&(this.refs.length=0),this.ptr=s.layout_free(this.ptr),n&&n.unregister(this)}reset(t={}){t=a(JSON.stringify(t)),n&&(this.refs.length=0);const e=o.alloc(t.length);o.u8(e,t.length).set(t),s.layout_reset(this.ptr,e,t.length)}append(t,e,i){e=a(e);const r=i||{};n&&this.refs.push(t);const h=o.alloc(e.length);o.u8(h,e.length).set(e);const l="r"in r||"g"in r||"b"in r;s.layout_append(this.ptr,t.ptr,h,e.length,null==r.scale?t.scale:r.scale,l,r.r,r.g,r.b)}rasterize(t,e,i){const r=s.layout_rasterize(this.ptr,t,e,i),n={width:s.layout_rasterize_width(r),height:s.layout_rasterize_height(r),buffer:o.u8(s.layout_rasterize_buffer(r),o.length()).slice()};return s.layout_rasterize_free(r),n}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},667:(t,e,i)=>{const{version:r}=i(306);let s;const n=new Map,o=new TextEncoder;class a{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=a.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={Encoder:class{constructor(t,e,i=-1){this.slices=[],n.set(0,this),this.ptr=s.encoder_new(0,t,e,i)}cb(t){this.slices.push(t)}free(){this.ptr=s.encoder_free(this.ptr),n.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const i of this.slices)e.set(i,t),t+=i.length;return e}add(t,e,i,r,n,o,h,l){const c=a.alloc(o.length);a.u8(c,o.length).set(o),s.encoder_add(this.ptr,c,o.length,t,e,r,n,i,h,l)}set comment(t){const e=o.encode(t),i=a.alloc(e.length);a.u8(i,e.length).set(e),s.encoder_add_comment(this.ptr,i,e.length)}set application(t){const e=o.encode(t),i=a.alloc(e.length);a.u8(i,e.length).set(e),s.encoder_add_application(this.ptr,i,e.length)}},Decoder:class{constructor(t,e=0){const i=a.alloc(t.length);if(a.u8(i,t.length).set(t),this.ptr=s.decoder_new(i,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=s.decoder_width(this.ptr),this.height=s.decoder_height(this.ptr)}free(){this.ptr=s.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=s.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:s.decoder_frame_x(t),y:s.decoder_frame_y(t),delay:s.decoder_frame_delay(t),width:s.decoder_frame_width(t),height:s.decoder_frame_height(t),dispose:s.decoder_frame_dispose(t),buffer:a.u8(s.decoder_frame_buffer(t),a.length()).slice()};return s.decoder_frame_free(t),e}},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e,{env:{push_to_stream(t,e){n.get(t).cb(a.u8(e,a.length()).slice())}}});s=i.exports}}},327:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={encode:function(t,e,i,r){const o=n.alloc(t.length);return n.u8(o,t.length).set(t),n.copy_and_free(s.encode(o,e,i,r),n.length())},decode:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.decode(r,t.length,e,i);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:s.decode_width(o),height:s.decode_height(o),format:s.decode_format(o),buffer:n.u8(s.decode_buffer(o),n.length()).slice()};return s.decode_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},876:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={rasterize:function(t,e,i){const r=n.alloc(t.length);n.u8(r,t.length).set(t);const o=s.rasterize(r,t.length,e,i);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:s.rasterize_width(o),height:s.rasterize_height(o),buffer:n.u8(s.rasterize_buffer(o),n.length()).slice()};return s.rasterize_free(o),a},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},76:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={decode:function(t){const e=n.alloc(t.length);n.u8(e,t.length).set(t);const i=s.decode(e,t.length);if(0===i)throw new Error("tiff: failed to decode");const r={width:s.decode_width(i),height:s.decode_height(i),buffer:n.u8(s.decode_buffer(i),n.length()).slice()};return s.decode_free(i),r},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}},423:(t,e,i)=>{const{version:r}=i(306);let s;class n{static length(){return s.wlen()}static alloc(t){return s.walloc(t)}static free(t,e){return s.wfree(t,e)}static u8(t,e){return new Uint8Array(s.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(s.memory.buffer,t,e)}static copy_and_free(t,e){let i=n.u8(t,e).slice();return s.wfree(t,e),i}}t.exports={compress:function(t,e=3){const i=n.alloc(t.length);return n.u8(i,t.length).set(t),n.copy_and_free(s.compress(i,t.length,e),n.length())},decompress:function(t,e=0){const i=n.alloc(t.length);n.u8(i,t.length).set(t);const r=s.decompress(i,t.length,e);if(0===r)throw new Error("zlib: failed to decompress");return n.copy_and_free(r,n.length())},async init(){if(s)return;const t="compileStreaming"in WebAssembly,e=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${r}/utils/wasm/zlib.wasm`).then((e=>t?e:e.arrayBuffer()))),i=await WebAssembly.instantiate(e);s=i.exports}}}},e={},function i(r){var s=e[r];if(void 0!==s)return s.exports;var n=e[r]={exports:{}};return t[r](n,n.exports,i),n.exports}(655);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),n=r(354),s=r(667),o=r(876),{version:a}=r(306),h=r(723),l=r(327),f=r(76);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=1),e<0&&(i+=e,e=1);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,Math.abs(.3*t-29))}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.3","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(354),n=r(883),{compress:s,decompress:o}=r(637),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},667:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},327:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},876:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},76:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},637:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},T=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},R=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(H,W)+(2*H[16]+3*H[17]+7*H[18]);if(J<=K&&J<=q)return C(e,w,t.subarray(_,_+u));if(R(e,w,1+(q15&&(R(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(R(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},D=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),H=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=C(g,d,t.subarray(p,m)):(g[p]=c,d=C(g,d,t.subarray(p,_)))}else{for(var b=D[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=B(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===R(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=B(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=C(g,d+1,H))}return T(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var R=S(t,w+1,3);if(w+=3,!R){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===R)d=v,m=A,b=9,y=5;else{if(2!==R)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var C=new e(z),B=new e(19),D=0;D>>4)<16)C[D++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=C[D-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)C[D++]=$}}var P=C.subarray(0,N),Z=C.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[D=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index bf72292..d074962 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/wasm/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","fontlib","svglib","jpeglib","tifflib","giflib","version","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","isView","Uint8Array","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","layout","TextLayout","Font","layoutOptions","Layout","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","crop","lines","free","DISPOSAL_KEEP","super","frame","originalWidth","originalHeight","result","GIF","frames","loopCount","indexOf","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","frameData","delay","dispose","options","Infinity","getType","arrays","array","table","crc","crc32","Buffer","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","depth","tmp_offset","row_length","tmp","compressed","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","chunks","palette","alphaPalette","type","pxlOffset","concat","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","wasm","registry","mem","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streaming","WebAssembly","fetch","then","arrayBuffer","instance","instantiate","streams","Map","utf8encoder","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","env","id","get","cb","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst fontlib = require('./utils/wasm/font');\nconst svglib = require('./utils/wasm/svg');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\nconst giflib = require('./utils/wasm/gif');\nconst {version} = require('./package.json');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x,y] array for every pixel in the image\n * @yields {[number, number]} The coordinates of the pixel\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x,y,color] array for every pixel in the image\n * @yields {[number, number, number]} The coordinates and color of the pixel\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {(number)[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-3)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return await png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n await jpeglib.init();\n return jpeglib.encode(this.bitmap, this.width, this.height, Math.max(1, Math.min(100, quality)));\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = await png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n await jpeglib.init();\n const framebuffer = jpeglib.decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n await tifflib.init();\n const framebuffer = tifflib.decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1');\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n\n await svglib.init();\n const framebuffer = svglib.rasterize(svg, mode, size);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} color Text color to use\n * @param {TextLayout} layout The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n await fontlib.init();\n font = new fontlib.Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new fontlib.Layout();\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\nclass Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {number}\n */\n static get DISPOSAL_KEEP() {\n return 1;\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {number}\n */\n static get DISPOSAL_PREVIOUS() {\n return 2;\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {number}\n */\n static get DISPOSAL_BACKGROUND() {\n return 3;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=10] GIF quality ((best) 1..30 (worst))\n * @return {Promise} The encoded data\n */\n async encode(quality = 10) {\n await giflib.init();\n const encoder = new giflib.Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n await giflib.init();\n\n if (ImageType.isGIF(view)) { // GIF\n await giflib.init();\n const decoder = new giflib.Decoder(data);\n let frames = [];\n for (const frameData of decoder.frames()) {\n const frame = new Frame(frameData.width, frameData.height, frameData.delay * 10, frameData.x, frameData.y, frameData.dispose);\n frame.bitmap.set(frameData.buffer);\n frames.push(frame);\n\n if (onlyExtractFirstFrame)\n break;\n }\n\n decoder.free();\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","module.exports = class Buffer {\n static concat(...arrays) {\n const array = new Uint8Array(\n arrays.reduce((length, array) => length + array.length, 0)\n );\n\n let offset = 0;\n for (const x of arrays) {\n array.set(x, offset);\n offset += x.length;\n }\n\n return array;\n }\n};","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,\n 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,\n 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,\n 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,\n 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,\n 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,\n 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,\n 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,\n 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,\n 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,\n 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,\n 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n\nmodule.exports = function crc32(buffer) {\n let offset = 0;\n let crc = 0xFFFFFFFF;\n\n while (offset < buffer.length - 4) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n\n return (crc ^ 0xFFFFFFFF) >>> 0;\n};","/* global SharedArrayBuffer */\nconst crc32 = require('./crc32.js');\nconst Buffer = require('./buffer');\nconst {init, compress, decompress} = require('./wasm/zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nmodule.exports = {\n async encode(data, {width, height, channels, depth = 8, level = 0}) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n await init();\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array.set(__IEND__, 49 + compressed.length);\n array[25] = channels_to_color_type[channels];\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + compressed.length, 0);\n view.setUint32(53 + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n async decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({3: 1, 0: 1, 4: 2, 2: 3, 6: 4})[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n let type;\n while (type !== 1229278788) {\n type = view.getUint32(4 + c_offset);\n\n // IDAT\n if (type === 1229209940)\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n }\n\n await init();\n array = decompress(chunks.length === 1 ? chunks[0] : Buffer.concat(...chunks));\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return {width, height, pixels};\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const {version} = require('../../package.json');\n\nlet wasm;\nlet registry = null;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nconst encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n})();\n\nconst decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n})();\n\nif ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n}\n\nclass Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n}\n\nclass Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Font,\n Layout,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n \n wasm = instance.exports;\n },\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\nconst streams = new Map;\nconst utf8encoder = new TextEncoder;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nclass Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n}\n\nclass Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n}\n\nmodule.exports = {\n Encoder,\n Decoder,\n\n async init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n }\n }\n });\n \n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n}\n\nfunction decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n encode,\n decode,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n \n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n \n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.rasterize_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n rasterize,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction decode(buffer) {\n\tconst bptr = mem.alloc(buffer.length);\n\tmem.u8(bptr, buffer.length).set(buffer);\n\tconst ptr = wasm.decode(bptr, buffer.length);\n\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\tconst framebuffer = {\n\t\twidth: wasm.decode_width(ptr),\n\t\theight: wasm.decode_height(ptr),\n\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t}\n\n\treturn (wasm.decode_free(ptr), framebuffer);\n}\n\nmodule.exports = {\n\tdecode,\n\n\tasync init() {\n\t\tif (wasm) return;\n\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\tconst module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\tconst instance = await WebAssembly.instantiate(module);\n\n\t\twasm = instance.exports;\n\t}\n}\n","const {version} = require('../../package.json');\n\nlet wasm;\n\nclass mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n}\n\nfunction compress(buffer, level = 3) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.compress(ptr, buffer.length, level), mem.length());\n}\n\nfunction decompress(buffer, limit = 0) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n const x = wasm.decompress(ptr, buffer.length, limit);\n if (0 === x) throw new Error('zlib: failed to decompress');\n\n return mem.copy_and_free(x, mem.length());\n}\n\nmodule.exports = {\n compress,\n decompress,\n\n async init() {\n if (wasm) return;\n const streaming = 'compileStreaming' in WebAssembly;\n const module = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/zlib.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n const instance = await WebAssembly.instantiate(module);\n\n wasm = instance.exports;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","crop","lines","free","indexOf","DISPOSAL_KEEP","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","result","GIF","frames","loopCount","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","Infinity","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","zlibSync","opts","adler","lv","fl2","opt","pre","post","st","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","buf","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, Math.abs(30/100 * quality - 29));\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8)\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n };\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n \n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n\t\tif (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n \n cb(buffer) {\n this.slices.push(buffer);\n }\n \n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n \n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n \n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n \n return u8;\n }\n \n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n \n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n \n set application(application) {\n const buffer = utf8encoder.encode(application);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n \n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n \n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n \n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file From e3320d930825455bd1b377d497c055d473c08ff2 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Thu, 29 Apr 2021 14:55:46 +0200 Subject: [PATCH 068/120] 1.2.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7c857e0..fe0b6f4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "imagescript", - "version": "1.2.3", + "version": "1.2.5", "description": "zero-dependency javascript image manipulation", "main": "ImageScript.js", "type": "commonjs", From b0ef20ce8a783a573f8c2513c7b78f22327e1704 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 29 Apr 2021 12:56:13 +0000 Subject: [PATCH 069/120] Update bundle --- browser/ImageScript.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index df2f74a..d831bda 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),n=r(354),s=r(667),o=r(876),{version:a}=r(306),h=r(723),l=r(327),f=r(76);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=1),e<0&&(i+=e,e=1);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,Math.abs(.3*t-29))}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.3","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(354),n=r(883),{compress:s,decompress:o}=r(637),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},667:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},327:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},876:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},76:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},637:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},T=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},R=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(H,W)+(2*H[16]+3*H[17]+7*H[18]);if(J<=K&&J<=q)return C(e,w,t.subarray(_,_+u));if(R(e,w,1+(q15&&(R(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(R(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},D=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),H=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=C(g,d,t.subarray(p,m)):(g[p]=c,d=C(g,d,t.subarray(p,_)))}else{for(var b=D[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=B(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===R(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=B(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=C(g,d+1,H))}return T(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var R=S(t,w+1,3);if(w+=3,!R){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===R)d=v,m=A,b=9,y=5;else{if(2!==R)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var C=new e(z),B=new e(19),D=0;D>>4)<16)C[D++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=C[D-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)C[D++]=$}}var P=C.subarray(0,N),Z=C.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[D=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),n=r(354),s=r(667),o=r(876),{version:a}=r(306),h=r(723),l=r(327),f=r(76);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=1),e<0&&(i+=e,e=1);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,Math.abs(.3*t-29))}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.5","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(354),n=r(883),{compress:s,decompress:o}=r(637),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},667:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},327:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},876:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},76:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},637:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},T=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},R=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(H,W)+(2*H[16]+3*H[17]+7*H[18]);if(J<=K&&J<=q)return C(e,w,t.subarray(_,_+u));if(R(e,w,1+(q15&&(R(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(R(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},D=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),H=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=C(g,d,t.subarray(p,m)):(g[p]=c,d=C(g,d,t.subarray(p,_)))}else{for(var b=D[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=B(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===R(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=B(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=C(g,d+1,H))}return T(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var R=S(t,w+1,3);if(w+=3,!R){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===R)d=v,m=A,b=9,y=5;else{if(2!==R)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var C=new e(z),B=new e(19),D=0;D>>4)<16)C[D++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=C[D-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)C[D++]=$}}var P=C.subarray(0,N),Z=C.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[D=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file From 5d8c8a9e83ebf7ba091d03103e68bc0086eaad1a Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Thu, 29 Apr 2021 19:45:30 +0200 Subject: [PATCH 070/120] remove unused tests --- tests/fisheye.js | 15 --------------- tests/targets/fisheye.png | Bin 773012 -> 0 bytes 2 files changed, 15 deletions(-) delete mode 100644 tests/fisheye.js delete mode 100644 tests/targets/fisheye.png diff --git a/tests/fisheye.js b/tests/fisheye.js deleted file mode 100644 index 888d62c..0000000 --- a/tests/fisheye.js +++ /dev/null @@ -1,15 +0,0 @@ -const fs = require('fs').promises; -const {Image} = require('../ImageScript'); - -(async () => { - const input = await fs.readFile('./tests/targets/external.png'); - - const image = await Image.decode(input); - image.fisheye(); - - const output = await image.encode(); - const target = await fs.readFile('./tests/targets/fisheye.png'); - - if (!Buffer.from(target).equals(Buffer.from(output))) - process.exit(1); -})(); diff --git a/tests/targets/fisheye.png b/tests/targets/fisheye.png deleted file mode 100644 index 7d4c418da180d45434b671b3d6bfcdff3a088c70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 773012 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

    AO+avBjxX!}^SvZ{d+wB2N@}Dtd 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≫kNEmt^r}cN-fk8 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

    *q_|6?jNO#N#2(!9H!G{-=S-g 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ⅇ$b!Z(qnk-x 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

    e&N_L@vY*<{~N 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

    !J_yCLcd( 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 Date: Thu, 29 Apr 2021 19:51:13 +0200 Subject: [PATCH 071/120] fix gif encoding --- ImageScript.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index 77df92c..fc93117 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1510,7 +1510,7 @@ class GIF extends Array { for (const frame of this) { if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames'); - encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, Math.abs(30/100 * quality - 29)); + encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1); } return encoder.u8(); @@ -1615,7 +1615,7 @@ class GIF extends Array { u32[x_offset] = t32[x_offset]; } } - }; + } } image = new GIF(frames); From 35cf299e14530360d8e03658794c3758f3634933 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 29 Apr 2021 17:51:52 +0000 Subject: [PATCH 072/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index d831bda..b9c6455 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),n=r(354),s=r(667),o=r(876),{version:a}=r(306),h=r(723),l=r(327),f=r(76);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=1),e<0&&(i+=e,e=1);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,Math.abs(.3*t-29))}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.5","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(354),n=r(883),{compress:s,decompress:o}=r(637),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},667:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},327:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},876:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},76:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},637:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},T=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},R=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(H,W)+(2*H[16]+3*H[17]+7*H[18]);if(J<=K&&J<=q)return C(e,w,t.subarray(_,_+u));if(R(e,w,1+(q15&&(R(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(R(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},D=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),H=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=C(g,d,t.subarray(p,m)):(g[p]=c,d=C(g,d,t.subarray(p,_)))}else{for(var b=D[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=B(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===R(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=B(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=C(g,d+1,H))}return T(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var R=S(t,w+1,3);if(w+=3,!R){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===R)d=v,m=A,b=9,y=5;else{if(2!==R)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var C=new e(z),B=new e(19),D=0;D>>4)<16)C[D++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=C[D-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)C[D++]=$}}var P=C.subarray(0,N),Z=C.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[D=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),n=r(354),s=r(667),o=r(876),{version:a}=r(306),h=r(723),l=r(327),f=r(76);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=1),e<0&&(i+=e,e=1);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.5","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(354),n=r(883),{compress:s,decompress:o}=r(637),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},667:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},327:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},876:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},76:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},637:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},T=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},R=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(H,W)+(2*H[16]+3*H[17]+7*H[18]);if(J<=K&&J<=q)return C(e,w,t.subarray(_,_+u));if(R(e,w,1+(q15&&(R(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(R(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},D=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),H=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=C(g,d,t.subarray(p,m)):(g[p]=c,d=C(g,d,t.subarray(p,_)))}else{for(var b=D[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=B(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===R(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=B(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=C(g,d+1,H))}return T(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var R=S(t,w+1,3);if(w+=3,!R){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===R)d=v,m=A,b=9,y=5;else{if(2!==R)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var C=new e(z),B=new e(19),D=0;D>>4)<16)C[D++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=C[D-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)C[D++]=$}}var P=C.subarray(0,N),Z=C.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[D=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index d074962..86c2d86 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","crop","lines","free","indexOf","DISPOSAL_KEEP","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","result","GIF","frames","loopCount","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","Infinity","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","zlibSync","opts","adler","lv","fl2","opt","pre","post","st","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","buf","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, Math.abs(30/100 * quality - 29));\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8)\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n };\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n \n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n\t\tif (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n \n cb(buffer) {\n this.slices.push(buffer);\n }\n \n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n \n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n \n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n \n return u8;\n }\n \n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n \n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n \n set application(application) {\n const buffer = utf8encoder.encode(application);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n \n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n \n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n \n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","crop","lines","free","indexOf","DISPOSAL_KEEP","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","result","GIF","frames","loopCount","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","Infinity","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","zlibSync","opts","adler","lv","fl2","opt","pre","post","st","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","buf","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8)\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n \n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n\t\tif (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n \n cb(buffer) {\n this.slices.push(buffer);\n }\n \n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n \n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n \n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n \n return u8;\n }\n \n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n \n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n \n set application(application) {\n const buffer = utf8encoder.encode(application);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n \n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n \n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n \n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file From 194d88c0df34f6c4e7c54dfd1befd47bb2bd5b09 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sun, 2 May 2021 00:44:07 +0200 Subject: [PATCH 073/120] drawBox: floor components (cherry picked from commit 53da62ce747629f5dec9b2fbebb078b2444f9c61) --- ImageScript.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index fc93117..398fd71 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -480,8 +480,10 @@ class Image { * @returns {Image} */ drawBox(x, y, width, height, color) { - x -= 1; - y -= 1; + x = ~~(x - 1); + y = ~~(y - 1); + width = ~~width; + height = ~~height; if (typeof color === 'function') { for (let tY = 1; tY <= height; tY++) { From a22701f13984ef26d04745855dffc22c56ecc1cb Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Fri, 7 May 2021 17:26:47 +0200 Subject: [PATCH 074/120] 1.2.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fe0b6f4..321a81d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "imagescript", - "version": "1.2.5", + "version": "1.2.6", "description": "zero-dependency javascript image manipulation", "main": "ImageScript.js", "type": "commonjs", From 677b3384efc796f6ab44304a6b953e4896a40407 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 7 May 2021 15:27:15 +0000 Subject: [PATCH 075/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index b9c6455..9bf4cec 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),n=r(354),s=r(667),o=r(876),{version:a}=r(306),h=r(723),l=r(327),f=r(76);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=1),e<0&&(i+=e,e=1);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.5","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(354),n=r(883),{compress:s,decompress:o}=r(637),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},667:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},327:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},876:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},76:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},637:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},T=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},R=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(H,W)+(2*H[16]+3*H[17]+7*H[18]);if(J<=K&&J<=q)return C(e,w,t.subarray(_,_+u));if(R(e,w,1+(q15&&(R(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(R(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},D=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),H=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=C(g,d,t.subarray(p,m)):(g[p]=c,d=C(g,d,t.subarray(p,_)))}else{for(var b=D[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=B(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===R(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=B(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=C(g,d+1,H))}return T(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var R=S(t,w+1,3);if(w+=3,!R){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===R)d=v,m=A,b=9,y=5;else{if(2!==R)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var C=new e(z),B=new e(19),D=0;D>>4)<16)C[D++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=C[D-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)C[D++]=$}}var P=C.subarray(0,N),Z=C.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[D=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),n=r(354),s=r(667),o=r(876),{version:a}=r(306),h=r(723),l=r(327),f=r(76);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=1),e<0&&(i+=e,e=1);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.6","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(354),n=r(883),{compress:s,decompress:o}=r(637),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},667:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},327:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},876:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},76:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},637:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},T=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},R=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(H,W)+(2*H[16]+3*H[17]+7*H[18]);if(J<=K&&J<=q)return C(e,w,t.subarray(_,_+u));if(R(e,w,1+(q15&&(R(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(R(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},D=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),H=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=C(g,d,t.subarray(p,m)):(g[p]=c,d=C(g,d,t.subarray(p,_)))}else{for(var b=D[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=B(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===R(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=B(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=C(g,d+1,H))}return T(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var R=S(t,w+1,3);if(w+=3,!R){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===R)d=v,m=A,b=9,y=5;else{if(2!==R)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var C=new e(z),B=new e(19),D=0;D>>4)<16)C[D++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=C[D-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)C[D++]=$}}var P=C.subarray(0,N),Z=C.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[D=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index 86c2d86..0e9352a 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","crop","lines","free","indexOf","DISPOSAL_KEEP","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","result","GIF","frames","loopCount","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","Infinity","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","zlibSync","opts","adler","lv","fl2","opt","pre","post","st","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","buf","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x -= 1;\n y -= 1;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8)\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n \n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n\t\tif (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n \n cb(buffer) {\n this.slices.push(buffer);\n }\n \n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n \n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n \n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n \n return u8;\n }\n \n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n \n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n \n set application(application) {\n const buffer = utf8encoder.encode(application);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n \n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n \n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n \n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","crop","lines","free","indexOf","DISPOSAL_KEEP","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","result","GIF","frames","loopCount","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","Infinity","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","zlibSync","opts","adler","lv","fl2","opt","pre","post","st","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","buf","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8)\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n \n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n\t\tif (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n \n cb(buffer) {\n this.slices.push(buffer);\n }\n \n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n \n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n \n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n \n return u8;\n }\n \n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n \n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n \n set application(application) {\n const buffer = utf8encoder.encode(application);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n \n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n \n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n \n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file From 6d7ffa0f6fe099bc3f0b2eab2c478c280645dedf Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sat, 8 May 2021 21:50:27 +0200 Subject: [PATCH 076/120] __fast_box__: fix overflow handling (cherry picked from commit f3f573cea42166971b1d135c682f0b580fe0d58d) --- ImageScript.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index 398fd71..bbb2e20 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -513,12 +513,12 @@ class Image { __fast_box__(x, y, width, height, color) { if (x < 0) { width += x; - x = 1; + x = 0; } if (y < 0) { height += y; - y = 1; + y = 0; } const right = Math.max(Math.min(x + width, this.width), 1); From c60cabf329def30b3be6776eec26ad152f8921df Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sun, 27 Jun 2021 13:47:48 +0200 Subject: [PATCH 077/120] gif: override slice() (cherry picked from commit 41532d2678b1a27905869638ec08e528541131b3) --- ImageScript.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ImageScript.js b/ImageScript.js index bbb2e20..b6cec81 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1494,6 +1494,15 @@ class GIF extends Array { yield this[i]; } + slice(start, end) { + if (end === Infinity) + end = this.length; + const frames = new Array(end - start); + for (let i = 0; i < frames.length; i++) + frames[i] = this[i + start]; + return new GIF(frames, this.loopCount); + } + /** * The GIFs duration (in ms) * @return {number} From 7bd501e5cd9a8ae3ce8c280053fd436a4f6a9235 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Tue, 20 Jul 2021 22:33:24 +0200 Subject: [PATCH 078/120] add contain, fit and cover methods (cherry picked from commit 8a7550eaec0c3960795c7da66326fd6e600a54c7) --- ImageScript.js | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/ImageScript.js b/ImageScript.js index b6cec81..4e6f34f 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -389,6 +389,48 @@ class Image { return this.__apply__(image); } + /** + * Resizes the image so it is contained in the given bounding box. + * Can return an image with one axis smaller than the given bounding box. + * @param {number} width The width of the bounding box + * @param {number} height The height of the bounding box + * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use + * @returns {Image} The resized image + */ + contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) { + const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width; + return this.scale(scaleFactor, mode); + } + + /** + * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box. + * Always returns the exact dimensions of the bounding box. + * @param {number} width The width of the bounding box + * @param {number} height The height of the bounding box + * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use + * @returns {Image} The resized image + */ + fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) { + const result = new Image(width, height); + this.contain(width, height, mode); + result.composite(this, (width - this.width) / 2, (height - this.height) / 2); + return this.__apply__(result); + } + + /** + * Resizes the image so it covers the given bounding box, cropping the overflowing edges. + * Always returns the exact dimensions of the bounding box. + * @param {number} width The width of the bounding box + * @param {number} height The height of the bounding box + * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use + * @returns {Image} The resized image + */ + cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) { + const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height; + const result = this.scale(scaleFactor, mode); + return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height); + } + /** @private */ __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) { if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both'); From 89aa9743bc41a4ca760a7197c2f536f17f96454a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 20 Jul 2021 21:19:09 +0000 Subject: [PATCH 079/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index 9bf4cec..44d8e21 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),n=r(354),s=r(667),o=r(876),{version:a}=r(306),h=r(723),l=r(327),f=r(76);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=1),e<0&&(i+=e,e=1);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.6","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(354),n=r(883),{compress:s,decompress:o}=r(637),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},667:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},327:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},876:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},76:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},637:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},T=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},R=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(H,W)+(2*H[16]+3*H[17]+7*H[18]);if(J<=K&&J<=q)return C(e,w,t.subarray(_,_+u));if(R(e,w,1+(q15&&(R(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(R(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},D=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),H=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=C(g,d,t.subarray(p,m)):(g[p]=c,d=C(g,d,t.subarray(p,_)))}else{for(var b=D[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=B(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===R(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=B(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=C(g,d+1,H))}return T(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var R=S(t,w+1,3);if(w+=3,!R){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===R)d=v,m=A,b=9,y=5;else{if(2!==R)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var C=new e(z),B=new e(19),D=0;D>>4)<16)C[D++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=C[D-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)C[D++]=$}}var P=C.subarray(0,N),Z=C.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[D=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),n=r(354),s=r(667),o=r(876),{version:a}=r(306),h=r(723),l=r(327),f=r(76);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.6","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(354),n=r(883),{compress:s,decompress:o}=r(637),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},667:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},327:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},876:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},76:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},637:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},B=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=B(h,m)+B(l,b)+f,q=B(h,d)+B(l,x)+f+14+3*$+B(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return C(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=C(g,d,t.subarray(p,m)):(g[p]=c,d=C(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=z(t,g,0,M,O,N,B,L,W,p-W,d),L=G=B=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];B+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=z(t,g,c,M,O,N,B,L,W,p-W,d),!c&&7&d&&(d=C(g,d+1,D))}return R(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,B=N+S(t,w+5,31)+1;w+=14;for(var C=new e(B),z=new e(19),H=0;H>>4)<16)C[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=C[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)C[H++]=$}}var P=C.subarray(0,N),Z=C.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index 0e9352a..e966a53 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","__check_boundaries__","idx","subarray","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","image","set","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","constructor","ySrc","xSrc","destPos","srcPos","__crop__","tY","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","radius","radSquared","currentY","currentX","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","saturation","value","i","length","rgbaToHSLA","getRGBAAt","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","iterateWithColors","degrees","colorAvg","divisor","rgba","map","v","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","dominantColor","angle","resize","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","scale","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","crop","lines","free","indexOf","DISPOSAL_KEEP","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","result","GIF","frames","loopCount","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","Infinity","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","1","2","3","4","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","0","6","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","char","font_has","String","prototype","charCodeAt","call","font_metrics","metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","fit","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","zlibSync","opts","adler","lv","fl2","opt","pre","post","st","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","buf","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 1;\n }\n\n if (y < 0) {\n height += y;\n y = 1;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8)\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n \n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n\t\tif (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n \n cb(buffer) {\n this.slices.push(buffer);\n }\n \n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n \n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n \n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n \n return u8;\n }\n \n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n \n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n \n set application(application) {\n const buffer = utf8encoder.encode(application);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n \n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n \n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n \n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","scale","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","rgbaToHSLA","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","iterateWithColors","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","indexOf","DISPOSAL_KEEP","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","zlibSync","opts","adler","lv","fl2","opt","pre","post","st","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","buf","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8)\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n \n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n\t\tif (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n \n cb(buffer) {\n this.slices.push(buffer);\n }\n \n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n \n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n \n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n \n return u8;\n }\n \n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n \n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n \n set application(application) {\n const buffer = utf8encoder.encode(application);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n \n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n \n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n \n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file From 6f24e9cec6ba25bec83d0b1d0ef8f357797c1667 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Fri, 17 Sep 2021 11:37:13 +0200 Subject: [PATCH 080/120] Add Deno badge (cherry picked from commit 2a334a63411fe7335fec6efc4d1a7904e754cfd4) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 24c1f09..19dfdc0 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ [![Discord Server](https://img.shields.io/discord/691713541262147687.svg?label=Discord&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2&style=for-the-badge)](https://discord.gg/8hPrwAH) [![Documentation](https://img.shields.io/badge/Documentationn-informational?style=for-the-badge)](https://imagescript.dreadful.tech/) [![Github](https://img.shields.io/badge/Github-Repository-181717?logo=github&style=for-the-badge)](https://github.com/matmen/ImageScript) +[![deno.land](https://shields.io/badge/deno.land-gray?logo=deno&style=for-the-badge)](https://deno.land/x/imagescript@1.2.9) [![NPM](https://nodei.co/npm/imagescript.png)](https://www.npmjs.com/package/imagescript) --- From f1bf90a789acf0858280fabaeff9b4f87af86539 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Fri, 17 Sep 2021 11:37:27 +0200 Subject: [PATCH 081/120] fix typo (cherry picked from commit 1df0cd50b45a2e653b99a92785fb3bcc1a58ff3a) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 19dfdc0..bfac3ff 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # ImageScript ##### zero-dependency JavaScript image manipulation [![Discord Server](https://img.shields.io/discord/691713541262147687.svg?label=Discord&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2&style=for-the-badge)](https://discord.gg/8hPrwAH) -[![Documentation](https://img.shields.io/badge/Documentationn-informational?style=for-the-badge)](https://imagescript.dreadful.tech/) +[![Documentation](https://img.shields.io/badge/Documentation-informational?style=for-the-badge)](https://imagescript.dreadful.tech/) [![Github](https://img.shields.io/badge/Github-Repository-181717?logo=github&style=for-the-badge)](https://github.com/matmen/ImageScript) [![deno.land](https://shields.io/badge/deno.land-gray?logo=deno&style=for-the-badge)](https://deno.land/x/imagescript@1.2.9) [![NPM](https://nodei.co/npm/imagescript.png)](https://www.npmjs.com/package/imagescript) From ea55f8e32c281e7b0ba14238688193051c9efd70 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Mon, 20 Sep 2021 15:29:53 +0200 Subject: [PATCH 082/120] Create LICENSE (cherry picked from commit 95c1acd20ecbc77b67ce8eb0ff92d57a1a7dc861) --- LICENSE | 619 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 619 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ca9b055 --- /dev/null +++ b/LICENSE @@ -0,0 +1,619 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS From c5bd558fba972d32a188b8cfebd0d5c7e6e517f9 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Mon, 20 Sep 2021 15:33:33 +0200 Subject: [PATCH 083/120] Update issue templates (cherry picked from commit 3048088f05c2ed013148b0df0b48a469ecf274e0) --- .github/ISSUE_TEMPLATE/bug_report.md | 29 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 17 +++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..f2c16c9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,29 @@ +--- +name: Bug report +about: Create a report to help us improve +title: "[BUG]" +labels: bug +assignees: matmen, evanwashere + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. ... + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Platform:** + - OS: [e.g. iOS, Windows] + - Environment [e.g. Chrome, Firefox, NodeJS, Deno] + - Version [e.g. 1.0.1, 1.1.20] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..7cbe67c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,17 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: "[FR]" +labels: enhancement +assignees: matmen + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Additional context** +Add any other context or screenshots about the feature request here. From 6c00b5c35e439ef0fb7f57e5d9325fc77d83de40 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Tue, 21 Sep 2021 11:18:32 +0200 Subject: [PATCH 084/120] add more keywords (cherry picked from commit e6ca7dbf597e50ac8de7b4bfd57a8aed28a2f7f8) --- package.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 321a81d..d310f3e 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,19 @@ "keywords": [ "image", "image processing", - "image manipulation" + "image manipulation", + "png", + "jpeg", + "jpg", + "scale", + "resize", + "crop", + "webp", + "svg", + "bitmap", + "gif", + "picture", + "thumbnail" ], "author": "matmen ", "license": "GPL-3.0-or-later", From 81ecac37cbaa0468cef6f0b595408bc597898855 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Tue, 21 Sep 2021 12:33:26 +0200 Subject: [PATCH 085/120] [lgtm] fix: automatic semicolon insertion (cherry picked from commit 73356199cef73031894d0dd4b01870466067868f) --- ImageScript.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ImageScript.js b/ImageScript.js index 4e6f34f..5667b1d 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1652,7 +1652,7 @@ class GIF extends Array { } else if (0 === mode || 1 === mode) { - t8.set(u8) + t8.set(u8); for (let y = 0 | 0; y < height; y++) { const y_offset = fx + gwidth * (y + fy) | 0; From 2bc8e164c93701ec2cba6195207f1be7833c303e Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Tue, 21 Sep 2021 11:22:11 +0200 Subject: [PATCH 086/120] Create codacy-analysis.yml (cherry picked from commit 12f1c2e140c2758c9080ca1de4fbd06a3b78c50f) --- .github/workflows/codacy-analysis.yml | 49 +++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 .github/workflows/codacy-analysis.yml diff --git a/.github/workflows/codacy-analysis.yml b/.github/workflows/codacy-analysis.yml new file mode 100644 index 0000000..94d1293 --- /dev/null +++ b/.github/workflows/codacy-analysis.yml @@ -0,0 +1,49 @@ +# This workflow checks out code, performs a Codacy security scan +# and integrates the results with the +# GitHub Advanced Security code scanning feature. For more information on +# the Codacy security scan action usage and parameters, see +# https://github.com/codacy/codacy-analysis-cli-action. +# For more information on Codacy Analysis CLI in general, see +# https://github.com/codacy/codacy-analysis-cli. + +name: Codacy Security Scan + +on: + push: + branches: [ master ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ master ] + schedule: + - cron: '0 12 * * *' + +jobs: + codacy-security-scan: + name: Codacy Security Scan + runs-on: ubuntu-latest + steps: + # Checkout the repository to the GitHub Actions runner + - name: Checkout code + uses: actions/checkout@v2 + + # Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis + - name: Run Codacy Analysis CLI + uses: codacy/codacy-analysis-cli-action@1.1.0 + with: + # Check https://github.com/codacy/codacy-analysis-cli#project-token to get your project token from your Codacy repository + # You can also omit the token and run the tools that support default configurations + project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} + verbose: true + output: results.sarif + format: sarif + # Adjust severity of non-security issues + gh-code-scanning-compat: true + # Force 0 exit code to allow SARIF file generation + # This will handover control about PR rejection to the GitHub side + max-allowed-issues: 2147483647 + + # Upload the SARIF file generated in the previous step + - name: Upload SARIF results file + uses: github/codeql-action/upload-sarif@v1 + with: + sarif_file: results.sarif From ea82d75a26a6d18174773030b9bd2a95b2b55d40 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Tue, 21 Sep 2021 12:33:26 +0200 Subject: [PATCH 087/120] use node 16 for bundling --- .github/workflows/webpack.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/webpack.yml b/.github/workflows/webpack.yml index bb9c92d..5b6f327 100644 --- a/.github/workflows/webpack.yml +++ b/.github/workflows/webpack.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: - node-version: [ 15.x ] + node-version: [ 16.x ] steps: - uses: actions/checkout@v2 From 6635b408e83ada17738356eb5f5f8c55950a3cc4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 22 Sep 2021 06:38:02 +0000 Subject: [PATCH 088/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index 44d8e21..31ff109 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={655:(t,e,r)=>{const i=r(347),n=r(354),s=r(667),o=r(876),{version:a}=r(306),h=r(723),l=r(327),f=r(76);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},306:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.6","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')},354:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},883:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},347:(t,e,r)=>{const i=r(354),n=r(883),{compress:s,decompress:o}=r(637),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},667:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},327:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},876:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},76:(t,e,r)=>{const{version:i}=r(306);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},637:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},B=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=B(h,m)+B(l,b)+f,q=B(h,d)+B(l,x)+f+14+3*$+B(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return C(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=C(g,d,t.subarray(p,m)):(g[p]=c,d=C(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=z(t,g,0,M,O,N,B,L,W,p-W,d),L=G=B=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];B+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=z(t,g,c,M,O,N,B,L,W,p-W,d),!c&&7&d&&(d=C(g,d+1,D))}return R(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,B=N+S(t,w+5,31)+1;w+=14;for(var C=new e(B),z=new e(19),H=0;H>>4)<16)C[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=C[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)C[H++]=$}}var P=C.subarray(0,N),Z=C.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(655);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={860:(t,e,r)=>{const i=r(205),n=r(3),s=r(584),o=r(338),{version:a}=r(147),h=r(820),l=r(501),f=r(193);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},3:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},546:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},205:(t,e,r)=>{const i=r(3),n=r(546),{compress:s,decompress:o}=r(223),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},584:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},501:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},338:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},193:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},223:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return B(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=B(g,d,t.subarray(p,m)):(g[p]=c,d=B(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=B(g,d+1,D))}return R(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var B=new e(z),C=new e(19),H=0;H>>4)<16)B[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=B[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)B[H++]=$}}var P=B.subarray(0,N),Z=B.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},147:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.6","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(860);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index e966a53..e4c9158 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","offset","getUint32","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","scale","factor","mode","RESIZE_NEAREST_NEIGHBOR","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","RESIZE_AUTO","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","rgbaToHSLA","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","iterateWithColors","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","svg","size","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","includes","TextEncoder","rasterize","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","indexOf","DISPOSAL_KEEP","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","zlibSync","opts","adler","lv","fl2","opt","pre","post","st","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","buf","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"mappings":"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","file":"ImageScript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8)\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n \n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n\t\tif (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n \n cb(buffer) {\n this.slices.push(buffer);\n }\n \n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n \n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n \n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n \n return u8;\n }\n \n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n \n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n \n set application(application) {\n const buffer = utf8encoder.encode(application);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n \n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n \n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n \n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(655);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n \n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n\t\tif (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n \n cb(buffer) {\n this.slices.push(buffer);\n }\n \n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n \n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n \n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n \n return u8;\n }\n \n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n \n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n \n set application(application) {\n const buffer = utf8encoder.encode(application);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n \n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n \n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n \n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","offset","getUint32","static","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","rgbaToHSLA","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","iterateWithColors","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","async","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","svg","size","includes","TextEncoder","rasterize","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","indexOf","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","zlibSync","opts","adler","lv","fl2","opt","pre","post","st","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","buf","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file From a4601a5579cd27ffd47c7e297e035efcf1db25c6 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Mon, 4 Oct 2021 21:37:46 +0200 Subject: [PATCH 089/120] use latest master wasm --- utils/wasm/font.wasm | Bin 211325 -> 197663 bytes utils/wasm/gif.wasm | Bin 54399 -> 54150 bytes utils/wasm/svg.wasm | Bin 1069320 -> 1053659 bytes utils/wasm/tiff.wasm | Bin 190349 -> 185773 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/utils/wasm/font.wasm b/utils/wasm/font.wasm index 01fdfc810b01ef8f81ec9c587e0080c28d2dc5ca..3130367a82738427d5e1e5bda7c6559dcd66a79e 100644 GIT binary patch literal 197663 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

  1. qJ&_2mVz$TfHRvHm&E%oaX)MF3-jn7h5OE4}X46Za@4Pzn`C1o?=-t z4ydNm9Ypg=E+fz6{o>;5=Y#vxor>=TvhA$oevlsRx(!v?RIcKM!$mp#dH%^iZ+%ef zjU98*9N?Zxc4z7f%T5+GCo=>+Kt2m}NK6cqub zNEM_gO{ySvMWiT5`~GL{y}NglO|v}D`@X;LLiSEMbLPyMnKLuz%*-_pM6P?EqCcCZ z*yi-(tiD2R;l;FiWDMCO{8KOw9*=DY>FGkli2YdLhz=>y=13(U_IdD2zM{&Fhd3rj~$MB9- z6A&plBWu2ri47nqfsi6`fQR5p*^d({10CBk@rBuwwm}YEDoQ_T8YC8^A~r102IhxT z;l-4|p2#@ii#Chw;*uv!#fMF&+2f%~x0f7`7LZ7;;%JO=`?bf9k4dDOm5NI+&|vTW z^fU&O2Dj40msfL0$%iY@j;9Mr~b87G;H799Jg zRHucB;2={_LkKUE1FJ_zdd5#z#D=H_u!3Ub0C1VT1;?t{1_d58kdIQJl^Yx+OVYR8)G5)RjCm1niSb5XOPmHqSsd7R zdIVJ&;o#Z4;2Z)10en0kG86+Rm99OmTogzeZ<-;!(K*ft z8&Hrj0!*2Ou^cWFw*7%W7$`lEBT#Kf32Ab*NO7PHqmte+TgjMs2QNuFnm@~tu58Ex z>y`~FO8rOU-*ilfAgv*hlG3Eu)>I`@Yz<)r*{oNQ`GW-3^h~WJLoSHKu!@$9FC`M> zT7q;eVdty#j-#+v!W=34k|#pS;bX%4p!41G3Gnda#*9loux$VLy79^Bt3O+{L!cgx z9lrZxY-mIfy|irBJC@L#fi-(uXLKlp>?6FGtnasVrsigIOlYD)BHV`Xj!r;`3hFVo zjz}0M>@&v@%{##)-EakyZaBJ|VvfS>vVyRaY?N_i*pjo-4aX;_7#&CyL&et zX>JM2o=_efhAf>nB_Z{y6$g@h(&W=zg7`6KqmfiWl;c0thOnB>`XaF?Ao!D|=1azNsRc033?n%Rc};x{bxt55?CLt~@&FNHLrgBb8V<*>O%MQW2ctMDa+Q5!m(5Y&s ztHaKA;1I|zMCKZXiV!jBLj}ho6TBlu0y-3A1pZ-Cgytl-4y2&6v%Z5dcLG&=gmR}J z^>BFwEZ063!!%eynQy=bXRLkD-q`FLUnvB=*s5&Djb+p*1vL%Ln7pYcKGTl$;1g;WD^BX1Xb^HU#JU?}FjXy% z*e#JiJA%Q78N?*pesmHY32uB7HHD@p@TRaCiZ?0<6(Qf+==k1?iC}lh`@I)VKA_Gx zjQFS@*zMs)k5QY~&p7Ldy2nTNNZ@lab)3@n5Q!#TXe6~(AQ(WOngQ7`&H&d3L-pJBlfcH)b>}cP1l5d?6CmIRIaX zB*B0jO%UJA&>_?Ui5S|b4HkZi-= zY<4I}7HD*z8j*!Q1t%*$N($K~@7>hMHW6r?#b|SizFHMnQ zoTV3yGgcaB0;R&p!_0QYp$*f%PKQAycM9U`O@!oA1>PV${dfYOPo1!_2) z8)36jYmCKVvVbkPdYAsxdZKTBJtKt|yFWYCVBa3qBXa(=3&)R#fYYyqX#d zlxr+PvgcG|sF2)i44;%%SxGgv$H=QBWupj%SsTtu#J;g{JCPIqw zz5dlY5cz1?ezFn*4O5+;f=_Jt z!5~8G5M`yr_Kl0lv~n~-zQUM63M$m2b5hESwMc9$^GO z!J6}26Cdu1qM^lsxdX{m`++F&V|IHz|_<8d#IG95=C z(X5%q2NUPmRNYgYI*rdBrxZPyI2TL{8K|9D;hmFoLyoi{fs))HPtsxR(r^yF2s#LA zJZv6@^%hOm(Ng8fI!Db9JMdwAgrW-jtZCsQSs(>C62d%9&9Dv=YSBN?06hi`c*^>V zbR{%LVa7=3`io64k&+}MS6||=M+oRpheQKSP+%~pm9S(0E;FhY^D^k|B_C)G6~#QCU!K zb|(VCVWCYIAz+3=+@pC27HIoH4pZP_ZOS$XagNdrnYsYPFx?g{jxmMRsuyjFAxy%d zSi*HeT~T9F3+GIx?L)ngqKYXVFJiv!EpZSTG=bAQ&cY8SL6t~87(q@e#*l-UD}#$T zMoP;ne_9&)(_&cfU?^Ovndu*^WkthD*@Cam44f#lYd&R@3+3WXxj+Ymd|<*xgT=N2 zQsVeC?WTmUJu>1+RSI_E&@~Y&=LiL>C=(^C5?GO31(%D2iJ=?Y=sYbF<)jQ{Dpj>W zC|`~$TS1;l0`v;@3!xx-$5)_{)Vai|6_^vUeGK?KvAkrWW4Q84iWW~8alP?%R<Y8laxQ<6Q2)Zmvu;DR-pfdyp!9=HtZVH5fn?W#E zYY;3+2EjOhXbple{4s-|)2awFAsGY{Js1RmV474?O)eV*OC}4+JWN9|72OPiW|;G+ z7RbC86O78h>2aE_%LYMnG9ObB5EiU}V^xD7)O@6jaTx?-VGtzomdzl@A{;OXMx)Jg zvUI|)vL@5I@VQ)phD%zBWHkzM0*{Kv9vfH!&CKdYt*<0m@JdP*)5tQ=8t$_0);u$r z>?o9&=w`AjOD4Or&~}rml|AkzJKXrBnDo^6EGD~HGTFsy5wIMX$u5>mcClo#b0uab zJJ14~tP+=)oZVu_rR)a-un`Q!B2!U9G8C&@?6K4Bab%s0lS^3=SZcyNJk6ejLCs#C zEP+Uw&DO`ejC*nugmDiyu@omwR3+d*TG$9wdtTCbdkKoEELD~eE0rIgmKIZ5Dy|yy z;-nOL_l2}TLl}$W~ z*)UEjCFi6Ueu8@>NeulS;WtohZ{%A$zIq71D4woxPM)0=5p5YOpk^21}Eh z!4f{%V2LJz3s+qROP(1lO%9jA(!>mw3{Ey!svs~}VwvOcf;mlNur$dAO9rnRERg~# zIx<)yUuLjm(N2RU4}&Eym6obd6_=9AkgPGH5z+YPkAMWJcpB89Qn@sH&2d!7as-oz z;hYm|p&$A}*kgo;eT^rxq#e6hIjJ0ZhuTeBB-A=887AJgY_u?99|fdHERx2et`ac? z#-7!B*n>!By%=;OY=Oj#3YJG$`QnJ5gp^&EM5BES%;3l$F=P$2Cw7!4DEJDmH)N0@VBL3!zMXvY%nVk<7;H4bi=It@~iRHiLn3gwt`5GG(vN*fnb3b7@qi2`<9 zOzC7cpF~T67xDJkwwNHqOQm7hmdd0dZwHTWEVvHqR;{z9Zm?C+OOIT1*lZisVWODFO6=!bB=tb*V<0 zR3S~OmKKwUt`9Dw=F+6fX=olK2&Agx#-~Zu$4NEDNfpLnTM37j6NeT8-jzufq?)X` zz*AbJ4n}RqUS2BE8mJS&G3v0yHkKqN0rWDf1GYY6RwlO`$`Wi!1d~x4C8Y9Xj)u`U z4Xq`X;$jgOKMv%9&+VCcfE*|skr9(%Vc8~8CTs;lNlCV~#{44*3;~iPb{GW2l}px* zYfqN$wm86w{g$jPqmkK7^t~o9GA<^T@PTT=hYQwVoTGMttXg9tR~)U1vIRa=PC{}Z z))wsnk&xVeyp)*M9$3+wHCXv@8mn|t$r?ftM9^_BNO!Wp%EL1om}uIBO`s0h0xQ8y zr@$2Zt4_7J9;H1{r!oCiZLvsFLAZlbNEK@c_o*}wafh`lb`|=S)2Cutf^&Yb+m_AI zZp-hF@dpRY`(?we&Vl=G%*t%m))|=`rHxz6bw^+>xt%Vd+$6JV&Gna+`;;8P{utXh zTSsSVa>=QgiC5=9Y8v?!6E9BeOXwgv$4<=PVc}(1pqr0SHS?Hdaxt{E+lvhVqO7sN3#Tivkc7gBE=vXDsB_VRi3vGu1xjH` zPBPEQDm$$8sL{fbN6RmE?G-04o@8A;l%iPZz;FlS8|f_A{F2safcAsR$P0*=j+OT1 zLa13Godq;JrekGhFA7M7FvKii5AHuBDH%M>iD6iXg% zXhNG5Y5h%~kYcC^kv#oIiJ_sUrU>OPI0wEh(V<8Hl?>`SlJ*6nT1eAJq6aliPJB(9 zY7s8%SD|$#$GSS(iAg$f+Jz&x0aO=;2F6LMP`2NUSQ!KDaBezrsv1-pFNM&0N|4p> zPGc;nCd&~5Xx9Qj*Is)Al%9OUA z7z!{AOTEET>Ok38iirOiEFE52GZrv z0K3DKBiKXfv1Ph55~>H!j6}r$0Y;+J259&QVI}hspNbn0gYU|Mb;K`{Df^(-ViKLk z3o^I5L^`Rqpx~l`ne;p8>g>d~0VYclJ2Xu^s3$Q9Gas`Yv%4y2+r2Xq5?Zz#GhGu* zmWU(Eu?n&W_hsQ00(Pz(!kkQ&kSb)dWZyZV)XZc_q6UCy2Xv9RVma1HFj;~^w3ayG zAht}wWO@@RKlzGH7KW$NHuzoIEjkdd`5GIiCK&@=Cy&9E>z ziiyGdC|ZOa?>pdbVZ5OyWhY+ZFwR3*n$SBP7e35austM(EW#u>XhOoW zvU?H!AmDOYgi&C+@mapCQ08o)%f9FZZUr^OkBMe0Oj(Foc|#-!^e|ho(TD+a1DmbT z2WI6VM4qh_L3(5#g8@jQu>vgsUS{87^A(015%PQmc43|tLzu77_abOMA~{U3_lq=i z;XgKtF#DoOmbx@6qQZh39;O`Vd+L-!W<7Pc{LDC1wv%`e*mv}h0ZsTd+((-u`xaiq zV4XL~+%KFH_rY9u?qg3Em5u{bSi9EPw}|_J#Ce<`)n=$Z}VOrpK@*a8s1aO2k+5O!FvdF`UCIT{1;QWT-&`ezotb?K}3!_ z@6qEhEkPLRAT;eB^GIsnAl~uBKNXSbr1(8t2_h=;#i(GYi>r2a9n#%jiGf`hQsf-cj z!Ggl&io&*;?`WEXWvvn0elXp2N~>aQtQdex zYrUkRv>%miP-PGRZ3yUM5LL83#*oQ_9e8n45e!loDA=W|>?7o~B-Ji!-RjJ>tTih8 zhES98FrjWx#f}d!)K{KfvOO)B2RfIvC@JoFB|(O}d$Fv=CoSmDRarUI(%)XN!iF7! z&!S*FXD`-g^{4^osue`DRV!|MBEyEfYK83%tJY*rUX_A%%02)e*OC>o4OQT2sp^wu zsp_Lys^%DnrD_gwIV@HGp>-8op3+8t=UFB$A-p&DYs{yVcGeA znP)a?wp3_(iUNI?Lt=`g)wXlYH##0lLGMG-_! zD8wxZ3&>rD5-!pIT zsvU$T5?NEGD3XV%c(y4?{-%Q%?^}@-{&7(L-RK&$!Pb43?Sp90bfBTI~f3i*r_jA1?5oMEyD22)+hCxoRZ~E zoCOqP&_s3Yd;!y;>7;0Et)TUJFk7Ev*-i^`wwW;sZmgNv)(RbVQP9>3+Oh!*oF#@A z#;kOhs9tmkNlcq63CR=M;P`wu3$7VJzo>*yaI+VwTg#!0m1yn)(+P7~;&D3; z;<*F@L%dx~Ks-1GQzI}kV1~r9#2^?a7{;N(ggugO5A`tu6c>PYVWHh8gOF5OPzhUn{T8ap^UIjbCW@UL<+L%W<9X`85{Kd>~!d4WF%!@zsO@cQ-pu$=Fz! z6~J|&$&@5^!Q4_`7jnl?7e)iR7F@POQ1`Qu2%>}OP|{)x3r-+oVHwEoX2m4} zXrhKxx|+;NywOXxO6bJ+vIAW^k3L1;S;ui``o1~@8-0^qPYj^lEtRnONOpmdezGfW z0Nrp*u^7L7l3Me1Vi829gk=k3z6!8EVI=nyyrrR13KDBnFq>&~+YYr*wp;iyDP}v$QWw zK%~SXl_*r9BndGPK^&@xQsJ^BITfOcAj(S1N*_50^$wk)D0$0S!W&83_jR%tjRVx_ zBx_f)EkGmyfyMGMkJEqH=cHUQRSWPKyfDZ>6UXSmfP*Cx-59~+)@q8z-6nK63VXO=0XL9%FQm80?oY2kd%yyc6g4xj5cA5gqlz*lS%64h z3-N_GbA~-I14}Tt7G#iyFJr+1yN#0K1l7U}a(LVQB=bV5zYNJo0yMr$NKn|zxG-bk z9;T@^4*R$ZrrD@kTxW>MkT1j_Hg=MA8k@7BucjV^64(ZjpFYBc7wbrBDIiEHG3G$5 zkRb7w1qtK^am6eP2w=4^{;-xV^TGpuhM4j}qfvMy1rT;@bSLc4AP{zZN{z6aNRn~T zzX3ZFM2yqS4hp@rY+iGO;sC#=w!+$SIg}ffSxP_|=@J-bL1Xt_;~Lk2)a3Q_(Fr4K zIhK!jG#j37NB+wVe@k-cc)KA}GQif~JZq~D9r(|*`q051Tm4mP^;V_Tn>DQ-Uw@%i z5A!~2^+u|3SE~n8D`B8OlcpNL9R$>ljZ`1h&QaTFI%G@6Jcg+H1&{-Kj(*h4Z9tERL=dZNKEfB-~N&Tc`!fWsU60xS!$Iov=9&^i1h zB!haH!TLxx550pv6cfODhe_@oX6hX#>K!O4dI$Va&C|;igMC11k&QHfLV-f!0o;=U zsr?$M;S%@cK0)o5jRTBlkPE~!5BM2k$_Kj-6oyJcgx!le2~J8;UZiAW5(yvbp}HZS z%e_O3-IQnVK&4afK&4afAZp~^K__h>FXi50q~0Nave(j6(2bL)R*tv<#BCawN->w% z34)!bV0Jx4Kw!)A)~@Rmflv7g*zSxG2x1%4I9$^Jm>9q$2yx(#JWFE}63Y&Ye6=C& z78Qzcn*E}+gdG1VTgFqYe!L*+^ai8J>}B!xvHIHlXvCmsY}TSP&X~cFx>&x5ipDV- zMcAi#=t?RKJhc6WZNnDuWm+K;0kgh3fbKws2^w4~2sjOoq6nA;*}}bH-y#;^Lwq8> z_DVURVhftXo$I;eV9S;RW?cVh4p5=VWk?jc%B&2SH5N37v$>T4a}mmc&DN;h3l2-c zbJ&qv4wyd4ImF`wiL4CRpPuhB@N!MB$}I6aMYd7;0 zY?{^r9dE&KOwW!3*B=!O$Ng(^>(bDH4TlB8@l|#l?3OgOALWN1N3-LAC9q(0?97e> z)BS?s*qj{)R`>>J~=Sg5kK59S4>bRHJH_WdaUE zl8RWqvyN1Y0)#(JGAx^X1skSK5>3}hZHA$QY}oXVp|blp>}qnm4R@^B{piMN4$;ci zB-$i{(UL9)lFTtCrt~q{amE&^7C>2(INBV*J_yK^M(qAfEXpxY!~hK|2o^Df!U|cB z9q91V?L@Nvvk+|;W2tZ_`gQ&V4CqiRUFEbK+~h=uVX)T^<&fFt`h~*8oMH{vi&&BI9v;#U>Ks>q1i9)Q7VK;RJ2?7M5&n4M zB&!Djw@1Qe3k@M|eObG5AG`Gh;FyPtWR1m<9lB8pWDxm)hLRBt0eT=X6O|9e7Bn@^ z7*q=9h^EybN2)>5v7PoNAc)L|qGN-aLC{DnQ$Y~n083Ns?0PSdr=DGN(SoHSeQJ*M zr^H+*jX@)sE|0V`m_V@mz>yoUZD;pOL>{~dqU2(r!U3@Abrcg7fpsfs{b-E9 z8Wvx1rg;I1#~6b!d^C%CJP?_ExmqwY+ugk#inr5&y@9Em%> zuP)e!QV_SO(oisH8lkX}c(iIe+fxY_&92xjDLAFi+98yb;1@WI&pA7`F5HLmu?=dp z#Q+*r(Xj>_FMx){L4QhILPDyI7*s4UA}yFms#PeXNGFSL4|p3;+3r}$N=ctrg(XYx zII{?}0*8!`Qj4s!*oA%gt~RcI!oE++eA<$IXq!;ipbSJem}Ww^p}LSeC@7=PEaCVI zqhbW8;8-fECTfcca|qGjWX|V6p=AzT@3$2y4N@miT>hB@BZ8ATGFCU{Ok4(9^T8Zy z(O>;yCQD%>`RtL`ZLz+fD#er7@sUV?cl4yv-O3Ffq3$Rj4k)V~to-D~ior@$X7SmJ%@~yD4A(V|g zr~suN>?GAmQKQxbT{nyDNitIw;Ik0|TIDkYBn`BbF)JkFI;$bd$jCC{EQQeL+3-$d zIt|rmMQkRg4D6}6It2<4tiX5-?$}6O5erY=aT*IDq@W2rkJS&x5iI0LFU{uM;0l&O z@XH@17m*N}e4348fsR1ODkO&nK3rFeMiqqEN`q;}2@I2>VN7B7 z?O=csY%kHSMUHl}6D_!MghnWVeTazGmLh3b9h_x4&J8NsOI;B(7XkvsG>DWEXWqD2@y zvThW?Iq62h&UisbihJBps^~#4xHv)U=~{?-&QbqG5%Gasl^Hbi0XrQ$I7~5&!{i4; zq0*FjEzyxD>hS_;h`hlSocps;Q^gw{1`d+o>UI5ee?PW4XuckRX^;EY1Hc$<3i==b z@6dh_z%7Lnp_&5@_%d=dnbJjNERp)r0WvCqP_>{Q+ZB~MTf3s`gJB@_;%L@^@s*ku z6`eSXCe~TjQ%FotflR>>8bxq+fcgYzaCQvp6Yx7b1_*R6Q(?^ANgac;g`+nJ4oRL* zwvoYaGTNXFK{gOi)E3a`sZ*f-T%7{c(GD9(BWnws&jTCOFyp>dMR9bh#KW z{80gDl#p0^kk9)FwTLy&DnqTXdSx6_tBhs{jEhQ@k)(I>vOrY^j=EJD)k3x^)74@% z22xzPpvI_rF&joVry8S`jHbqzkSAj==U!tx3XGCFEfEqb=D9c-69?}pQ!LNuiw)p_ zP@ChpQ{C&zj%Hoz4#(gJOA6*ljfbP&*kp<6qNu)bL1!)2-)JbY>*$Vck%WZYGt6KX zeZNJ90do3MqE+BY%F!T$PA~!MV-j4H9IM!o^37$RCg7;Jcy8HoaQ@T`{y10%JO+HnKE9s-7SOAH2B!%~5%pE5$}5<+nx_Pl5bMeoytlXfG%B|wDY(jg8oHH1(@ma72lAVO%&R0uJugrMuoZRZ=lA$BlfdL@Zfc@jEi z`ixj@OsA;%F(D8r!&*NEMP-f)(ExD@?3T7XKOQ(l2R>g) z41&a?UWJU<-O$reLXq7apqoAg$T0Dm&Xy`9vnYHzJJSb3!HbHRUm_!@dM&+p9ljH* z9_|NKs#7-}>kM=WMB;Qm(2ciawuN~34ESUy9MjV5qKpd4kJej|lVLo_(6uI6${?qt zrBNo9%fAaXIkbp>eiGLlsR&2NE*q9^9M|imp#%HB*dw*K z)Te*%fxV>e2pb9*!u#%48%J~m2zLnnLh%=dzi|9T;7?0)WEOu^7JoGSqx$zs z?bok&|GxcFd-NLFWAKZ;yRjhEBS-Zd^3vd5BL?EisSYVxjU^epg3;gubZcKattbdTZhlZ zPeGOee4zn*d;L;r@GpxqFWrAs^9Qk6C@zwrsA7DLMJ3EjuZvGB1^Je|m0I}c2dBO; zUC|x9wC%G!VH3)(7mF48p()k_8>Rw!kDgB}v82;0Uwl0LjV~|0QZmT@aPw;^LkBlH z<$H0_xxvHUDYmW8;Vnff1VwfHBDtEi_460^jc9Ws5(LJa92DKVpYktEMZ@>1$oB7+Fe80;W|7w%AKM7?1iftdiP$9#1 z;P{hB=5My7L8T!-zBcdMCq%Nk55g#z&%Z3{`-sfF8=J)v{eyL%Q62qn-fBo zc$NFL{L^a8Kj)qD36J|$dZ+o*I?P|S=Hbt;pFKJy9~Uu~2&P~WZRD@C78Vg6R7_LuAae9y6(&t@@yn_|1>&zjow zwT{m+nE#{k@k5J@dUQSY*$U>LyYri!Z+vup{oH43nLlG(>hx3HHa^_=Y%}wpTE1cK z!l89OJosz}^QQ#)?tOU2H1qniJC(O16y5gOqh|-1fAfT~rw`w(xis+k3FbFc zO-wjw>wK%k^RvwV#exz2mli4VR>S94nBV#-H~H>+uRMM6`7P%EDco;CFVi=B#y|g= z`AfQL+e(1uY6Ei*u(rc9rn8+_nu5|A{=D? zb)!3fvHYZTqK|Nb`LDN%8GEl|@REtbS>~@&s?g#q@2$GIT)4vguf6+q=T>LF-0;3| zi}|b7$z1zo+VaPzg`b(|G}&G5_4>b-I>Z(Ra>1u^jU|cFtO{GNkO;OJX(V-x%@rjs=&) zUVk9gVg4^iUEei$?`uE#>Y6ZrsS+iMCzk3zxKGm_O-udF2Lo2`K0OAG=*|C^AI|Z{ z0`#=9LavYVJAjHqM-S(?MoI5Q@}gdEFo;Hj$z=BPinN4z2m08oKE67e=@}s@ zwSRTiyvV4lR^P@=9zQ8jvS#Nl-QK%7W%iu;3pQ@wwfoTFW1n8T_04lm=jR_^x?II7 zRjW5_)Md&XMDEzN`|zhHPu=>4)A?9gY?Z2Y>osiDwO8*c^OvtYcJh>uUwqw$?Rxc| zJ%1yB4;{OH>zg}1esvr6>YYC2ojo7#J$K>GZsH@FgNH;$bsIPS?XA1_ z{23e)U8r9Drp?-S?A&$yg!c}eJ$L2KZx4o#n49|2YbCoCD^W6Y>j!&}oVsv*S*^uO zO3f{_Z~w{XO`CP>WHkBOVoTosb?}gi)oUi#oj3p4^HzOdI(qE%nTub3_v|?*b+b>p zuA5ZH6rnTtP26lv-&8)%lKzz#X5w`vb>(zMkvAHQeqPOe{f%vmqAt?QESf~4D4+(t zb$Zca;H^RWDx#m!ptl*@83kjIPjg*uvAD?V{0zR{Rdi8ByGes|1B#{})lb?ch8re5 z6+0M%EFtDV??CSX1}{Unp@T6|U(YK^=dI(#(v~D$xWOW(Z$?y1%_h3yVydZ{=qpw; zRx%~(Cq4HIHI?)$E=sl--}G6!NsGfQLDMtzCG}N}f;H5f{%-M9@AUJyawq+{KK;7) zZ69&UY_XzwV&}m0ou>5T36(@ILnTu^leZz&5-oPrbugz-4vq8*HaF3w&opdW>m8yi zy;?W%QZb{qUZ1|sZ{i@^=(q#}VrT2pKNcfIUmwoE^C+HxW-55$gEm&3jrSA$^#Oi? ze2@?#g!x43qfABk0b+`r##^*(1lFI*5V@n7k02;U30r8~NZ!Xp6ucJqSMSd6e-IIA zG6RvSH)JFU=L_&EH`3s#>E@|G5i>bi4g)$DYfU$Hui;xoY*BYcn@&*|q1O z!QvehRi$R#7V9%le74FM7H%(EqvoN*I;n8cVsT|FRcX+uN%K~1+EN?q{$lSwDI-RY zn=o_jTU)p7JN@?7F((EOS=iM+RxhGT`iOkV66uqo#L~Wzx+3OieWJdO&YF<^mZ6BQ zh%U}l&cdh9n^@5t>}5({QdxY_WG)q~j}asEe632l#`=;vFQeI5ON!Nbn=6P_^x;OG zx3PJ{ie-Ju8cUeGCKhYiG|rUJHZm~8+*B9sTiY6D^fELs#hPET)N~{ms_MNAEeyQg zChF5)?HS#`4H)nEPLq{_wwozT6QS3R#deZZt` zoq9LcRW|z7qN-l}&@|^>3Vs$^-6!cQj|}U&Wt8)NMAPjA}*2g5mUW87|~^Pl|X--$=-BgYwsXY)EmuV zMx$BuF~+AKFX}bLz+s^=89My=`tDqpfK{A-$f{^>>8t2plcdCiQmYb&tnZ#AZ1^fE z`teuAxo4}&zyAEI@=y656?m`J6^i)usJO{`qf*Jxn98Lhd(^uZy}Hqz0X>>F8?w6T z$~`g7dY`$`jJp)mocroVi&8gwwEFqx>ei>fztLLaO0>Dd?`?y1qme6)p$K{&o^N0& z6=dUk8wGs2VR&IAB2A)FV4 z%IIf00n&z#7DO0E;MW6y4-|sY3jqzxCf+D|3DJC2r1eJ1I3TYqVn>6{2umE{Byy0U zK>kRfGH6rth~gVy-vdzdCcXtP7`;tBdBJQkG!i0!jpr*`dE}?J@I}mgA02N1NkW*Q z6Ky&eHU$Ik%Y)xylo%yM3$+B^XyOHnnJ+Gm672j)Q74#rgLoOm2c<^BCzuRg0$<9n zrmhtHdOi+EW+W7l7b_tWWQbKvg0Mv7eRv~fCkltF@OqB_B!&}b^W7!R&|lzmyq6?2 z7dVnae3+o;7YpJ3K727#n5BeR3S|?7SiUy6F2ERT;!E;nfmaapC^vS^^0$d;Jl6F# zn~ejOoBSd@C!&NztnJV0I3?vr`Q zO9w?%oPpJjK@dxT$(#{v;9CX@M#A>80U3bLXkC;Q5BeebIliW@1-Vg9o!(>;jM2Ib z?3vV+G4WPDSkLU6?_hLPo}i#0lINOifD%W#^Z#g)x}46zA|NOr0JxmZKmT|O z3~5nIp%#bUEKCqw^msxG{^voUt7O?+&KmcG`R|2k@Ap*{XG$w(Z(?=-4SPu5*{J z-MV+{(euS#z5Dd-*MC5YjBVf`_8vTB=&<2&BT`=)IcoHnm&c~zw%qX((kD(zn>=Oe zw6s^?|4%(}|EY}rujey8TLEXxq`H1}*6cZPadYR*U$8J^(QAvBEL|ooU$HXo^*2_n zUi0SKb^l9V>oYgx@i_hikILeWZ^dmQ-frIV_SS9NYpE089f(oa5>~R8@0V<_wzQrG!}@ zh7Eyo&g5_vo>9Syf$SW6_5<${OyaW?n=JA4C@j+yn~=$WS#u?SZaHg<&5%=`3>gw; z$zQ<@rTqaA*w(BfX7I8{Ny>;(f2f9(r0fN+lj+1f{2@<*q6p4$;1gh%>hF*>E6pjoO<~cd8)-`CL6!c^*I16Oq3T`4;&4#5?Jz3sPAeBT-m9yHDi_Y*9 z57dzyz)bD04N|zAbYVG8H@nrFl{BWFx2BQWOEsdayn_Ltej%WOB9Lyb?I$WB%o*@IUm}|E0&th`;M# zQo|)X)S)KdXx-E2oXi~#6;GhfeARR;RP_|-?HONzP$n_*C1&hR91Wf|Qohlk9PXm&R1bit|YKzMvIYs#~Y?4}~oZ1DM;ifRX8zgJD zc#!#*$b7HIy33kI^;2%DJNuhrwRMe(2Xr2#%PE=_l4>ShA4GzWSHQ;^^5QqA(&P}Xtx4uq;N1C$Zch7-TsWM`oIyx{K&RKE!Igxeu6l7JAP0|zJ&;OYp+1NHPI!;tc?Zf})HA87G*jQ6pm4oc8??Mk zT2urvgQl_og&%}L@1s6cbop^Q)PS7cN)o`!1*5{zL-4Xo^=U95mfCWT@fy(Fon(^D z|3ef4nts?@;AtlSrKb=)p56JBMiju7<$yqtXA2t{HoDzfd%(i@f19jfU)aGv{$XM5Ys&hx@U4V zng5Y4R{bhvRCLvy>s!O4tZ*_07XTWN0-}bwnv~XsilzT}R5@N#Oa zmFKMjV&ZeDPNk};|K#=nBhiHIMC8Z@oJVs(irgL|UVW&TjA)+7XFpU7lz`!YlOR|K z0H|z=n?MAVHXcuInH4CG^2FeR2a5^9PhHUUPbMX&-vZ@Cz?P#_Q4!M z9&%9*%t__K zmFI%AlnF!yqkGacQ0bWzXTchW{?j9h#5)}zT z5V|aAILC=UfqjRl4X3KqnM_uzztyU;C=g!N?H@>y>LXVJ^O@PNKayFwqE_{v3Yhg> zG;2T>znq>0DxgJ+(jp4;aeu47ialp6ImgHudBRUI{zZYGHD?(vKfgG6oa>WEv|HMI zXN@blpP}+D2t~6zZs@Xm@=c67PGv{&uZDQ0k6P7VdBD!Uk_>5Ztx5WRTrHy!Uiok; zGDL;cWf#F(%>ugjMC9>Mm4<4vyx!F7G|Gg$!SjMBXgsoK!jZLB{1h;~6P|M{oB{@1 z)uyMRgAE@!jUi0tPzuUjO&KKXMxA~&JU?$eE|618LL+EFA6W=$e^qQ*6iW!!LdkAd zZqQn26o9Vq>@F2cmgeRHQ~}tVb3C2~E??w@T+M3=buJ|Na=GQCFpmaMJe)?2MjXkm zPIYw#rs&Ln?YZZQel#5gtc^UK)kk_X7kXq4qTIEq9(|nSgBd^-$s#ojU>UMvk=FGp z!6+IPwGBGojwcjbPf4tnNquW@=EsRKdM2>#kmn}(N#TM~nFOP?J1?j*3Q0LX|3A(% zZ~iCoMWrw|nlMM0i^j8<&%x|X?V!MxY)TaNHy@>qa*nO@K;IDNCA?fQvuh)|;Bvwx zZ&ByyE&o?zUF|);E@V3&*$&Dt{67F^3gjG{7a-Hoe;1i5W(tZ2f@C4`-|O1E4-7PF zs!~FI+e{`KE=UYC(X}^t)Nu99=2PlwKz-BtK$&QntR~LiANmhDPMv;n*5DvEv1Ww- zMQNC=&>Sw6u~-Q;BLI1;`QgphB8biL33LO`4o2}8> z@r~G^V8jOps~qDTix#6E-=jl!MqH7Qbu+$m1HN8w*5lI)M)$|Z-D~urT~+^+A8P@L zW91j{;R)r-6HxNu+Y?43H68x|qmdm(z-eyfG=fpUc?8CjqB3WkM-z-COO-BTG?pz_ zzJk$Mu~KC>ZP2Czt%VH_--0p&>#Vsj+##o#`7l5rh{6p=sVp za)nUvH4~cW3icn1RLhs#!bk@>-0~IZSjWHnbkv~l^S7*tnJ@ma%!Zr$C2 zP(F4XMd*Vz*B5_uDrF#*nvFMu)$-$Lid#C>GhB7#@J9L(LTdI%I^#m2L^+*xVI}A= zZhVIc=^Z9cnmnb$)M>8>(}fu`U!B!qc83mgMdD<|=?I{XjS%b5VmRQxVhV;Bq&=t1_3jT5s4XR|GrdNTG(Pf)&X%H=laY8B%|9yc-A1!v2;CfZOo$*37s2Xvf^?1 z+1w@{@cG-Ir_EPhw}Gvhpm@=_JW19rS+#gvv}Skx({PjnV+MY*=azSfnwFAl+{~GG zYL5_3G#+C$xv25Z1X&z%JQ1cs=I0Gy;K5%G!1-$zIV9EwtJFHf)PVfHoe5nInfM%O z*8t|a0hLkU0xqD7QhQ3`In)!R5{9mdB?%*jdM$+#Vvop`Bm_*!=%oZXTMScUlD>*! z@u=~C^(|w``8Qv9Wm*}iOrNq8`^)qpp;A!K`R7`0Rv6FeC{!t{#;Hx9#5!M2JkF4U zIh^V9?{Lc?|H+(?N_yGvhRlPhNHMwG+Jmu;zy@R59a>~^3%cT{@KLx~u}bIMo=r-tYx z9${JOchlB*z@;TF54V$F87!4?cr%qY$Cu=HoS2%lP^m6lO^9XswXG@?7pwn4-;n#qBau#TG z)dI)n_%JA(kn{A&6nltKB3Oaw#2Gtd$KD=*a|}wLhfb`?r`G7?8Xk|}YD7Fc-=@Mb zSW1#pGT;)}KSIi&;gzXYvr(Fo>Q&!Lu%}q}D3?!7n)h2SWDX^zfho za=a#1<{x9Lnl|@0&LJrW$u(GVa%L;2wz{;DT6a#!vWDkQr{`EL4v!F8fIQsV^aQH) z7sRb*<4Plkxcs@hvZwb1uR^)rS}0ej(j%P>(N#07k+2^?dupdH0BtpEQU8N($p363 zviq2zjHmx&UhdSv#|x8nQw^_}IP7ionS-r;>ixncXh$Er=N0!0XL1|ga)R<%K}))U z@)}SfD`+VnO2>bWtPtz4QLrRP#q(H zu1$W$L|Zm}Xvd;jtg-~^yf#@MpRjNLflm$|I(+2lflrU0`0V7V(`P>a;_SKe7cPEz z>GGAU*RFqc8VuZCGR21-tQ84FLg8T9pgA9U9PLnE@KU1`?>2ugL`J zVRCK*Y@;*wIh&%hGOGy@;H<4^O)n_qe6idnq+EfL7lRza6XiQenW(omo7}gjKs68uab2qGZ4QS!4peC^{mXH;+y&Gr( zBS0Qu5(!jGKq7%Un@ggz8@^&n$_kp~2AZUywYXEhDts;OMnG|yS*&l($lABqUVM4v zM&H`-FM^8yZ35)sIGc2F=YS$z{xYp>LIUZc!HORH7y0@x)5<0!?zH~PZ9uMqf2R@t zx0vM|3)qxQ+qqdAaCUBdb;CI){C7B@!HPltzfiINN)==uxx<%d8M&Q&{Z|MuY50oy z>wkf-|1tspsLcA8Y5fn&EOx|?*1_z9$gTykv}~!{6BhJ#{TnX_x_+(|F-%-k`_+Np zJ>K}+=P&fMy>`~z&pvSU%j=SANB(rPLincIgQrE@dDLUdoqk_WfA3+Sy+Zp+4euS< zQDOEk@2&ddux&u$+54<5*T2%P!PY&??p_F=-t0o3b&j2HT(3N<)Xh0#f{g3^3$@^j zfBR0x`C{K&O8Bicw>Unr-`nRu*!9tcFR!OX{8%M(O}SrwyVh+{uQ4|!JPq1?bn5rN z--(?N=J#XqiAxvzJ@h$W>*F2Xy$?(r*|6V%qLB-ST`Rj}-q0WU<%z4OEuRuxd;j?O zuh!p-Ssv8(yVtjh{uRrY_WkU_)c%QkW?WqS&gYSj=5?%j;d;fG8LyqKSMPx}Ft$Lqz+lx(Ji_ZPF~=>dPT_o z#$&Edx<3BWxMs_(UOT?_@3*;A&ofJUCA{`c*ASajIl9%In-ep?djEEv7Vr4idbfD! z#$wG*wtQhh`vIAAHY`2RF2J#N{I(CqHjjPl;PT!3#*Sz<>ZpYTQ+#PWI?Sr)r zgw9+4pzQm&0z)yW1gZ-s=!o=zQymngn)N}ZtNbsv{F8vg0lx97Y%GkK-xSJ%8?`}#kwywm8` z=(kort`wnL?b!d*f^iQ9PcGhOd&wg~;*P$3XS~$wVEYyAM#UBz==b^0>n>iNK4{SW z!$t2}s(%%6x$sZ*f{h=~{G?KJ+?!9E1UG!Y&F6jtpABBoy>Y8%r7!qdXa4$rvw+3h zyZ5a-HFVOek?U6PeK_2Ab8PsB11fIe&j&|0UE2M?@U|b`=-wu&$jLhXi-He)CPue= zQ2ylZfI(kZiQ2S@w}_#e6A~|$967UD&ycn=$_){|+OxY&z`cWmz2EbnvEi5Pr%xPN z@N4wWvyEQ99cA3rZcZ()FD~D0ywEn}@oyo9qt}OV=QgB07~*@W{gc>$^WJ@aD7!oJ z&)rSliJ#MbeYD?&DX+voX}Rdwn{!%Q!l#B>H=q7|*Rc(687E&HIppn?0bg$pkM4Tq z($#fm_O*LwThBtxW;STtcw2+&)F9d_T}m?&YkNp==i12ZnRxjHaKwX#4Drx z#iXXEgQS$n z1Hb%Y*o#|k-Uula?eP1|?~N^S(<0w!pcC))dU1J#<#Oo9tx~pqV^~>!ZqyG!!E1u* zANQSc@5huz^M~J(Hu+WDGi-E|%RB4Tdn;nfAii#7w-@&xJ|A>M)VFCUe!OgDaM%x@ zrPRGvsY1n3#{SRV4)Ndb2(Gv0#riX044XT6y#zrJ~Y*CQOyPG>kmq_~J!DEq28K_ac*Z;Z(r@}9)}>RvY;1dQw%?>c?qIX?x4yo=>VbcF z;;3Kvx0d$*((i-FKi>W0a^RjrGx_O(x3{D&*mkJ%qph|i^R<5Ke@ScD`p5Jk8FBB1 z7dd;Y)y{UGRxWDvFW%8e%EJ?8h*&Pc2O zcpi~{Zb2vAh`ZA_&l*r8YH#o0K6R2Co{oF)Mce9amNa_)qu-mW#N-zo(?4vtX!ku^ znN5*Dd@J<3@LA;^V@5qWP^;6g!L3^g(wJdAzAOIdSijGLI`~g(zH;fD_xi0%>ohVo zsBNdH&(}A)QDeT;;%U&K->=q53$Yej6aKu`3z?tRskmVK>0|zlj`#ng*U7gneuLXL zZ??lXx@xuChnin}wOZzHV@A}R=N)?N*l!gtjWK^Z_5P6qWolIqxSagM-ro;w*f?aD z_v;_@IU4=-@?9qqPqm6EwrJ@1q?W5fCpBC&bjI+F;XAJu>wPEn-GG%ZO%L~-^3or( zO4cxa_sY~lAzfFE9bRF6H?Lw#3_rh7G3@%Su-7_0tQB@{NtXJO zt)l+Stfhr*^{>{f+hlFuliw9Nx1;{t&%+GcPpmxuL(7YWKDheH8^bpQR*Lm%T=(|n zF=0vL`-dHvX6tZqqu-jZyT#9~SIT#8g<;_@2kg$A82Rq5bt(5QUhEnhRC42@pO<|d z*R#cpxm&(!{If0OrC-1Lqmp&y_tqv`mu(J+7?aQ;d|~m6+gc4jU-V|%jX@>a)NkPX z@tE0H_Fwy8V%^q$X}c|##=kZ(Gu~+29nZ1(Bl- z&uAU`;OWg^ld=DD|HJxCANjVPeY<4JZ{8PE4@K!y?9YaeyzucX`~IQz63&F^_B1^n zcgX+w`KEnmr|k9#SoLV!=+vq$ju#n!ajbv0wCERlJbM&>%*Xse=`Bwj6J8AUns_`T z=In)4hhmF-TJFT8fKew$w?6gZ-o8V;2i1<*QnApZVa2bm%Q#V}!_b+hUTF6y^vL~> z#-^K{G~h0Yhbw@TVux=)2agAY7CvLI}9 zROj&U6R|tHKHkJ1ANW#W_giUW-!`{e7LIrZeK54PRj7Po4`0o%pv*Lw_U#CO=ysA+216Q{$s zH2LR`Oi)k%J4SV7Cj^kerA06-aeY+pdfB*6KW4E>5Ja@|M zmm;KqnCq>|?0VAS>J0AzYySvJPyQ~ncHGey-)=N`=fo{dE5--6ZQAamJCV<(U+&!giR0^MeuWzq?YSf4HAlA|v%6Q& zACLUuY}EJhZ*A&3;k)WDJUnd*dF5(|v^%Elhh;wOb>Y#7LH_F&&FYibzwm({_gA@l z;ODVXQP<8#&)7BTxzf>acz$whXn3M%cw=z8QXyMkKa;t!d3(~zR>uN9+wtaS$v^nDG_Mai zb9Cy4LTl$m)(~PYry6%&uT|ysR$nN=FOzwB{I!P_-+j5| zlgZ_67p{75n4er~PKTWdA1ti=Ygj;IFUcy*u5shh?T5)d_6GV^Go{y9UcL8sN810n zJbbC`R+10b>*3MC>%8a8do*uO_>YCxF8$%r7q5Qs=CE2lF4YLy9ohWGu8fV<9!ByWj(kESZmyVbb9v?hl(ZSCx*6;dl@3}u{_1Im0(?^}YJfudU zS7Imi^;^E6OJuFR=}F(dxTHqS(-$KezI3Z$*%M_yYVm%(-p{@32cPZIeDK`!b3e`O zs&8>(=;wZ|j=lSJ<916Y&%M{cb0`y}(2`r?hnMc2*z`Bd<(#|QhJ?LP2S z`j{y{4!%>9{Q2UZ8sB_4B8;_jZv;Ngf z6Wg4+@r7-h|0}*<+Di<(K5s>vZ-iD8zl|E`9oX#Ej!iBFUyC}mVcAb1GvC~}Zq3*? z-yS`F`#R~SJz%4LPa689 zjcHQ&@WrdCO9Fng@VC5%7N5H%<;~dFT6Zke@jTajO@|`hAOHGZq0zRWu%NojzML2s zHT2otKi+xtr7dvOfU$wgYlrN6*6DCuiLpMmyR{ema!`Nw#HUGK)^Ukj!w#&letf!O zC$AwNtseHNeOBPfuWKA1@u-1m*5Vzp=OTvMw!P77^v|8Fmo^t|?cL^4lkj~Lns>jm zwZ_J zb!y>a^#|U2|IhWW1~q*9{e>4#Pl_H`IKJDWsnz^m+BUP${qWbHZmzW9*=jSH3Xj^?UxQEr0Jh!$0s5N!ey+hOtE&>ArZ2K zh$33Zo?V4h_>FV=d_SMQzu$9xujl#W`OS45_niB_&zUoGU#{!CUo+?25iMM_!<|ko zJuz@O=9vanhdvf*#=N+FsUZdjgeza5Y>K@2y_ zT&FJ2mmiQK@xJDLahl2mBH@AaJ-d@(#+IB`1repa?1e3B4NK8@lzNSNO-_?LMk71P zD*jb+sZ46|)|9molJ3(8wxHzg>Wi_uQ<@Qq&4v+`#2 z9{u+-7!$`4U5RGk8*quXOMA!Rz(utQsp^|T-NVJu+92t8!` z`NQ1+^-M>Je=PiA1y8H0kkD5cjG#?lnoO8S9qord3SH7<>7e&qJ!{5Z=6Z~g7au={ zx>bBNk;H^~Vn{>B!TUN0mM#?xm;Uliz=(dbZ>(XPMLy%kyIWvYzA zJ}ni#)TqMi!A&J4glgM*9Rgp4%xFaE;-&>HTg-?fy6GjhT3(cXOst7>q$>V^`+m!H zcasM?;6D^b-D^uvFm50cM?)SRVY7CcXyND5Id@Xtz1)_Unpq<*EIUr)9f>{nOS~3` z1VV+rkJm@#xjX6lB4dqcE8Cgkqp@2BPDW9TT;5x4*~~ZUj<|fEU#$=utJzE=Rw4`x z=_bFP3svUcY~+gM3SqxcKBBg@Z~OXlYQ}=Yf-vS)e1OdN{Yd#$Z-o_Ij+02Ag6o-` zeYpc0DU=(G>g-URLk&E|idJE))rS|tDtj@E#IE|!L+X8K(^t#;8->WR)FBH_Mp_y8 z!|~&yCK1qQ^IF*ss%2JM)%?`ar<}0%4YJ6_LM{ziQ+;QrC!8qVbjXMF1r6GMWrZiJ zJ@ZiQ6-amNI1^my{&1&?A05khGbGEb(=*!RwF(uz)d`=9oMia>lZ!h=<`>CYDxS1X$$urqBrFw#3?AOJL>VG?_yR?z*qCWZcsRg zNf|{gr4^%Safz6%lQ|9MKPMfZ_-MhTnMQ)lW2SzD3eCsbn92IwfE%Rkjtp*R&U%hX zSog;?L{sf?zq z58Fab;Fq&;y2ay_akl3mX3Vi>R=oQz?>|>wa@Fd~4nY)WIM9QR)UBCe(SW@v$?19Mw^IrEB^=tu6ZUtXEgKN)+)QPh5+$? z$cxB=2NM(c?}-@H9fNI-y@K5NFOSsPcHEJrIQUMr2#ZPsZ;D4wx)Jn4M%}aJT66hL z`q}X3E4)~hkLDDH=Cj0(Vw^oy;tKLj6*EP7XnltxE>vfb<|&k`&NwG9lc#`DNVvYb zqz8M&9HnekUavlO>Ff74b~jXxs=|>g$2&(WCO5AW=eS{~%7@S99F{RsCK$wU$+)pR ziGSaVy1hH;+73G$@nQpIQ!wogW8SOgc04bhb0!(~DrYFH*2pI2h%b@n`ExWY!!(0v z8uIh2q10_H@!J7tTGn$Z<9>}kzVw~40?a>P0i7bVsodKuO-e=flSb{Vf`?7&WpM(D zJ;Sx^>XnC>xT%6I`a=xdUo)PX^GI}nQ@eI%DfO&}t~`RtXuy4NdCj*csS8@O4BJX} ziy2ax=3c0(4~0V%19O&NXx$lu7b*lQ;a)=CCO@xGxI)9n7BML3%JfzgaqgAjt((If z%rEb9a|d4Bx<@K0S3&uyBSMO$@{?tnecbN^`NtVdvDs>6%$*gnHA|}h`J5VF%UplA zbgB1hor;IRjaSYL9SFnXQaA$54Z|v~FTk1d*(W})GQ3xa97no*)s>r2!-R9TybZo} zXiEM#pS(ku3{vz8K4>?@K|_p{d>V}xfj)kzm738btJ2)rpvtGcfa#b} zTc^b;Bcs99s(u)0_>h&YP0>EOx+-2tGniHTeU7>o>u3A~Z}MyEu^u!-h_a{mG)KxK zj<2j6=X#bRCg{NZ7FwY zPePad`;{-yzo`{?_V2$9#{AhX%l_wj9OBP)r$4V94Ub~`qkRzmXaA^Cra#(A{kVUw zb6Dj6al8wDN`Le(OvnDSzwB(T@IU*fvUNQ9YjWI!-4af0I-le^ z4GI6~->qTq`i$l8c9}HGnM;57mrbe-z&$|yt6ghtYGelccmHc|)Tsy7|MmHXZ>fCh zIwbh7{v0*8#scL7uzzizo_dH^fIsnH{Tm3B`1)@Ze~pLiJVn&rjOW;2;}Iu(19*^h> z%iNxeT+?^K@spi<8$cQSb}?rV9KVH>*i#YeU0zmlVE-v^$GRzwz=0h&&_8^9kkXdL z(NO*|6VN|3&N_mvssPPD{1Ol(iI_wr}v+9E@MSsia=- z_8bN){=@8`e|NPa-_u&l{K<}h&4cl1%+IbCoDS$_-WqvC9zR(hD%sRuS5-p>j5^oI z|S@j@a`Kg%~`h(E-p1t?w`xOXgFRpp}z+i z7yAjhBDoNndt)Y+ZgrmE6#j|dE{r!vM|gvs0y3wamN?OPQq(^tlk>wXS@ZsnJKV`nU#fOHm?oip%?yTMOEl z{Bo-=l}VLsW9^>Y2MyDT1+(u=lyV^-`F0yFrCV3O zwf5b@$tg3Ok~-^CpNsS8GCSG`zxM7`ZMVAiEG3VcWNo4YlfTZzX{mxc9~DmL#THh| z;S#>mzU+uPNxKx>p3YOD40l~mrr08F^z)d0+i_!lkB%$cvF^}LX`=i>yn>#T3e z#6|99&cyA`U#v!deFuASBUx z_J7em*KFbomzWwxi04O?o|D$9JI+tY?;P)DR!};gp{Y7kR8Bar6af3lc8XrC8TPTIKFEbRI) zrH;)DaKz<+leMfbw!+TkBRiH0nMSh>Jg16+zgcK@V>U|?aVI!NVqE9?zvqbHgm;wu z;llS47icUgwhx7J2aB_yn53^&a?w71Rug$k(B!c7I4g;zVv`!NqvaLx>yms34g8!n zb9J|&_$))w8KLyt1oS}A$B9P4=-Wey$Idj!3$i|=Tk1`hMikj(&UNUj1%+QMX`9iC&e@3%$qivNBQa-ZU2>ip4kKxF%nZtoo>s^2>~TJPhu-TfdH!*Lx9X5bFEnxryONyIuRUj=^^sbA z56PWlb??g$*||KInGB^#8SFMh=Kg5z!rF9urI}#49h7iB={kMK)Y5w&Y^{W0IP!|N z`**1CyAw#b)fBaBK4#^>^}Cv4Xx9}s|drRf<+#MA6q^d zKbZ-P@L;Y`{oYHbIwEw_bIFXkD2Yu?=<@#j>Z}>$WVO`VEE9tLr_p|alZ9{Vy2VlF zi4RQkfx=-b7wWIAFW2{8Fnog(RtrthNPJ|1{-%?cXmAHEJz*xwbvo}0OV!EP)8!gW zw1&ji(w&QI*0(lzr3|@n_6D4fkC`UDF*}rL6y-;RQzX?`F%){HN%kE zeKsx@ngUw$n-1(lT2UNp7P^~ImH6b%R=E;t(w&7x@q2jGty5p{o(OHFr!NauC(XW$S?snCB+EIpMwB^$i-Oi1_(B!cTrBVLfGjM+8N}FiRyI*Gs=wvFvRX5NiCC zoy}J4MvZCwviE{CZOZqNVfb!))2HgP`BW~tmyhcD;+S@8_{Z~aa1u|YT(Owhcfzq% z8OL$&5hyP2JZxH>u!fV&JWDHNBA$(j-*Q^a{E2RU47 z3bGdts~mrj{0&B|^~yRUymL1p4!3Ol$P*o5of4`NT(4EJ$X&9*#=x3(3zJe=;iXd! z_op!&j)QGcP2#aejP{13=`RFmmQbS9SuK`A!?J?(QoG_WNGy|-E&jQ?kxJ4^3VYVK z*wns7eVJ|C4YlwV&s8SJR{|ws`zus3mJNPl7Qlq?l@-g&G zxj;CIJ^F^AvGwRE^E^^zRD5#W?!>Rh>r(yn6CBv&Ij%k>NY*Xy5ruq*L_H`z|J1%Q zWG@OzXV5KI>4-cVxAoLBT;?t^#W`pg6NS;>uQ{DO**7reMQxVfxJXlp~l&Lm#$Ulv0Q7esp3x>Za{}QPb`1WqwX|kAk0t^URuOc`?PfJN-{{(Irv{Ua;8$G|HycyoLvvF> z&r2Q&zJI>cDf^kg6qBDbR;SG_sVn~Yd+PB+I6ValCHVDf%5*O894P}%xMK#z_=tZ# zmE@A9Tu<43bo-AhseKvU7mmzLUu#0^u{KI;kLQ`)O6+idd4`x=16xR(9XwJSRar~h zme5wkiJo3%d#*gigDpz-5)@@CWl`4`WpS%8T<6KQ|23hb0xRH$6!v7fy10j3`I$MN zi&7?rAN#czr>Ht%^&^CnibaDnHO4HjmM-N~$dlFdDQE#7VS#XDdceys*O_061$B&Y zp6gK0yGX|LNa|V|YivxbgMNXTf=wmq-W?`JY7JcV|=tG7GvyID{e zuIEM7e3O-8L2vJ&qvRdZpidW9-6ZS~*P;xrBbFhIN++;v`Vu;#)b=WOE#J`X=(~nD zSl3w67R}#^!Hnf25#3uKJbhtecl?s0GK7(~%t1c-FNaW(8pubpjnbHq+gYy`uPCy> ztJG2kzC9OWu-R|JSJA-?KCpXJdet|*I@97E_CXU>{(4?BO5+ZH=dlM`6R(S~OEc?L zaP5-uCOg+_w4}Sx6Kt;LhCJG@oLXu8HTDLO4@op)6>fK;qt{;`r**M*7a+xY z>yGTHRfNhxJyXPV{LeaSEhL`Jzr?1C)DZ1Bfl7|FojR@2y*g`;;ga?BxanEEd$Z9h z$Z6skJ4#782GSMtF&`O{RCsC(fxY>zq&0vS-D8w1l;}6WTo69=YW>C|lQSNXKLzzD z*=hVe4XA=t%d}69g~|Ac<|nnntb*%TM18^#Q>Fw+akI+l%AvBsZ*8sSw-s%eX+EL&KOXv zFE*zRy8SX5**sTf8q|)NRo{wbz9?6M5%X9I6u=5USl`hbaE_;e%B$IB)pPtBcah+4 z?<_lp)SCzko#kzU#dUu3er!OG;U8uH$o7>F&HsHP)vjENJ!o!N<*WF(I`&K^w$=F> z0y7zhTYs+gY4WHH=R<0LW_IQ!ZkO$1jFDOrpJ{hG8)6NfS%f|Eu>Qezw&X4=;%(_@ zu-Ye@+&ekGkT~fXrsNFz+&l~|Wy+!JkW$qTxWJIOXO!!6R@t9SWK}dv;iI{WRaE7c zjr(I>gRIkfO!Nw*kB3LU-wR7kp_*ag$Hl4am)gYS^k_DYMYw58!TE758NcigJ(=cB zJ^o_08|^c5y6GncWf`lePq{SvW!4^zT|JpkpB6Xrx|gEA_Q5U}N|z=X-6XAcHQLz= z%c8Npy|35SAp4&K9c8ab53;PA@6T*zSf0Z#pYI;zv4)k4oiq1tk{CE^uk%CUK_kkL zYJjMMHhzMRpRD>Wx6cG~<7m*N=#0%p^@OZo^o`5If z#qi>I3B07Ju&9VAUQ|?+AW9S!6BQSg5S1hd6GRAjf+&GNAQHp~;sgnTBvF_sLc|kA zi3B2%C`J?~k|!<@6BZK@!;6WE5yXgMVq)TA5@M3#!r~(0cyUp2f;drJOk7-CLR?Zp zSVBYsFCi*HkRVEkNr+2GNJvVO4^fi*@{;6TOOiK}Jg7P?Y{g;i?(Raea4*>G7 zc5)@j{$NXT-3+JFCU z`E>Vc)5^V9d6Dxo`tf~OAaJT}(z|AVW@R{N_hZkR8=D zL2kUFi3XUlP7~zCCCzMr6*;v)PSn@302nbr3*^IAEsza2wJrl($gk}RFrlS(H^77G z+Ccyd_Gp6~2+;u{ZZdcRpte*xe)ZT&)k;bQbberwV{2e8|QKFDo6 z25^AcObkF?OEcI5Snat1$Z0Zb3#2f4_{yboZa`{rQ)4^5c=W+4j` zfP<7QyZ{CYwE+32+F}D>pLvTFkb5ja=FzbPc_)_qrN9B}G+Tn4^To0qV4M?H-vGWb zwF22D%?jk2PAfWqX?|LPJR@QavJA=kHNY`B)*!;b$oW|If9iY>?~3bp|NqXgO-0DSVmRt#X1Y1`jiLP7#eqCo_Gl7v;*1WsvXE3ZFUj>b8Okg0K6e!{~BNoEBknWGj7-~0gTaSj{x|B!U1Fp zq65ek&JG|`6gYr9@y4MFV2NXn4*-skbp#p0$8iJThf+t79VQ)rbAuDe49ZU40560& z(EzMa?Q{&_gaxPHjNmK`@PV!~$OduFAQwD!2ASZiGspucT|gEva{)QvnoB3Z09`I% z{NHss4#a-ED;W3fT)~*1>*@i-`&X`XK&+>BO9A5i88PXi!U zU-AUwbh76(5Tn~Y-vjY^+fx^a&4OO9fw*k#6%WMZOs_H^9`}3E0>crr0pc#L4-$yE=Y7C<>+1u?+A<$7&VKTd24k!*Ef8N-eC>hQ8tx0m z)f(RoAf_(*g7K8YFA0dHdVWGc9F6yD0%B;39}0+{U;T`M*vab;#!U-JSf0bqQ*6#&M@p#U&09tn&9Vxn}Q2oMjw0>M~#H&7jjgYN@9 zz!(^m1jN6KLGD28yBq|@y{e!vAm+^m{f>8+-vO~s>+%o~=b|rP1Y%s{Wi=qatzWhP zVjFib7}tz~e*iHpH5iO%9l>2dEZYeNoE7l>Kn zp_D+pat)mVVpU=2I1r~sL%|qD9|p!JxiCH;Hu;5taj85kABahx!Z@saI9wdvNF0uC zVkr&*4pM*ziG03k%R#gMa>@<(?Ff!y!l3uN*f zW(PBviAzWVvr^gl{(e~dxcS<7{k8UY37%P!H~b$wO#cVl{BLja|GG`sKkNSe?D@ZQ zd=&qk&i|kK{`+)+|7rd2D~o^k1aArOUvKuG+W+e<|5sZ6)5lJ62)qNyQSg2IeIK6x z>q6>N0)nRxrU?A~??s*+Q0DBxq=4iJ0WT^lDXXZescUFzX&+2-cQCD;v5Bdfxy65a zc?iT3{6Dn^rj2uTgOKNm^CBnFgX!G@gCLh7!6Bhx2iF=yqM{)&v2pSLzQ+Ve;z8BH peMW$$RPx_62;|_J)q`~n@?t<Nqf(??hJPSM3Qm9%TCZOX5=ER9t^bn}Nk zy!VHasQj^8ZoW0Tv+}X`@4flv=wsE7-E_+>AO61R*2eokeCxg&Eb{H`TWW93#BzS<=6!oV_G_uh2d z&84JqNgU;I>%5PD{Nq2wuYL~3{`v8{?7N4yRG*2R911Z!u9-BeoA{TSG@jEU;9kz zbCv0|>Z-1;S}LwOl~sL>)%=HjBjsKrz&&-Q$S@43qXT_5WYFi9tK@g=1`U-wnNn+! zBRn+;p6kMMy^rU-yFcsZ<$c+;WUfzT=Lnc<85jq&dX(}*ov9tsmXd<7~ZS- zL@(rep(VXgw->61P)QXXZyPp+OTl%{RQf)uJ~^bSN2b!0m;czBO5aM~CZ^I$d6f62 zH{?-T&6D)Hypnzg&)xa6zxt&peY<~rCownjdo{n;lk*&&HZ>Nw%g>eA{me=Dn3SM}z9 zYOCGq)vH#nSiO4r*s`Uom#kiW*6P)ZR~sa*Wwm^fS}M`__;@_-qZ=0eG|`P{jsJ<) zv>35xqbob(pfaMT5Jzp-Sh~m6TzNX(+a6bjFOgyO>4- zj*=TiBQVj|zj2D++v!d3@Bw=?Uj`9z`F(NQ;@0&m>maWK`9FjzQdEqV4r_ zhf>q&a9&RBRkwZ2h-n))i1F^ z@qqLSz14V6rn2&`epEe=rKcu?tPw0^O#pEf&{?!V&hmUjoqmk2GFso~nrWxKq?JF+u{eC?S%s!?R4oOG}SG-R_}Ms z(wd}MXY!ful@^02U@>t1%YCSs)fDQl0R)%q6Y=Gxec8o%TOC$e=oiX_94!$FvQp3z zgrf{B6jRxEG0BajRU>OXV_<3EB4Zs;xE`pirRpH*Vnq>tw>d`Ja)B8W1$vDZauEQ8 zb%&&4-O*~_1va1wEw+j%2zU5(8t(3YL?dCeKes(GsIf=xd?>3CvNkmB^6D+wCO53U zZxS9rj>urs6SY@!KGCE&s%f#ALD$Ns1*yJ3CvH zb9Nxav`sL&l0~teFHp`}ewQx-d_%Mzi1u{!18$NkG_L|(672wrguS}(93DT9x0dT_FW5RK?j29@pUtDCa*<{6+sp{!;g_UomXVdECk^<|lZ53oB z4nZjO-C3;@QTyd?NQ-Gq#v#)es9tTm+E})-m}`+En4HRnm{51-2rEMpfL9Vq4~X>u zbBjJ-PMrU}tyTlJqSwwzOzoARSZz4ww%au^uN7PptodGBbPq@VkpnC%!)dzI@^-0D<*S#G1U4LjlQ;uqN;K z+k)o4U!AE0c*U=O1QMgR^sd+qrEA^FG;=G`5qEaF+Kr~`+*#>nW~fkj(P`6}FKZdZ zEM4hF80ppN*=`*avpGEr!AsKnpp5G!g*s4_au&$@+sr(_kZn#5^TKeOya{JtwK=)B z?T`_a7g3J9%qewX73)M=Cbkq}jZ%qC(i*W9i!Ga6i?Bid$*6Sd@`j`?@XAb}s)Pyv zv4XX<+yW`Bz(;A_4O@cOS?YO|AMC!;vL0-UpApcXC~r=lCLnF+33aKpIeA>qvRgH^ zIeApU`sU;q&;0&ai`}E`sqWP*bMgIg9t%c-KOd)MFfDAi`K^_<_c6!nq6tSYMiBSn zvi+1I0L`CmT-gC{@C9G(MJUH5aaFZ(kpw>Kex{9LgT(T5J8SLkzdVIPyR# zzjrn|?gIxZdoO5#YqnfVns0XF|56I@+a4!daeW3*zv5dQxh`ZzKF7D zHDmP`N{(4TmJ8K<#j*HO?HMDsCOO8yL|vQ<1G2_cwlIKoIv6CjsXYNWcObRk*2Vc3 zi1Wv8Aed7GK=Ae))+Et{Da1Ojc$PoNDEsPx>g!aOt?v-O4I!F0?PZi~Ota&L7Dw?&bA zE5qeNa^vFYL;(FcJr`|Gp4Ib$&B<}`ZJO1x_PpZSo0G5g=p597r-o}wQfRxzt$941 zErhoT;U(CaYh+*>LiDBcL&g`6175rPCUxpioV8_#B>2fVrJrU&d&`-uMnGw+5fB+; zd5e~!WV@QpXJ+$XOq(p zn?+NZjZ(!SsS98R)E4zNaAXS$=Iq+Y_y!?TiKzcI3BDpUvJ~|=^1?GxCMcwpwP44P zmr?tAJz0lXW{uhx25PU(Pwh2PyL$5FKBampHNK;Gvqhi9>?F&w!cP-6f+Kv4@Nrbb^kD3krgy_?(|clfVfv%7+nOGV z-J8=Ni```U<1BdTPsHxr^pmk$o_;EJ6X{RJ?!5G$!P3)vV|PLNQ?Xm0-Uqi&KMkKt z4|KOMVe>CeROvh-(Tw>Z7uc+j`znilf^W-;`nfI9zci=ih)j9{1f;T7qH zgdc5hi(d}mMvtdstC_LYyCzk2!nEHUfE30UI7d^c!24QmV z;?2oRLUfROQ8OW`7h7&|Pwpk}VlVer0MKL&2#HuP;YxaBmjxvW`ImK};$>OHO|sM_ z%PuCT)=Dp3AmplS*dCZG39)(r%!{q5?o|MgV2u`uz1%`%GPT8Osw?g#=B5i$dYD)9;=H|_1y)dkd7@i&~$F;=k6<=+jX_VL& zu2##Hsxbz-5(NE-`$WLyaPb?Si_EyWA^OM;-^XdC+rMSH46r~+miirV7si?;Iv zZ|#)Zi`49JzgdRFnuP)fn`H&E6jq?JxH*Gy6)}X%5UvkD0?pT_yrK9>R=IQ-w#Q?c ztdtUDSqxL#Vy76@7z%QJdyc{{_v{I z_i7GI#y5HmsO4Dpha~P^fjQ}a>VynJ(#>{!7V!#kLD|imo%)@goLqR&@E?#Da z1(=Jvct2fy%Rm>U@cbOSer_M{9q8jRhSV*_I7qi)_Qr7*KazbRcI}|+Jqs3K+lW@M zt{y*sPP8Iz4$0(nN&q?FcfIa1Pv+?^n&g>x7eigVCtEHNLLELzhku?$y2nY8DY9Rf zr^iPIdi*pikz0;6RgYVB5*}=q zEp|(Gb%vc4+9Si=uv;Rjd8?0K?6wjWs;IanTG59})Pt3ItJ>R_zw&BrD*x82wLKYX z(Lz)o)S{8RlrAT@_?k|$J<_5|OovNpC7w=~Gr1R*w!5WlKGM8$yXD3&8HS}(WT6cv z^Aso&7fmPKa>qX52+fsL%R=ooEp(Ge((StHw%FNqYi;dP07V13ka>Nn4e+GY(8&Qc zluZhHJL&oL0|-poAx(kPuETO`68F9jTbXMl{H^3K@YVslQ}m zSCSZoM!UludI)2{lkr2@vR&v24Gjo_iY?(w&R_{|xMkB}6|cBuh2FA63prF&%AcFf z>))k@P2KvQdGwZ9ODtB8sxXA&8q`V&0FZy$@N3W#ueh6iU+bh_X`C#3evR_!#flZ) z+%o56lA^m&56L~9r=mp6pN4UeJ1qqjbOXnr&NDBDt5}DyRY*&b{kEt2V1p_48X94< zfEF{A(mld3o`*M%j?{J1dJBNHvGG3;*3$g2G7RUk4e!-5KRM5J=W6CVnYL^u z#9ruQE}d&!t{j!iF~YuQjoAe7r{}r}ckXT(heM6aRHa5SoxtHs=FHRKgnFsqpCc!= z((BwJx1}cl6xv?Py(Pq5=zcB^SY73QJ}y=UZCuYFQ5V|aDj8gb7VmF-r zvJ}W)k;?fXYi#;2G25k|iQVVp^mnCXJ|vy-sIPgBT4D~!gc&63v825ADh2$hIB-Ln$pLnS7 z3;7FtJ344J^6}`v_kw=v)mS-onD%;eK7Iu*9AoJ@)W|%MpVCW|kjK}{dJdKwOV77b z>HFJl1Om%|f!_-KIhl(J{*%J93;r7II(CzPJw_OysM=_TqW{^#zU{wK7-8Z1L5r8qQL??L7e%{p+?uticj|^6+R-mH|JrCsRjMTWmT*T@3Vng7O-ri8Y7E@Eng;SxcyuG*;oKMI2iQ56U- zY1ui+mb=$LB8^G9j&29$d9he5A$H(2OsQxZ)bjr>ZKN>5s9 z5FZ3gk6yOolo7KktS-TdW^K^1G!d z0Oqe2!F=I#1oLFGT@7+suZwa_tk>f@KMAPwz15&HHE=UBbPXabtMu4YJ>Trv6CMT{ zq_K1ZUDAY8`0YZdug)XVk4p8l+^$}5yIyr`2CDl`Ko8Z4Jt>dKtuhGPSbC)&%#Q^5 zGxYKWIB+X6TZ{h0y_)_e)bx#0YkEBJ#NUi%Ug@I+hGWD~E(k%p?MCHt79%V#F>O3} zVjuLOQkwZYROCagH=I!P==#T~9_9ju4;ArZW@qG68_HGLXGWgt^BKug_#*WgjP`%b zd*q!xA0&CWptzaN_Aa?G&=&)T$suqiqVDT&8);i=w+FsGpHL^^%KNk+{kPBsKpq_( z!nbSB<))eL2F3Bd?3#Skb}|yl+;OT{9LS4UCWLLR{gyHAsq|mNfU!EIPiO;jbSnKf zv3png-R_$7D)-KGm&Wa?^cuG-eW&~G^j%Ee-P(co!-o@r&1*SaVv)44sJ_G`dXr~g zbrSjmi)N&OCH>TaRT|E5JpAy@W1N-W3D#T|DLKfg7C}DW*yN+PWIGuMFgljLNg}0Z zxJiImTs;|pI4KCR!T=b&Z!27TjJ?B;zGq(c(b=E98((nuHjUi(NR|EV*u5=%k9&9e zUN!rk^lk3F>AOM5_h?6PK5sMzsDeZWYsE7el$F$dY(eul|0{_sNhZ5fCK7RBT(acWo{7{i?(~EF+aUWqY@vw2-skAHFrlNuqBju_2bJX(r z`g4u};9)-9eduY7!3SFEpUwxpt)YYck`+&kZ>qh|x0l_Q~jitV0V4otVJ_9Fv;IZaP0e@7dM#O{%pk#(IW} z@~$z#JAbBv%anHkM=M>+N;QLL?+8!i_MTM#*X$*%CJyPlkh1gtO58f)kiUCze@WbC z;@E@g#eI{wjl{7FRm4dHID|z1GR8Vd>j#n0Ukc$F!Y_vKD^2vL5Pq5PNy7Ozs850u zdssz%`BCC>;&6BD!TgKF?I4box0ml;;?T4uO9gLa`b3=6LR@l-e1hpE+I!yGURyfW z+)_Fc;CPbw2SWT&;tz%R2Z=vOIR6pq!{#axv8XRUjw=MFW_ddI;5!PQJNeeB>@pIL zV`HrI5}@jE03}-tliAphnZVvg%tSv1JH-Sst{<~xDm#yup6_)Bw`+VqR>v&zX~o)hm~FsL0?WUtRTP{d(~|)qAhrdQQDr zz++MG%Z)AZ{~_Db%PDONCSVQ z23{oPJ3J;|Ao$av>`B5u6T;6E{@D=z8sT3I;pYhd^ALWP@GtqWyPxL?)%{mQZZ2BQ z{|j$SqZepdNIzJba`zTvNcg8hO|Ovcz7T$y@TWugCBlb8_(#dVu~+fkyixJVQ1Sh| z{zNgFgg+Sy-AnjWA^b_gKN-S@N}BHfEWG^!DcgHh{~T{r{d}nUab6F`+cZP+M+x5@ z3O!8to)A7t_(wzdLBfYZ_z2-23*iR{|F{oN#(!SNZ5MuDn#yr}RMk(D{BA#R#|Zv* zDD@=axB2MbBA8ib_dVD>ZRI)P>$w-v?h^sVPZIuqU*ZtKyFx_=3D1P^4B;OM;a8~j z5}*BLf*1MVO9b!q!50Z0@WB@d4*B3of-8OSd4el^@C3oLeei1pM}6=)f@k^Qae_N7 z=q|?*i$1tFZBD+TCtdpkp85R%_nQH@2hknQcDsGqqa^&Bknk|!Ykc&h1pjr2ew^@c zh42%E-|2CCjNk^J`x%03eDF9yyncoJX9?oFq~LP|@xD^GulCdML4vpV z*dqi#?1K*wywwNqC-@;Bd?J) z5WK?&pC-7?2agfF-3Ol}_`^Q~(C)jSaY3hdkzABKU*8j_<{dM@9dZsAWZ8 z)$&35`8P^AT%B^)`*QaY{9KrF_Y!`rn0|ym=)pTg@B==0kl>?%FlPw=fN$|wyft}6 z75^-8>x(AypXQBbX99X3<+b9``!K;veU(QEvi~7MeUKndLJB@W@Md56`J0m?RWNc6 z?$kUd<8R?7PnNHc z-u>T?J{R4&BmJ@L^YL3O@x|Iyaf15=w!0ty>=&7Z8c-f5CCq+4-l6(#-%>g;@OpRV zPgS1y#?P1UMi$%Ay~iGFevFLI)iBhu4fjMTGxgWZ);j?$Y(}z4AkB&#PnJ@99xJ6g zMJdmeP8f_pv#W!6Tn7Lt?9R%a;-KfTgae*A zncPk^#j&ia{keG!8F^WIlcdjcMhJV8e3#)38}B*jsjsA6Q*T4SEH*Tpv`VdV ztKN!RwN|wfwOaX5Iu2&t_{Gs*ne)iS(SOymhLWf!lkWvRaSuE>gmF`Jqd`AScFTs& zT}8+4m2T!$$M5d3ygHpWi8if()z#cNv<;5ft*vabU4aQ!CKMQfE;@kYfOb>gT(yhg zU#OL4j^_ggO*VmF6Ocaq^EL@o_h6#p=!(u_4UX9fu8+tU?x(NpZA^i5>@Nl&ra0Tg z9g?kN$Qv0$=4>dCA&14rC~1d;EBUudW{pv&JXsEj7SEz(SerjL1GYF0rlo=*%hTx&dOiHW5k|p5{nyvMjYM5fyYKz7X zWUbq@F%ET@>D5lw07GHJ0v;$p26>2LH}kmcn%D5~H8e#EplFK85vaj?Lw}ppfT5ap z=MsaE4jurPi3p6?jX^JlY#TrkD%NZO53gks(xE(t)EV^s3^n8&jyr02%b=+2&cdw# zyqbBc!q}W<%EAj6SWE4h=hz@BK#~EP>cRx^^dmyEzfu|-G{hl29vJ z)t+O_q|%XA&agSj2~`f}l~qmEpRb0_SqXAcIs*eUx3jgc3kV1%qkKA<(EXjwQ#Um; zkzpU#qG8wEB_uj-f*qn&*lJ7`^~t zHmDzBd};F(#$NM`T};|8Nb(G*JcqHXJ*Gidz3KWz;cRtE)^}Jr?qp>l8OyswJOEp8 z3gb}oly6CHK+mbA9nkS8hQw-+M)f$#F?S?M$&jSV)Qgma94rahR5dRlV{B#T_#A%0 zuMmqB81~VvW^6;qyjPUexmGoDYI%wzaw|BeUj+`G6}=m4(CGr!!oh;F@Zzt;x-0=2 zkr}j3*+nDA{OgXgkF`sWEFA+T5OYI^yRf^L$1kX|6=HypFe!r_^zMN@1xP}+kck7hw`7f z>`#YxZ9hzS(`7%MVr*?lSK$os%qM>2;1BLe$LYn>NM37sYFNbN&AIG9@!V`UwA0Cd zM2|O-2NPp@vGQ`DavM(u!VFl)O}4`PUE{6+;!jA%^5+%YIP}7(HQf?iJK0>shppk7 zzyZ&0(wVGmOSp#!2rPg*jyC8ld>e}gq%^&Ut6#{gO)|R;V4OHNuGsOk8Z?-fD#fj3 zeUW{3NSJ%E;-_XMKNe}S$~Vz(u`>nPTs$x0blz2dm#nJ-&me1?H#fQv6X?`+%q9>J z`|Hgr`IjSQN7mbU%90ndQtMYr;t$BoU|w?p^GM+plb;}tQO+@>^x{quCu2YMjv|gX z%qRACyq(;Es6)L^RJ0MSnqSfy9jF?+xz|04S2fW$vcxQV*JoB?#WUt=v zJW~wM74r^{#I)JNqoJ5PJQ|9*!z1Is84SyoSc!&83a!^7&yWE~hDP&DuGz}p6g2OQb(utvf9{qUT6 zxu2$l`Jh+wKPX1#s(BYF+=%9kj5kHiDL^J%YmObm0~PxWO}0} zgWJ3#Q`N|5R&Sr?kLJybU;Ug7Ow|v}_AoFz`vX&d;{(HWh2oR_c~kE#`}bEfZVhAW zU7QxIJy6Y7dN$S+3+o9Vln#ncDiYg$ukbaCH}#P! z;_s2Wp?I`FxONrhMRBDd{;g91#jvK|Ko4*gkK(NX#h3I^Tz%sxMoxp)2T*JWF)G|s zV@wBR&U3?z)0bJ4is%+R>DkH$XYgvK7?42>&#XvBg(FB)q?qkv66eKc0yI2!TeLYf&sBYrdJnV_+$wGuSeu`?hLdjm+1CTnxh zI3FusIS(4Kr=1BkN{J+=sIfPxZKYgUAkNS@RJ>_7YhE-OE7qET)YhBuhQ`2&CjuJR z_t98;<7jN6=+5HAxI)&RLRP3gB`d~LT+B4}So%dYtH;u(Fh@L=ehJz0F}#E&-)kx# zk=BD)Y4XMMwL+GV=!~-+V(mZ_o)}`VFV%YP4*4%qT=@RocxprcJYe!Q4Dv_d@hA|{ z=h+0|j1xTPxf&M?#SCxM<$5tgOBP9MFkGWGM6~KBzP)hgUKP>M+q}QX&i~4RHmJXU zDB%Ixpid_w6btk$O;X#F1Y9rFOG9KU_(l?vt;u_MquO`z_C~ z!Gk@QaUQ=<&64Ns5I!<9W`+xFSM#six(+4+9_StiFXC;{O>)p~ z=KiEtH9RZfiO;;9{0iw{DX-^W;r?fE3;x?K8XGZ5Em*l-$sbCYBPuss^#l3VJ=1x4 zdNRh=?K;xR=;XD+H)@@(gw;)HT9eBew{S9*CgZPxdaQ^({D>Tf{Sp?NP$Pb3FvP0swD*2-dPEBF(L zs;t?$fl}2fedxRlGx<;e8^xcUZ3f+&+uXKN>W~&IG>bjT1U6C5x^(Wsh7=iu}ECse&!y z`x6ddnVEETUgqAzJyQCS0NjYOj096cHX_xC$X#QmoZcdxafB8}m}|QEc6C0il5pP& zab_s#qNC}W0#sP+5okejb)+NQxrvv()G@9t#QqHjFQdret5@5HCh59+08b*jbPjr@ zFn7MClGKFUj3(-)Ev!-Ro!J1^CF4>DF1?RQcOPTe;`xTO1rJ5!h8QtZzqck!g6wjn z+9SkAQ5<`O_@GwlzehrR2|Axch@*1|adZwLj?N*((K&=TI!K74gM>KxPlWiIgvhL( zLx@WPAuj(m2@&eUVm(NR%Uf=nw?S=VhBN49mNDt+}yl^-%0sFSg=Xz@q5&4@;yRYjI;| zmKP}$aN%oea$k|aQ_>vK})VTn^_GG7qcgjG~_GvTY8qa#gFS*#Z`xAj^O-gUDD&gg`6rMp82t(4Jut+`=FX$K+&0Vzyw0s-CnC%#3S@^K zGBF^tStT-N{)orv?9c!i7qiM@5%F!N%r%5idiE|VR9g?T>UHyKRsm2t3n1eV0*Dzz z)1rRn6%WlTjyQx^0W|LhHS@}YaGKOs#_=IZfwgOR*j%zX#jQlM<`mxNjDw$92x)FL z+7|Z-_GVOBXD~|$8SX0lK|9lgm>yj98_Tz~zw_=jx9c^CSoVA!FOV@uUfgq z{H0jNj=(CSZP9-g%YeYFyAb*dO6QiRlRS;R!{W8{o@j=5v3Rlc=ZFYP!?Of=G46g` z(HQL*vncnMKdtpE`C0%J1mZ&60`(;L-m#I3ENo_79R2UYKR9l(L>yDN$`uSs6V^Gi zYPe<`y51RSBrMkdnX7^*$6lSRqoY&n*d9TLmrkzWQwp{%cr4bcye_F{Uy{gt;J|y3 zK8$Jk;8Pa+s$#$BgYWK?b>K~Y5LTpTljp6+9wVjkR@mgfG>1KgHhN_TS*xWDloe|Y zj4?<@22`&sZv*Z6x1!yrC>t1BC~LjwmE~=qtbZ%Yevz`l!W7B|#|*jO?Bxnh;}Pat z>T2djW`1cH>KLa=ncY%k3TCg)RA4MIHYqixuiI&8p-=n~{On+`E|>XzB56w==`Cis zIU6PBMxj_>^G_tb3&freBFG6nA&Wff?ljLdhyk|yZINr4ru-ep^N_19J2ra#1iO!? zC0H``2v&wq5xNN0A7u0}{!gM)EQ0?;r>{k)3`V6>LGI~MDJM}8x7P)G4?NJQ7WRr| zLnfd+@^s9y6cP!rMcCjdD$mCo9IWQ~aDyuzcphz}Yv2=v9&N}Nh)&VSM)tCWt7#Wu zOZ3m*3(u#+^O)`QkL1;T9I)FkmFgQJgx4XsrJR~ummF)L<}2`YBYoNe&ot8Cv%psx zGEuH!lVXG1|FA*nt~B$VsJe|(p{s17Xkq09r5vor#3I@B7AJlQ2Re-Z!RZ2$Dd<_V>MG%FO>SDw$Ygti1D#R3D()U+N)9!qdv=gCx); z{;M!@qk>Nq;kL#vm1eR^1L`7yz<1o zVvTmf*K`+J5bUgR>$G>@;;@)&^rzFdsTdfM-)T>~FD%fBZY!G@k zxYbm^aazJ7p@KK*Tr;+&d98=*P7^P$5wm{^ouK8@pmHlA%rW5AB4m7JV1?bMNdGdg zvZmTlymxc5#8oegqM1wi6GcAuhO9hhW>i;Z+jw)rKE0}IGqj(6QqbyZFql`{$Cqct zbMG8PV(X>V>%JWSG{08;yQx;D+wvDg4C}uDupS_pc?}>Asx1!ysh}Br=Yn^mfj6#t z47^cShXx{MCy3{Z2&On2Q4dLlwyP$!JOy>TEMMkmoV!{T4Zr%3Wa?9u37 zm_c#3!CH7Id+4g07 zW3Jo3JLgIBDKvvbi5YUJl9Vdt2lf#`MS^}!>lT0i6s!4)& z!6qh_)`bf1%a~#OtMB4Ejht{^$LX;Gh7*dh*r7~e&1cU1mKCcDTY;_)AcM>X z%$$-OfoKzfm@o(ay6>cVgCsR`%=3waf(Z`9d65~}*^n!}gqme-4!I4=%K;B4=bdTR zO}@itR1`UVyFwjLFwJZ8Ov&_>8}Je;z^5kJ-B|#Z=xbR~4v&fq*aRPaP3UVhx3Bcd z`l`B4)7Oad{l01+N9}^BiDYhHVbJQKK-Rg=9>{4TD5J|e3%DZGk6zKO@<6vh9D^Q< zUse3YxS@-X7j~_w3{ZB_MdsQ*h9Kf!LKgvvUaN}{T`bS-BHZEix=39ET`Y$4jdl?z zi!S0gC-~%P#kF-bOUHT`SYN#~_`QWHc!0yz!C9d1=-eRI_qCPJ8 zeAblos-N0jDce&!HgT3BfkQ-u54_XHW5dPKQOGEjY~orwqPN2fL5eOXOvcz(O4t%{ zd`FO5nhSeg{h$MHe1>dCa!<*FD*(UZ(aFpZy|u zroy{_`8&DEVLzb*S59Y4TJ~Gu0@J9NnV?J#W}WU0lsiOPBR{5cKDF(9!pm$$!Y8zI zm*E@95whfVP9ku@lA>J44ZY)$+i9zof9^m0=7C!{)G(c2f@LYfgT4EHYJS4@Y2b~I z>^N|@Yu+9jJW4conuk{Og^_T?+qZHwo~IRG;mJ^8(*S=i)Z^ct8K?(7wYKye_2}w9 z4=uX4ptX89Nfpb*j|0}RygpIMW43HH2q>gU&YkPSI}W(yk$Vj8yRO5-4eAC}w5Y*) z>SXzre1ULVdaL%cgxLK4XTKO3uG${EEd!F9-|1{UKT@Q2xQJV5*Dc8fc2SDfmVWSd zzQ|F4JLHB1Zp|gr;P($d^9PaeJC(oL<2Nz3@HPo$z$w69#b6foYAAcPtSxQzsI7a< zegMSQa_-*eqAb^ZXd2v9W**9a_!bQL`2l}ofu$-f4p??7PYphHEZ>Xu|?);*FJJbI;5N40(R2o+>!-6a~tHo{S+ezs|(`nkn2(pO}p|Q zVo}y)M~q<&S;57l0WLm^^lLLWf8deBjed^y&z9WTW!T=+-Sh#;rbw3}y4PXdHy=D+T*k+i9ehoBa z4Qn8pw*g6~N#0Z?R!F-l^hbqeLn6_K)fSKFevXY(*uh%)sCKdwTkAy$eF`W~Uqiiy z$EvREk}M*J-`!lY%VL5>lqlqKR&HjLW)&-U8Hl`aab&hJl_ScESWP zu1cU;zymgfG6b<%!pXCV_kcT2rz9Gp-_0+alm(?NeL*-mW&GPaF8$H0i8pim_PhU= zCx!tEIt?)lZA`%c5$_O05Bx3rgiJ(s`^`?gD*q(R06OFZ}1f!Pw07 zFB$q}UILSA?zoiQkkS;Qzh;*>-JhBPUHDzk*t1w)! zkBmT0j4S`7`OQ{~PD@Unxt>PLosXQ}s9FS+OqyYRI@G#m+_)HPb4je*yphcTQIW8^ zDEEX^pQ06mH$Lw_==vJt?KMA?_(x594{Dz(nqRYpVEcNl*JjQ5c`{+e<-M3H?3QWa zX!sc;VAHYyGgiQofuuE++ZU&}PLxzn))+2b+>IHbCDSRAHAK!SQ=F?P%DBPm0$FH; zXH5vXNWk}|!Zg!<<}1x8G7&3eq%A+o?RDM zS6!S}j}Rh;b~IIV90>|1DRzDzc%C z6?u_ZZet6neS7FN+s{Kgo|mKta`YSqJ78wm4bfCP$^v?j^rrIj zcem7e0V9E2aK59wz2B2&CVZQsYgyXpG?vLcYaRk};ST^)CREc6e}_u|t$915Vb6{8 zfYBn|h~6gL6sMv<7F!4$3>*RJufBTMw?6Y{|8e9UIwa7wh@bn+H-G)>u|*79#L2rp z_h*akeMs-W`v-q@@K+Lh*RZ|%ONamEr&idjG`&~<@K3+=l1~M&9k2fWuOC@si3m(P zUj6j{{k4+4as11Rvud}lmxuqnY$>=l@A%z=Z?-U}!*=}Ar>YjN5dLRhjVvr-`2VU| zkRzEpzV2h;e!Mi^G1kgp9o2l~sxi?IItrqxZb3!ngS>Ndy@X^T%2i);E8Xg6k$G>hQcg!x%Q5w6R38i7%F6H zUIjEszL5#64I3)aO!u;O{%a=+Z9t18TaG}c)++)J4yM{@CO}4Q6;8X_{8l|=GVrvz z7Rzz|=+{(b4)cKJh`zmH#K78{CwqYeja|QQ#Q|a3fb#fYl`7h#Mcw~UG5L*$973U= zWV!`*z8<|5q(-^ju#LG6=Pw~A;rpUw1SqLyAxv0lSRP zL!nMqGCi{HHzA>t>XH<9Cilc)V$SlGvGllXsIXqr4&n+DaLlT;w8Kw4kHc zTh}DbYO(!W&E7m_UYi7pYSCM&S;w4aarA&rLo?+feqt)ik zX@xFrQ_L@vFbiQ{es;{WwP0=sCumfQAq+->$$Tgi=pkZ!IrCzxNj8p~aZBRB3D@0DF{0q{`oOP_pwoG9Jq`DYh2#Ef-}K z>&!t6La?Tic6kWkw-MkKIJ?A}O^~B7v~Y;4TS6y|BN*Rv3Ews@$zqWay065oN5~Eg z5MK0DTG47#hM$3Md2fm-`!3TRxEhMDE%8)Ozl$i<0WQ5-q|LraU4iEP4j{N^aH(Bv zKzmjA`YWX3tPF*KTv5+VK&IbXRv9j@DB>eh7$OKnF_Ix&nqBnb#8OpJkaN#OhhTP$bFmyx(jRz;vWSH z%rRje6o~QA@r$)y4QdATdWm{%>H%mymN0|3!aIRC@%pf*O4Bb)d9HQfVTOq_RtBL4 z5yC%IWl)w7Ps?za@eFv?_^D!~4iSxx{5STY!SeYmPpKmLzI*{Bs zbO&43M@FWz)_BD1^PW%K?=8`fxrNMuX#>5bm7icsUM`DB=Vfkhsg{bLlSQq_t^x=T;#kUAK+jSHxd5^Dt zSItp2k^?&H(!jYWF+gu|PsK)cM#9!EdEfglwcwnRuJgfRKn>r_)#o^MUrfSp$5O?~ zxrapj6nM0}%RZm#co*!A<+O7;7^bqJR9MjR2j85^09(6he0fFRbYj0PA%SI=0fkuV z`c8q1Qz?uHHV5>@-(d=>Y2AbcZ&XeyN>Se1ZXuOW0XN56L9QIx17g^x;d@t8_DM1L zFFqp;$(P-{9CEo{u8KE3Fqz1Oh|YNONox%zL?%fl^cX%KV8^)ckr1<#v+ETrSKCK* z9`SdYwKW(}>%d@`kELzmb`L^y)IQCuQGb{QLI8xKd!!`Mwemv{uH9tW(h0~ghs+6= zO_)HfEuEIs=}Hwi($DpPfB?jhGw}TT_A_f8L=%(2^L*k38?y{$QJM_}Ze{EQwhi~PF zd5-XWk|!So&~at1gyC{Wo{M>Mw3)9N+6<*1>!;Ef@Rv`eB_0p}`|QTXEJ^&8B(YPH z^qHGqgjeZY8MB5iKlqnCyCeR78yra;4+@ad&gM$K%+dt!P`Rd z$}v8RY_g;<*>#K7`s-+!3A!78kCSWKb5a=3&?t|tY_ajX z-c8=epP@0jw85Q!AAbnTc@R)VGT9KzOg1Wp){>uD)V)rfn2aY7Wm!0xUz72=Y*eev zs4-NX86F}WPZOu*1js~#{Gn&^l_NyYLLcebS-xjf%W+aQ#A#CXN=J9CV^+xb&ax`w z5;-+Old97rk6nLgk~JH2Sm?M2NejA8R=Sn6ELy3#cAz7>?P^ts=HpF)C}g*GE>J99 zWg%M9x=TZ}5zZ4`FAlgh7e{|XTkhXfZCgVi1-YU^%Jj%_=>k>CN+Ap2qyb`w=}k z3u5D=lUH3vZyo1AF3_W!o+ssq&~hT8eDjo>(5Oa|7S8b@&R$<2$3n3dcb*R+cgVR; zYh7>HY3H8?2IRxh&Uj$J?VN$xAK)j)tpE+`QwU&u12<4hnE&yuIbk6=7gr(po<-r0+1~Das0tnSa9ouc44=L%;u!ql z`?5)o7+Tp$E5P1M0ol5FA|Pop)%78QrjH~8&X8p2>LbY#PK%`T;P2}7dG9+FNlFtE zl@<^&3rQ-eH1ZWlQg%aT$Bjc((6#sJ{F{+k@fJ?R7zSx@?8Ki$CXmG#6#ofE{XR$s5-*J9MHatEvm zlmhq9>@0Sq@YP=4198_wJ3OvqIr5WR zSXsyN&|`5>o{`f|x1mRTlY_(uoz5aY<7;iPfI;FjP9hdy$;JW(iI3?+GsZRo#}KnH zKH*u!Y!+}ntf5DIMu`RAw^iW$;>{DEX6O7X$lNu9&a3-=9Wqu)O*Y|uyWt+lVU)lvP=AcY)zTqVZ~?MuE;IZCR7@(E)XkL zz%T0z<`p_sM2wCoiiWkLpamOyqz2RT-<|2eu&sx+!#C#T8AbttXY_{6XyEjm`@A`v z`@DHMw}wrl1yCFLh}ghN#2ZUVf$VvBhSG&hKN$0@aMU?rwHP_Td3mxTSiPa{xx;34 zhI&2cR?OU0Hw>HS+=Igw(0jc{FRNsKR{RrsnHAqIdc6?Rm!v#h{^JohJqr$O)gCZn zNl=?K;cY@AlrA6fn)Up)Bx~4VOT@oh8%D9St-b}%5rvC%Bsw-e3Azn zcPcXwZ5@-|d=g`{>C3ZJU8%4nqEvUWKIkeK<0+VlFjr1l1@q+)NIjF7TEPY)lNg|= zF8)5D8U?j#J;Bx0x(kQTyvokr#Dsta3quq)8#l0`*by@s9x&LH^O0RJHD12eP0bqd zN|!BP)YzB1=|y_J)aB-5o-cN}@|fof-E@ndC%frZJ)iHUZ(*IdS{a{RkY2(f0D87^GBFr)2%JxT8FM;tFAO;AUB?@9Fzjql*iM3S<3Hai zlqsjHm7tY#9)kORgDvM>er?D4HyM9VW}n9LmtbpzI+&b$wj5m={6;#byM)b5C60&X z)r!y8I~D_V?J9N6%n?_!x)bJ4uXh&=^lsx|?*>3z03o6Y+g66HWXnCPT|%v}`%x<7 z(M>PZqwST@dU`(NKNQUG7b4ee^vfJ;@nMj-@$h}pz6ByER?LOsC>OX%BZtFoqjd7~ z!^?%z(~(X5tMuIS-G#*q$9K&H49!3soNO&!mwUmu+vtBOJi-4X4=*`NDY$Tvzh^TCsnZ-_0juI1U4;3{ z-^boiua~$sAgJHe$F)x~R-rWWtbZdX zpY-I6t2cge50s2tRC_c$`6jB4)0S)}7k*+kN-(btfNTK}Fcb;kM+(lm1q1cgL>|*bau-I;-dHv5HP>DOkyb{20cpHSt z+z$j3yK2CstsFCBz0IihS)mr zakG|%Vo8v9C!LomUDN2uh|VVuw|-$uDLqiSGtnOJiO7y6yArnJ9cBzJP60Y3$2C&8>)d za;ux>#LP+5E}brW3tTB@!)gL3Fw>UuiK*_pxaMB!;%ooI(d19fL%N1blL$6c0JF|t z`iWyvcRAJ2_Y&t2=@ZMPdZG5!dP(;?T}^~aZAKqc%lv`qc5`_jtY=;1f#v=Ryo;e? zZJ|cp8}aU8AF`C&rJCugdCDy+$}t@l`Rt2)@px`=Fnvn1RPLMA(&LNcNvqbA!Qw27 z={fThUocR7fiJ$m7cb2%E}Zu|jpL9y&7qZE>$otfujUO@?ib!V1qHIlR>Ib;kUn|f zv7swnPN|U9Vs@39k*uqE#j513sAzGoqDIe?HxPlUxGKYiz0SPiQO?>DWJ)Yw0)cfv zkGhE(x-hjM!=dpgs#N$t_h&Gwg!i0x+13pT_{F)fBI1hTZ?aXly6?ipG+!^zpAFH~ z5c8ZOz{4CEY@DqW<^b+bZnQTC@UQF5fmtot9Kfs1w}jtm4Y&9!2TfbZGEd3ecoBk;dyf!yf^YCLILc&NDr7+lJC!-J;{lYp5;wR~K8qsAyM(+lR@u5gia3BE ziKiVr5T`56Ue(c_>eiAwi;*vH-w~&4Y-mdtCF}VPp^?f&vaxWiFNQ!R*gTmY>PBV% z6DK@N5iPIcg$2R`425w!iGY5vpbC+*^ZgICH{wAqC!eUE-O*CX~|!=WC;ZdE@1^w&nUSmP`IO3L(*vOK+d}$zxiCEPHrWB2#L|%n+YFq}O1sm7dLlLM&;5R zwU#9*tBj>hoCN@3433l$;A?Oe-C;l9q8n~CfdwIYiCgZYb^Lmaiz|~W#?l3ZmpSGW zVF)1%+Aq+zKv!HeSK|a$tq0hqFr3yt2kFCa!VdTHwGn)A5*Q7n}kA zoz0s|_~gu<9F1afl;+Sq#}5Z{>gqUzN|Umf>(_P&rx^Frm4fO_{y80C$~q#=ikQTj zI8GA&&;5y$Mn9?=Nj~_~XnH8E#l4?$2qpF``L`M@b`WBqypo$HR;z-Id^!nsj8B*j zjyC6X72~Ea2p`HL|A9JmXf7u-kacoEJ=W!l9i8N$3z!Ea&fCE!R+Ar{ITq=x21W?G z`kEYW*pAkhavYC(%f>rk5&$%BYph*D&>6IL@C~$<&DUC4OyW#io0-vNSZCBV7W=9lVvya(x@x2=sZR@N7UMOe_It_zEX~Uu#ryM`1*$RfJ%(Y+g zgk8^riGefKgkN4E&IxgAuiQ&$MY4FO_~zA;Ecl?17s0NQ+$q7IO1M=)ck4w4lTJzw z`{{-PGUfQz9}APllmzZ`P`*JYTZqMsTU@zBW#pX4@w1N+5V9z%bXJ&6%&nBrz}oDU+JJXc8U#&~^)#vB@F`hvQPLpVv#(8d}E!A@)m$Y{WDor7=CS+?e213OTkaI+As#uF{=W%ctYQ14-gmu`Y zP|YjW;Ws!8l~aZR;dlOFI8EORQAvPvSbmU<<|-vVhe#$?D2;R}hV zqmoBaA%(gO)D2OM9)(yZC^%4zJah&XFEGo2Dqij@M#)vhtEq7TEKQF*h?A-qT}Kkt ztbu;FimXq^^pF{WM5HOZ_nqyzbOOpO#8p*+rY%8izAEgh?@+}u-&#pkoP!u!2*j!a zRZH^Qd{rzRfMTg{4X`$*4hyBp-Fa*T2Jb}d(|$sqVnat34pgy_D#&V8tnxYpj2~5^ zoYlnmTc~h#HWsk(rP?4tr^Cd^x*#uF(h@ix-n5@Wl=khKzUQq7EQ7(apzlL@1)o{u zC18I?vlJlD4W$#$;)bYfv$?KV0_#_4F7xnH6G7d+r0W(*o?j$Y)_bUn0EsaTm#-y6 zZb?vcnSi1pVo-4-x7_}aMiWxi9ZNChrdiTvxaCji>VhU7++C=-N~oTWgtd zjg0bT6fEp$%3&!iuT{%jXI^$)_*7-{5x4x29k0fBp)?*$$4M&lYjx?4(-@Nq_%uY? zx56+OD8kzngjpFEh_LTe+1Kf6L|EBPEd*(pMF}da~f(oFxxct_eN7@2^$~}v(OkB$Tq@&yE>*b^cP273r!o1De6u?qBI0Il*v*=tmQfU~6&=buY^mT~Y)g)AFdLVC_ zt9S@Q*cMF#|5M4BLkD7dkeSXV{(X=$tu>9auw&pY`?ILF(&L0xBOia>2jXcLTL|qQ z@yy;rz#bG>9vAeR9;b@o)>w1=yf5W*Nr_t`*uE5N@dL&5Bf>tZ+p}geMx=Y5C0R2z`^!K6p$Gg zON^dGE|D4wmdylisBMWHEFJv|FTtyhB<-o{=y&p+^^^Z*_tGYC4a_}bswWb z7~0LG)vK5I&sq-r`z>T3A^cN04Fd-wHcHQo*UD&|jvI~)#s=9I^V_E$(mHu*dZ-K! z_Au&8$Da!@`cPg9W;beA>f-^#hI;T9FWmiCRry$jYD1nU0+5Ydp#Y=+$-mG`QK%2T zU;+m){PBmd2P~!!T0mUnT+Zq~W`~U3D#A^|5%CjtE3#XFuXCH%bNp+ISME}E7)EbH zdWo;tBb`@&WTHu~*ozHd@5Rx3$s+q&`3}ysPfl~}fTQu&!93ZoY zZp7z=A|J0|!5lcDNar}Pu2_~qolxXpC(Xp#HRbrlz@a##qpao662@e1F-tHsBV-`8 z`eTV*|2WG(miUJbC}K-xcxgA$xjbN?xUZ=}O;vZ=Hm9;u8ke@K6+?+xDbg zxW~$FvKLsipDxjt$ibqvxHwq4keRmNmtlZlF)RaAO|6~QpLHjID6yT-WS z#e)Q_0($qD0p4aUoPf`GhHBIR&ls4^oDd-RvQ87vU0Bk-X zB{#&!Aj6v;P}x~VgE+Jpk(B&5p-a#p6^6GV>Vg!#?hrEga$?z-FZW=SVuEnkl}bx) z*z?p9Eb|V{mxfB?ieO>4#1PBw|311j3$Z2Fv7@xAgl@^TjAF8N$&o?B!XZL|OB>{r zc0tD(0>*3F4UeVBuhrZM8iYMelT^Y5MCw?8OLNyif?um{j`b3S2ZYA@bRY$X27v@u zRk4-_iPA7yN*5scO~+F~iubTrTyi>5$H~N1j*o$-sUJQT)8gO{AszhbAV<{PDxLbN zxm2fqu>JN<{d6S9k#jq|i_DhsDxYzu&uFK9EdCN7ztzX<)DKrH>D14vbhT!GO$S=| z!v@b`JxARt`5&!Tc!~bhLqgXlq!j6$`r)f$@{wNUR=HHaIPs<~mH+fO&5|}@X{$+F zP1s?cE%$5ol5 z1y^{vXHKVn48onX0_?pMkgZcc0ZA@h)kBg2%+V+(;Ox}TDutH#o^UkE671B^d`Kdh zoczv%B&7+74&Ua0hzX6GuX;Ve`*J)ABq_Tg$vQ^4kk&^M>3t-@X2^X#0Pwhu;q8co zv|*()KRuG5rGAgIwaVPi&MrtJJIB*NruZcpAnJ2SYYGC%#si6P&TX|jTL?Kvw6w}i z@V-Xx<3?MvNhoufb)L#L`e7=1WBty+SJAhClRzLIFCr{UpASpaIbrd$uk+K4mzcqk3#2H@PN~9Ux;XPQFFDR4z%&CR&~ZU_;snJgWFX9?SwVM< zf~UL;j2h-gvw&9M)hJjp;}DX&nPEAdGYZ*jkAe`SkqD#UaZ}*cQ>MMif8SH)-(eJl z${x-Qud~KQXMO@pAtM+%<59>!LP78SGe14D{>RVhyuPXtCsL4E>QG1^k-MVA_!%8{V?<1Q`{yTKg)mf_G5m&UDVO z!8Yb)8DZFrW%P!v&oaWW&1M+7}4Tw9+sie7BY+6 zV6mUOH*CtK29(AVa!`zZ6vNM~VY50zz0gR=ElN>tp2}Sen`hjE!xqqcy+uHxGdrao^%Jc3yWgoA5{z^#DKj7mD`&Z_@~vr%>ffJ~XvHicoE^0r;SbSq954pLaVsL3V7Vr)~bD zMHSM@PVsW@e)O>xmccv3Q-Nv512vK#i_kxP?;MYrOX0uVD6@yAs_Cdt$SgtA-RwDr z8$5e;v0q&sQkd=-v?O|HN97x(9-R&xRl4;s%%kYid@zSht5CULw&l4LB>*zpg7Y=a^?lIRW0MFTY5rt&grtwFrU$@>_ZijGl}c65D<01VS4x65s9<>t23ex<=0> z#8V8p+Y5x;prwndBnPp>AeM;zY1lQ_CO7H=s$uO3H)U-G|BPxmoFK8AvuV$i8>-4g zlseud1G(r@p>uknwY^kNwWLB9Yb?Du({yq4E_Qv^Y{jtAbZGiZc&y!;jPf`~hViDG zkjcF%`%0Y$Tl$=>_P3rkB{n+%m1gW8+x=q`coiwic;9rfz%SiM(u?|&qoU{N&|-X<(lX8&XBN(;Dmu_UwqqkOuiX7?`YGTD42?TUzX z{z}JJn3b$6L=wXl`U_ZE*q2~ejkTs)2)BQKPsj9;$qmMU&-bfwa#4b-ceQp={o=+& z&5JI&C~39Yon&aZJF;Nm=%V<4?Vso(S;4hM^6}lBO+0LI<`5V}tH~z60v0#qleRWH zYPi8%1T$l*idimINIOo+KJMCcP2+G)$OSU#b3?*`8_ z)L-AXclxQvP61`J%>7oexvFU&O}nenhG?ZtP0nGh44;d@hgVaP(}nW%kN49Ra3e0j zY{!k~qPbO>uaj!R|3U(pT)T38dGtcdxglC1BQ1#S4mx2-Jk+cz>&(OoJ%ND@GMc?y z<6tAfHl8cPVDHP8!MxgF0Netqs<-Y4**Hq+G%WreZ?vI2wjmEq(PY1=3xQ}uv|Q7_ zNmtItd#c|gd^_IL;Uaxf8AN_7Fad#%PcjEC+3vGCS)8(Z=)f$vm79C8w;t6;UP zoyyQII@uB(3Q*B5vl;ui3TK=LaARnQJl`|M#!uZX)%bE`fbs4QWLkD=riM;Y_iG6? z(a2y;4cCzMQtd3$FV#@Fbi}&T1<$;VDImB;N)Wjip{AJ8tf-1iEU>Wf|DV0Lfwk+p z?mN%N{d)J~y-V^v@{x}c&po1~M~RG>fkHBp8u8E)O^H&Z%otMxu^nU5PBiZcjY!dq zfy&}bt-35m4Fr-7gvJA?tp;Kds}WpdAfSp&#ctslc&46#gE3kUM!*C!Mr{m)83*Gc zYB<0DTKk-P?tAy~LsH`+s0h7#KK9ukYp=ET`r2#jW{fHT5sYEi_Hpw}a3sRQ-DVNiFbL^v7wqIF-D7^&}Wa+uKqrgo6_AE5@mc{*Q^bV0-W z8E()EP8UNRF8~rqfYTOMmENLr9VnG;r*)8pouN2@DYQYGU^55j9J*K(TJ)+UtlUiv z_M_I3BPa%H5eK&_PaJRE?bUm{V6#cKKn8A{{?^Bh4Z%=)CoPW(2MeC0bF)P%1&Kgv z+%{g(_9q5P7$8p7SS9mg#HsQ~ELq-rc!1G+nY@NbG6lQn8A?=Ki8-c0%HI9)<%HjZ zhmu$M)yCDA`Bn1NOZx2{N?y`0LDsJ%44|#di0$Gf4n}({Yu^(uYLf2K)vjWz!bif( zUkI(f3gqBlr!47%{m0N#a;f*EM`)M9@9(B%p>Z3*~?Ts(?A1dl+Ujp2P`Dm2<`4DTL4 zak?DdJAQIcf4{z39zXfH{@t*D(@JgKA!J9p3)oQ-mK|*y(1FU@*%P6?iGD};&h2qd zkU4x&lZ(V9F5M<<8!d>OgFKCLc{^F8;g7>Riy`C>vXGYogV{atF;F(trlzS7dCn?C zFMMLKi@L~JVRfkz=EJJdr$<5+_t6vYHeaVI z+p(7D#Bx^bLrC{+#krUDxSl!uMTZhm&=Ym-pR5Zfs?B7@#x(^G4{oV?TCK8LhY4iS zQl)J0ralIvPtjyP$klif3WvAe7wr+xH*iY&U`23o0uHQ&bfX}`(+yIHwz^0lAs=^o z7Rd}rWIqVz)r!4CUzV7*CW$1aByyLPym9_QRSR_aiwz(8dV*fn;kkjP+x01)m`FZ7Qkl`+)Fy zc!2lbpfd>@?On5(-yo^o`N2RS0F0Ze55Es9aKYg~Nf5^e`}%j3Pxp_XE^B7I>@SU< z-r2_z?oa>9_~{)C!36YX@!ZJ)wk(!T7tnJ@xhaYSgBH2K(_P-JD-vSW>lKLt+ua69 z{SJciYb_8Hshx<@8IXAzCbo#O!S-bnR;H8I(?{{6PO-M8 z_2b9qIh~x9zW7n3xJQy%Sh14LN^IT54&xoi*0zrpHAy0Bu{trwe5cF`|MIg$;?aiP zJn?C}fk|=FHYB~1puMZV{A)ZEyW4r$wxY4(vBp8~!0u6f+I-!DgtxyyEL4*dj9wq@ z5bEv77GKDBye4MA$8Fn~XZ(w#M2m`ZayEE^U2$=ttqXv9hj!?4$^28V_~K)eyzJwH zk=XAZRmuDsSsq|fDeuN?YBWX{+twqldVFwOpJ*0Gj9bTuk+Vy2%*#Lt09C1ydL;~K zRv2Iq1lIp`ylQh@-xX-R%9(FNG+U)_5y%6g!CGL$(=^swOGJAd(a0uhtg#}((Hv@E z@#C#4Q#3(>c97q*8O{Xi@AhkUFSpp^9@YLKOEoQDPWY|ATYqgVhY&|8By?s7^w3Jg zEnTIkX(gbE5MD}-?GvsF)%BZDh|^eVwMhL@p;C1z3uUcMRTojHsV-b-lBBxS^jO>t zRgXJ2(&LUavTOC2x!trgof{dA*tGSSi?YYaxuxcfTclky?~6Vw%X52Q`lKJuVN$9K z=tHpt6}KZhWL*sTi(FM=bypQ$7QslR%z7tEr){=TC?vV>ZKHok|*twOu2yExZ+2 z6&sM8$Y-7d34-1~Njy{NLP$GFJaxUlq>Bl3o6zd9Ae4p1#4|x&()*2gMAK7=hp=3D zoN4@Rtfk6oH0=G(fnC*Cv0Pv@=&?GAU$E$x+M-)Vy5R*s6=XGxT`(OR0Eo0iW zgDT4rfw6sfjvEZEXLI%s5xT#Jp=yDlEsYv2|2Ohz74`cRrQ$QI#V@V&NOeTm_xV5g zrfcsJO=6NMq%y>3SBpKTxY%=i>5R?^Wv!vv27Q2Y<9E}PwpcB*SfQ`ch+*Y%2*OV# z!^}HDAm_vBi(AeTKbeu+$mt~dIQt5f{J}QU&_EVRl}+hEI81$F<^lsbD%CSu}LoDvTuM40VP;?xIYAq-8ykmST48>ckK9!QlvCSuatI z;aZXewCO{AQT@9sxa7hW3G>4O?S?PuW#}2AkDW>*e=jr#fj~k|AdwSD%ABPE$vHfZRa|U9 zkie+}xq;_In3oi!cFb)fOkmK$1jeZxHa4F~cp3$%2`p`yc9&r^q#qg{+tu{mKC+*V zkSa#EW5Ys<G06gBIEiItbnDUB*~#bjY;;#5)kWGuZ*=UNppH zMPcS5oiqwP2yixen*Pqp9GDn@UAE4o1FqhR;L9&LCz$=SxG?ve$`iO%ky>1JATvmm z#2KQNlFtD{fCBYzpm*@lW(_J&S!NwAMJNFgjYxWy*UI`y2aIE-k1!P^7gEki=7phg z0h1M4$FPE!4mc`1D=?CU)+tCE{hZmOg_6$gM7PG6&QoO4m?;C_BTgn3!?ly~(lg-Q zc}11FwfOYL5R_BWwGc`GXc!R5}k%N%tY4IEWkI-c@6Hu zHz{-m)@g7&^%Sj7_C^l6o9azc^+rbRvLoOJTu^m`D>}N@$r^IzNNf5&=A{gj{tFAn z7+bvLoR;-$jJr6tvjz@tk?I8Q5@Au|u2{U%`-!UycHpxA2!tFYMYYD?taTbg2R#(1$@r?ivFkdP98ux7Y7JbP3qckX!JAdLzGJd@MWR`D|52qzFgp94*o zm=8SyK_PBU*jH3Qe}uEZRgiu}d(VnXo0r2I{Z_@ks+(8B8~s+rzOI|g;f;Q)VsGi@jqpalRk3gB=FRX% zzg4lXYJ}G1@96QBP)5Ji2j8y0`JQg{M8o`U{pJU{(G$J-e*NZ8bfYJF^KSj-$GXuI zz4>AN<|n$*6TNw_e)GO=^h9rdTEBVWpYTRc^k%Jo^P+C_L~kzX=6tx(Z}sLYx_K$Q z(Qj4kRo%QC-sra~_Ep`y65i;yD)x2VTn=yaTNQgtH*bVD`mKt6OE+(ZH~OuLeMdJ} z!W;co#lEMTZ-+Pft&06XH{T6!^jj7C6Wx42ywPt}?8mx!H@wkrRqQ9a`C)jY->TUA zx_K|W(Qj4k1yqaTr{Rr$t72jwPDX3>GGbzA3(KpsC zCgv%D4EEB;Xop)F(S`kP{J_I~?_v81?qL3`!1`2;R*Wm+tW9Y%NRp&S=j2+w3`|rj zHe4)=S68$$8du?*?^U{{?ucD*GV#Xlum#vgAT=RZ2iG+z7Nv!d6{3`RE5>Ae$+p)S z4;u3)K|zO7>pOzEIr}g0+vF%5*Z8X?k_~)T8}uA1(#s6S{D>nv6sWFTvGM(^plBf0 zuhQYMV=JNB5>C<`!or+cVrA5iMlPvMPCAxe!EnaKb=zG&>S%?cQVRC-N+;rOo`dPK z)Wo0I)S*O@D=)MR1D3u-8<%=$AN4^BkIt}*w6bW$WesB`W-Kg5Cg^DiX128;BN?H8 zqDZ+$WQi!e7n`ian2Kx2&S;R$}_P+qEHzrC17lS!Da63w09U zm|B-UsI#LbPl9kMi%XD0?(sU<@NQ%v$$k?3Bxq~8C5RgSmrJK<0lq|50`vN^^dB`! z--|qmVwA!_&s}FT5KCvHd!9^_X_3Mv(ArnkJ1pHY2oaP9&Pn^Dl1A}7QmDjdBr~H- zuEJ^G*s+4r1|`a|J)}^nw8;daV91S18_I?0IlG~W(i}00ghcvR=>bUrVUHz2#0>RD zGQE_x#3@Jf#gKzqW6%;18LG$XN_T_uTz88%>TXaqx?4c7vF--qjT@8ZhU_P#H6_e6 zrkdtv({GJ-j6apVaDY#0Zj9Zup-nWmFy?8RTT)8DvF2OS?=;O#MoW`+TtYLB!3RQH z+lJ2-TDZh^7$?NYy~}Et*2gURCb=>_Nfo{I`BSh~pd@)Yi%u>_max0T8uFu0sXR5TNQj}M=>!|puc(qYTq7zRe@dxD>jzH2#LD-Q@Z1e;Fo@%w( zbHwEtY&{QJt8hi1H7eAlyKZl2RH)kkb#W+6L0z?B$6cz9XpFsyFjxO7?8OKmlS5N_ z480j+FImLt(uB#OX;W)_#7G#9b{&(0qpd}EOqv{A6c?3*Y~?n=fkiP?!y6(@9GG;m z#=0PRqe~kkK`6!}p+PUAPt9&6HBLI83A`H(4=AC@2IZ}y(4Hya)(ue5YYu%t4MurG zmo69OoTXBZxevF(qWH!7UkhW+lx0H~Tci`~O<7X^O3rAn6PCA4Oj*pcaYc-qZeufM ztqGUG>@Qa5wROd`Bw6<~S&A^$+ES@iQ;j&ickf7gMD*Skk<~SC?sdAuBauK_qh5*I z{+k}1yq|XG?9w!5609j-4sy&Yu_k6aAv-A1!OV1O;tV%hb8Is_j^B4*#$s|Hicloc z7m2?T%FY0PG{SU6RNfvn3=x&x8q5aPqk#~IBGg1+e|oflG4Me)pd!4%c`U<^g1HE4 zr&hHHLx3xoS&rELLrI1(Nyr;r8UD2q*ikU^(75oU(ccOX2tc)5)!pI;l<<$7(DFyH0^r5Q3cyS-7Z~MOC$v_a#O}e^W~f$v zavwG6(hsp4pD0^uqGJNL87edVvS6wjfou3_TW{1J50Ll(EI*3>qC%{_f}uL-TvzN| zWxMJd!7{D>f(+q|X1kAOM+sG+t`(MbgrKJ3ZJD-gc*WZCXy7)9WM!0m7^u&#gE~l~ zvC3kQHTNa+tWj2dM3kP80lE@0c%K)%&z#!Lm;k@c5AK5T95f_d8U->)Z3fzO4)804 zIbh_=K>pejfJ`62Z$LNL%V1fDy{&Uli+ZlEff4iuGmv4xw7j~|7S0!QX2UM+mwww6 zyx)!FHB>!F^r{j9knF&SKnKm15hCu-F+=(p;H=lYXj|~_CYx*Sw}T9B04}4vWNf;(^JO1^DFR|XueOx zQSHC9c75H;#7Z>y+YDt}{I;Xc4B&+HPLl1Hn9L76L?#;K3%sEmA!&IH+fu_lqcxvl zN%)!(tjdoJbiTzVG%tLU^9=>s@eRzr2EnhxHzV>zC;3TQXUG-4rApopmCyDGTA$us zasiLKOQw^bZFlJn-5n6@u}OE8__l(s?QfaRQU79~OK<3IUuP~%hpy$hEs?>x{d(1Q?@;{i?uh*)yKt~cEOAHu&3!UtFf(;CdhVjxHcv;TtbMl zg%(JZvUTrwiFM0!Q5Hd9v9(ugsC_hEL*x1y%6nEJNo6K+YYk1q8p;`K6Vhj@9N$){ zb+41-fVZ_=;w4+LP7c_$bH0LRS*HzWrZyb(uxdDeYQqs;%{g8%s<{%awo622s3!+9PcV#0Lx_>|+L534^oiqI>2vC9ht6P*!&etzmlM=e?^B8a7*EF`ju={6-`VAZcG;buy2?8HE z$!$NVy(KcZ*U2L#K2Q1cx(#+YaQBA{uyV=)@?PuA&q-iP= z#o=kLn3{LXnH!haw0Ze*p4kGT6EqO^gZkjVu#6BR>%Yxx?g6TgiAZzpi4E0~30kXC z6{K~-`Y=yQj7PJw@H29%V-1EDl*Uq?YyAI}{wlS&l4ZNsmSro|wXQo6y<5{;gYE>0 zR=N|tv8=mN;=c2SJIJG=kGo^&)B*@xzb*U|N$@0MSzL?SZC-u-~CHRnv zSPVA2A@0`RbT_u9iO7n>j8w%vl7GTzY zTif)DG11?#>=?i2Az@?(e64BA)Ke{W_`4`xH}#B3gq6q`{zio#@M3$^HmB(JSsa)xB&E z{3-7-K-io08Y`9%T$5(&7+c_n7EtIZ+FzGv95YIDeujA0fz2JKM7EY509a&<_DO_wvtTbs#QpCp<% z_bgeB?HMqAT5NPnamhkcIdprAwwE$TKzxhp)1`*>ZN_K;{@bZx(Y_i~U?NZ)xbDD= zTEkI0^*8-Cx*RpV41Nu1&5%o*XK^A7smJc;#Ta)8{NPBd_&OxJJ=|fpvYz5F+(%u9 z0SdWwnaO#zIFzpl0$I>(6NSg6a#H#NBL^89hiq(gdD)v%^yv{ z*Fw-}Q&eZJl%5Zmp$r`mqWUo8^pzL~HVpza)kdxUYfU)_)s#I%bp}uxDC|j4aa@se zE#DOeC>J%BSKzl4o@^nVO1$ELE`G>Nt4O|^kHI7>xk$uv89~mt6;rjaI#Etyc(`E_8=-oixp2eL%3;#npZzL>9yy$K zjB(E8c^oKP_% z$q(THm%xnTE5sD;R*#_WcJV5Aw^VmubchjKzUR#abll*LlJ z=*Fv8j(~MPNC26zzO#G`k=Tci=rL4ayCB)<#OVpl#hY=-M@eiU*uh=MvJtLoy!948 z>z&uTv$=q$6+itUo;(mBp92A4SWEf9@Mw6_iF9Dg7vjGWX+IF@kW<71kl3)Lhl7$x zIS)f3h4?9Ay)MO1x9V~i$lz>Y2_&g82+*e@#W_vaKth54T2mz{V!KxQsqhZoQL$BH zK_xFW7F4p)fdm75qbNu8k@bzAt|?N2Jkv)az3_YPS;S%PG&y8!56=-mm6m+QroNla zX#*scozX#<;JYPAksy_Kc?=}`Hi6xY^Zb}V#1x(vIdl00eE z$kbac=UXd1+Cg}yftJf?18Qd264JycL*?j~zKDi$65O`jsrRFNJ6(AKXg+%Y~hO?$NC+&q4gq@_ji4Z%j_P)t75BaEk@BGGC@k zodY{)?A)GQFF1k%)Y$6a>V{bx3{gd>br#PX8@b4=WbsX7Wi69O47;4yH;vcZOq37A z?g=<+*y6>&nuS=tEq{U0Hw&?STL`NsV*Lra8}KmhA^GfOG#>6vF{DRuM=SycR#Su& zMUi191?m+5Tg4C3a@Dl;xmA3xdSI;aJI-@h{uGqZG^UppnC-M3F4YV+Z14mTN`$;V z;xms{aGih`FwupCF*(*GLa7nRq2SU=W*7(E+bFTtXp~r)G=9kyQou#BeBmy}glXZ|Htoa6X%wje4iVM35m-Aaoz@OMnkr z<}COwL`T2;_m&%ufqVWpIF{vq+wb|`_ILKr?BCz*?N9ps!E6%Jzip5Ia{m|Y_ucfC z|LtyoU*> zY2!kR8w<&dQY)Yh+!W%|dQAkTY7f4(6WX%8Y1-3lhMb*hia7_wBm_`W2*zFId0U=< z3>_yR|4x>~!Cs~eNq^LWqWQKVv8tBn4fU%VKtNg+Kp@!@V?fgry=i3|Lx>y*i^$xT zY*4^q-1>L}aJqHi0KuwI9XO$o0jDakvp#gdToxJwXR!{x3OMSP1IH4*DeBfVEijZ& zE2ddl-jpw;gS0l0)@`p+X!z4wTDRK-Uw>Ll>z1nq)h5ecJ)>KJITS-67_0mynbtSt z#b&WrXr5cn0d6h7Nw*m19OxDkIR_+1iWlZ4T5GbL=aoD@HT_>^=2iNOIConT>XThf7cm2_Y`-BGHO1=;;L z!03g1;WZFTaux*2Ai;oadq{I)VOMRW5v4f+dJ7@VNdUSU)CsRTjeJOICr<%&d@w5W z)fiXFYg{ESCX;;`pF>4dazHG)Ol6~21HR{Q})D~aWl6_^Ch2=o>a?*@Xlp50&G$ zR4>Xjbt&nS90e|XpZZcVLxfNXJ%$S8x!F++LfZn9C%CE2e^&2-ZmJ$|bD3aH>p_;y z3Mq}syHB&ODCdg?-5<&DE3cGE?j)WeD~z1VA_QH7AgiM-vZG2GHbiwN)>cepWR{gt zp*3pra@>E;u8#;B)Clrz%B3L4<)qOK{U2FQp2)K5Ag1Hn5N2R(rjJtN@NOxcw`pWU zA^eDtin)xcIGt4jij-I6bXZXz9R>r?20c(ajG8@kW7>W>DIxlpx!Z4s2U)c8D? zsk&exO=6`c@PTB0w~7RBe#KEP#_eIvvBkian!s`y$#G@G$yjSxmTWmPW~=oDh^=3V z>U=b;L}JU6E76qYsrd+waY@->}f5j*G`KRv!}JBUW*oxWlw8Ky><}yWTKZP z^^(XT_lL6XlC4n$H7OkuBxNk4En|iV4qAX+m~^OoUhAd9GM`sTw$ikS1%hbG#ZF37 zNafY6r}FYGSgaxlO19L=h{f#Ad7y*=&uI6+z2feU0nn6%ykk|Rqk zP1iPyFwvYMsMN%1g=TB{T%Vzm!-hI%_nwJU{_R(T3{AP z)2Lw^*bQr#Tc9|RoU7g(!B&NmbK&i65s*E;-eL^bb=i%7OO6W=6zgn>d8C|jBs};e zuWauRwYIPsVutz>dCvmg;(!+Hc5KYohU0JDx|wlwU3|+t=3BTkkXG8)=TxAUh0Sc37PQ{S1q3rLp@6kY}vD;2d4EDbA(r#C66;K zKIhCsER<@)%x~#QqSOd$V<@yp|4EsXx5QNHgLq#9ACg}p<5e>46)qgH6uSR$fzM*t zkoNu26Fi!+MtRim12qXZ!J4!l!l5C7=63)9-(jqzQv)BNOk&kA)g#qFC{b;WLJjY% zD17QSnQ49=0f;ThykW8(RWR;%N=(5oxo)njAs1|Z<^xV5CD?FlF^kjnBoDSql}vOF zD`%4G0s4dP+A7`VN>5vOIA>*yNhDFpqR00_HKbh_!3sUDcp(d z1j~BbbB#!ZRo(;q#f|2spEWT&s|6yF7-gHu60EV9z&Bt=H8!2C5-~NK7LgY{yj48A zqo1abV4*~yWnT`%nZpbS=9Fl!nemV|3h@F+D2vCIauQ|g4pe26IHOa5$?dYXmYga$ zPNS)K9-MvbjuM$$43FU!rV61Lo#rS3NLu_2Y#iE2FygVva?}U0sT}OCP7UEY7)yAC zu>>O_((`Xh5bZLJ8FD;$?-hID*C5kSJas`Gj(=8>8YXAH-f+2ODqqHYCFni}4~lt7nax~mHAqz!a! z&#J)Zq&q8VXS3-ini$xk0dgR+SORtE^VBKvdBuhrtu<7=((*x(V&fI1g^D4~Kvh_b zC;1^rB<7VAME>#<2FF3+(<m$_oe9uo*|!7GaTY&N^gu<6i>?w%!>p5&sZD zw5aiVUDsN!FLACyr8rn;gJegNZY=m&{QBQM_WGay@t=I}Z~wc?-;ajB#(Q%*WwZOz z&U5*;V>=1SMKz926~FzrUg$gxgC1mksb!>ze2qkA$ZCB+sL5@c{WW@)@yhLFAFL8~ z%ZKC-l>107sZ*mF$uSurV?`t6_e;c!*)Ij08^%gzBvJx3GH-?N#dfgRlvPkY5x*3s zI}&b1A+*e?&(AW^>T1=pV&b)Pp7~$RSVWZLK7FbnBQ*gu9mxtev@n-2UG_U}HJkjTZT$Wh(Q?;5$InsVKtcDf|*(5 z%uOZ?SA=BmrA2%|@$)-%IM8>aa5#`l&=B)}VJuoCh=8yBSSkAC9n0qwj3|jUQ9eq(&qkz7yel~|8tLb;QI3Umj;_uPf758Bm(Pk~=oF}z zcNH9NwaG>SVIt|DQ7F#vpXRr`W$m?3*_lT z&cj78FBEKCx{z;wOAqHs(ozWM#GRSAGx9#Zk)(uzJ8duk%I%0@9LQLs5 zn{SU~v1;CMP0evlO=?og=C?i-l!v4PMwYL&5^6b_=jv za67h^3FX^f7#lCSxy*zIK-$MyA`r$!RgV0BOPrf#HDd2O{q{#vADQqNcbe^{)4r09 z>qP;(fqpj0y1~rX`q`wPNw&+drLReGTX=IFw#*o|uxtriSY2#VOe5_(w(QClE{?Pl z0)U->4z~Nsk!E`?j2281S$jV{{q|^=3MlN_2n(A6^u@7)iq+Cnt4#eNwk? zKB=LcPijp6(roEso?fC!je_no`{`uoG?bWuRNd`l95CU*G?+7{dCuX&-LPuMjiYpR z?ZIsE%cDCL>Cx97t1$;zE)l>u2&uat7~Pujb7XXju?a54PxdJgujD5@gP-Jgi=*(k zP(&s^?zJoBSLEuwq4AI)70a=Pv1op+MNdz8ZJwzHN@A?hW&V?wBWZ zK|kzPcV-KhMz__N%iW8-%wRCV zl1b{pqB~g!s0ter~xmI-qqR+j$|sHQRIX(r9mX8$DULK!o!yZg&I2 zz-;9JuC8yxT3F5;>$aF$A3nOBbF~-XWgM5AEil>eLF9zp+1^jfbG0iwkZ~?HrS@h! zF3{Ai`9ijI0phh}2Ya&p*=}Ah@WE{tX!;fyV0HnbZuVexJH=z~GC*y=pqYH|Qob`! z-$ECFanntf`NSD_wsR!g71|a{eb1OTVt|-8NtKLxOdk;SK#XRqki)5DX5w1eUHpUB zUAzP@HV>BZXK}iUsS$#>%0|{$99KdRV;2m3DZM?r!!S9W#N@P&bm<19tCrGGuH?Ec zvGW#dz`l#NSlyjfFi4Sy5VnB30Q4l&U zC=Q0dnfDPyQA6Tvc9aNy(P%qZ6_W^u31z9%D#&{FU;dxxK1LUo#> zeP&70yXEPTPNscNN>?n!E6NC~?DI3UFt1F>Ot_PrtMu9k@yh%_${&oElIbI)^YRMe zS|=lEO!fwaMJFzWd&$JJ+KOYR0BBnj3me&WrZ0K_WJfw8DlC>pum&H)0pW^yiX9;(LSm&PjHK|i~{$ojK%7GtBz-P8) z(Qs#uG|qlys+Cxd;Y-48vHY~$#Ks|YF2&!=!&mZ3i`h)AxkYA$u$xIy9k6$u5(k@C zrW~pTL?}1{cE#YFlVI`gF$s`ma_04H+w0Hgw<~5rXuyzef6Y}7zngQkSQJ{IXyl8; zSN4kUvcnK)AB+D}kmg-(jwJ+R7T?#E_I+3ZyXx6P`@;t`6hEi;`iA?_9mNa#h|Jf? z3Ia6|l*?#T5K-}h9Z-jTYvtH`7VIs9kLRv~$Ou3fve@1sm8y~5PL&2+W=SVKC}p>1 zk8pB8y8<6m04-b$ayXO4vJDQ;oQCNM0`SO2q3y)&(+G!+Vze?^Dgmb7;yKL=xIbJ@ zvJq#Vh@>!mO9?*|=?s+Nz9>4(6$N&~^QmNCl@JM`6#K5+?$X6P&3u`+ z6B8PGzl=`v`HY!9us4`K6;GNzKnxuNWgX#fT_zTGV{ z&hFG%%rQF%^=5%LV#G+HZCQDmm6d1RK;dt)@{kgS@fsj)ur^enu0-p=c*5Z114Pw7 z1S0{iix3twdxSkB{2W{v%H6mxJu$l7p>8wziIJH|KRIG+1Y)vgM5t<*CWnzOqT$2Y zok|D7T%qR6!Y|w2#|g+%WcTZO@rir@mEU1hKFscTjoo&z{n;#H#$yCb2@4cEL*P9> z&y1k`Y>QLA+26K6`8u3|O<=g|v=@+-f&Y{AXa+2BL}eX|qBmoSOtJmbq7AH8PvBh> zbu**fY5kX^(#*C1XQ?Oxxj3mM{oE?v8Ns`$8`Vr1y9@wBYsv5lKSI`)feVuqGgmi- z84^J_e20xDt053JD%ry#w}-_t;K1$81Znm#!xYFu_AoO*DHJ!G*WyK^tIRMh39t1? zBQcC*F*EBE=_%;7tWV*pk4e#=4Oh!GYaU)Kl2*yZRVC2U)$Uc_HxhxH9u6IW<1jSd z+CX*#EewJ#(0~K|@!9|r*>r7)SZ}bX3TuYf{(==h@s*0qwzm3jnZ8ttQDoa#{IOj% zKs0ESU0X$z>9nlWOwt2OQ^{Dl-M1zp|Um@O|Y*u@QyC9zez@VxYPr&;V0f2RY_F1gwX@rfvjXAdWyrHlPCYA#i88VG70=-o*~Lg0K`Lke zJk|GX^uqn|!M)Iyd@^IhfMc6E>|I59r^ zsS^9&-Jb5lf^YKrOUUa=Rsc2LAFq+t%y^UzjLsAn0vOys1_1#oUllcOJM>AWIf;pA z&LUyfO0zw(bcXK)U@2wA`&Z{=zJ`)HlUP7kO;qUzvMPvE;bb<2UV>Wt_y=rp;zO20 zRItjM&UNsn^9o!}{$Eu_1l1T(C@ z#^&nW5C%sm0VWJkQjXB|eIwAIH=;W5j)l!~>#!JT{dQMU79u%1ID7wbtS1Xz414@hpL!K7X^g4Kf(FLT5Jg5fNIg5*v+8UL;bS!x#W3C-6gi{2->7 z$6But4fF05Mt|;6COq~S55bdABI>}b;DrP?T#Q6_jY#qXU$p8p^{QpG%-TR`tOxdr zJI`huZH>1(n^h)|2!L>j=b~>y2UtR7Dpnx+fHcvGCEP}Qf>%eTTc0JRivsJ*8%2EJ zcv;OC1q0n_?czRG3Yr;n#O;=hilk!&2|M;8HC}VU|^4Ep6WJ3khU{k|_ zbGM}PnbFWc7!{G~ChvvZ12)+P526tG$3qLy>9KX0<^+RLMqz$N*(`DxVgpz>4@WDR z0GEp#>`5rWE{*W)Xg?B4eAdUFe=NfCJ~{|Ghis+B`{g-mA~Y%_e)sk4xlNXxVIXlna)c#EzVIv74v??td*{J;fc9p)p8l8P(R!)`5%2Icz)E$$h7DTI% z>|+JmR}nqBq}y!n(Lslxc3vup60nQ7+alcAn%!}nsIY?=$L3bw`5Hf4`1$gs(Ltqx z+M3-i$?G7cW4%SkDBlw76d6#E4^?GOoJZ8tIR;U-mni6k?{zFeRg$cD1Sh2!LdDLJLLF?}Vx!PIOcE1@ z$iBg#Yb>?lEES$;G^lXWrr4E$1i_+NK@G59z&62I&E)7U-bp8S&`ECSz>9YPdVhY*azk2T|pUf{W$7+(n5&T}cQC~M?$U%IKmxh~t+eQ51f zM0R7i4O+tUlI_qpW#=Mz2z-)6RBX-2NPKl#clXE7aJT(X@-#mfE1xRP8S#Zl)+S?$ z{V-Y?K1sY~yeJGpWR46EoVx=nM#{8+HoFvoB*ua;hQPrVM!^CB>=@?G{WO6IVJ|-i zk03E2FajH;IL^4HEB6Mp$Ys%qtRI%k=~fChvV+4X9CiVB;AIi=e=0l_%e(&AD1!Z~ z8cy*p<_HG$j3O{>zxGpy(@*M&bTNK9OZYch2cl<3Kc}D5BLeDLI=Pm=e4EGjKr8e+ zeErG%p2O)0-koQH+Zqrr1UuwXWClEk!SI_#3`BeBGHoB10Z?IE-?HQEq+PT!Dq7>2 zcF|{t)2Hkzc|g5m|MOa#3U$;MwH&dX%zUzs58Mp>bN4}rpzD2+)(&1gWkzXjh>=km z2$0{xIwu=$cEICLm}g4`L-Q!~#5t;Gc7yGjN4;U>WwnmXL z+nyDv4WbBUFPTWK(*oEQqBZ}O?ddG0>xN9%ZzL`X6SG7xD1GydNy$+)wamUPn_R(B zu_{0-!VO%lnG74=hzikIz5(O8Rig<*6`p8#_5;IFv_CaTG2HcPZCVF&Iwm``G>^kkK7ULu-}m->(SEaE$>+@X1DU>U)t)~C#Xa$Vk+<)sBm>dHV@e^{@v0t*@xzS59f*zEPwm+}NkjGDgI_eS*$j_b z#rJ8$lJr28%VL{%CC|W_xc;Q1ZEiosQs8W&tH+b&=3fKd2worP)ss29EJ#?QwL;zx zKK=x5L#`Fa!Omp1Cl_L(T#(F=ZKL`x`{I+fYIaz4k)q?`-hhHJQZR;LK2|)KuCUhJ z6CdIb2Z*Uzew{BoIYCi3Lr+~{rjiERo=TCB!Y;VCh{-WY^*<;{Dc!S^lrkwhNs(<` zBtrq&Z zQ|Op`Rtm2dzl6^;*3M-A;pE3~GKo>IY7xMHr0;TyeAVx*zd2U?uh_k8b-1Bz#nAc) zH^{diNnR17y$n|1qcb5ZO__N31_D+erDHp+jM-#QgA3QPPcRJ_jIyp$O}C0y`54O} zLmbV+XicU(l)Nc6JAXKRLq&i`OAD)H#^ODnvo|fe)yP5Xm5DU>#CH{7)jjd@l91|* zb;Y>-Xdc817-qaGQTd9xVn%T%LAxGY7wfujCy>dl`v(@8HBp-^phl&AUtQJjU9J+yi2~lQoF< zH6@NdAdeG^@D9_2g8y+eKg@~t0CmtGq^1ZGpTiz+g+Z-7sAv&Fd&CkfE{Y(fZ1Go@ zc)|+DC11{*&@B|LTaZyZE<>lYfp^*G(7G($pVgjqcA!qT-^tTQ^M-eNAbo;PCsn6+ zp!#|rwX=s#YrH&2-vQ?tvK}PfX6gnSekbuYH!#!=&s=309F*ugJl zEezOSdLiq)e(cDXUQq0i$;=0xUB~cZ$X@foQo|MT->Psw3gWN8dBqUnmFR>|7>^gNQy-T)3FZsBs>FXF*pk(}dw(tV!HJ}3vz{flj z0d0gAMFAn-;v^+g6J(1I&WvQiP?mhb$q%p~rg$7bh87$mnESwFGsw2wSV0yMO+tK1 zT~UaD!lrueor%&Md8Wmi z*UjREe>VB^&z=AG0K^kbQHSN zKfX@H_X&7|GWGM2{(R!%1*1~pzT`rTWd5QWB*q-^$LYRPC^F9IzN7ej-X4`Jlq*%n zADUBD7sa0GNqG86;yNw3?uby9uO36B-YJmF3asL9HeNt41OwLsGH>A8#5u;H(@)HYX)JTTT z2c9}mEcB7MC`&P)aqH2OoRuwD^jB(7*N#$7LFJ1?>XGM%4V%6Eo(s+c0i1H-S^EZr*aR?A#M>g9Y9)|m7p7OEC_dZsIbw9{^d!X@Ie`ohOyWbM zU34d`d8+h=I>74n;XA;(CzJ)j6!;V{VlNnha4^OQkVP1Q6`OwwJ*i>D@_LNuGM051 zu{_2Iq6OArglfGJjM%GWw#Bkxg!&9dsFSReh&s@%A`=ZKGNS(WLMYo0C%gF}N&ryF zj6BZ|NpD0%yRtY zEGKCyddOBsQ%cGuJT57j=(m!RV+HG!^cz@#(JxO~hZ&Sni8i(;^7_vpE7>UoLcJ-c z5B!U5jr3gO`Q{hm=VY;zXox^2Lj#?Q@MAtqJu(8CV1+!L23ri_F~JtYTdgP947HU3 zGa(BJX2SFrSY6Nte}UBnXvbKF9bBN-pv-YtE&-)X$BP#b9iWPq`Tk~ZD78DQZ z&;dd#TEbI%Kl~M3;HustREvK*QGd&8Lmz5guWEs8dhJcG9m6>yMe&mtufQz~6*%gi zn`IAKweif9?a6kiF-{o=Sr>V+Sz|4447YWV7 zdX2^g-WYQ7Na&}<{_kChLSSuF{22{~n^X(bFd-`IpXGCZ7|f3_zUYhJcqp>}-aGf} z5=g;>qp$RrJM-zYzmdyHSlQ3G+fc;K=wCBe+ z)o2I*A&+*p&}omGjaG=nR#jPKK%~FV-~uAW#qV-cVy(#aD-?0qND`@0sLlDgtp7ov zfGlM*E!Y=H54+BFX8nt`SzpsNj-oK@YvWn}Vtv+Mt{B7SaL~v|sRw(ncmoI^!U-7N z`yivMk8Q-tbF*Wk?Hd>yEDxr)`PjsnbV!{Ih@unRsWHi&!f3nyA&=Hs9=+EW&EjPd}u7- zkXCxIC9P(34!(nziF%A3-RQ(I`E=(+qmsRO zpe3B^%lek~`Fj~ND~pQMSbWiyknnPxvnZdZoI)P?;mBnK3YodHP>S~)A>#~5)+a=Z zp?i?qzKe-vp%0_t3$1?TXp9s73Xd@GA_B2RNs%a<>`^KRKAt8{G006`EKU!(=YM89N6`#k;06WABI%tYlM@(z6%t z?*@dlxD@L#5@5p%pcJOXi~i6=!1L@>lkoRK>_XsL>{8%!E(LzxrNA>T1wJDwP>aXz zP1cSzcykc%!kuuUBOTzG z5=*Sno0jf0&Kr{M{=&!UV%?_Wya~DPflWx0wdombw>Ko#O%A^l>cT|3RCle3{`G32 zKg$&oU6|<4Rulc}^@%<*W(S)B;FZ^mK%SrZl>%9`aHvQfy@)LmK_EXmQC%Rs4b zkOhdNpi0aiAln%kY^pgI4s_H4YXJfM=k_Qcsp^Vn1>#zqT0dT-ERFb)H1t#Ddr z?ACA^bbe$Ye>k9kz%%{_6zEZi;2rimL{zp3POGL3pkS=)aT+GI9;eyhBT%SYuHc2P zx;F=wh0~V~OfhZOa9ZEcXAL!2-cy*N*~Jr3lcXI=$ICRbb>?v}u5S;?cRQ$~4+U3= zUNwNt(VyJ>9%PDD?Oo~yh2(3LZ_H81Cqu|hKunkt{3I+N+61EwG@vM^rL4JuJG2d{ zU=8Ho6E+B=RPhEd)>%V^M;&Jmj8=Ssll25clJe?DJ$2~85vY4pj$p{c0o6l89`YLS zA)Pn8k#oOv@E>&&)L(q;KZsUmccroZYw&;5uHv}GZ#(XQbH#W6))h7^6#4N%XP3E4 zsTX%y2~gtO1W*g<;rzFj{G_4JxV$(79`I=+TbDYn0l;1zfOv2OKvi>H0AgO3KhgMW z03hz{Islzmm}2?^40$^phQP!bB_T|;&Ip+};p>KBVL<4N(C>kq zBU9J0$h=}8Qw0n7E4*BLBp5HLL^P?j)6RJgK52g;-Uv>Kr?}V?U7juGP8Ht`>%o1I z$YHibh|~;}Q+Ob; zLZTk+atI5|)fLW($UTf_Cm0l3TC9RlK<5vn>FGiC4UwV}XgY zHt+U_zJe&ZKnW11%(_+PAH7Jmh5k(csE%dcfNHfK_*4~d__xZ+!0y?yoAOs8dz3Zj zX|a!p*5VZkTiQfACh*&_PF%6VfRV(y1eA*9XfEEQbaIZZpT*_S2(?CvHi|(iW?Q_gc8$xGCJHuVdVARJb3auRl2MQ}0yVH=s?&{b?9kVYI^C z$NY;-0FD9>K;$!3>={9_GRz|AC^n@np%|{q|DChHkteHX;hW5Jd}g)yC1Wh4?J23R z;w2++v;0@G2y|uyK6bi`Bqb4&*&eR?`BPb>-7HEg4MPx9(aHcL6^2PSQq*ZwL0 z*pRzQXbcy7jxP~)2bwmETh0~@y0juE0+~r*I^u4UQ(=E;y%mLgYjMvZ59dStC=D-K zSfFO(Phh?CC!{0wK)8<)(Nbi>c*xZ~Vx4S=SK{52 zD8kp_wJH7wo20ygTW;B%(!SfE@h8!C~(3}y{9Uz0(Y zoR<2Q$h}c!`Un@6=_6b}t6E9bQAB*PWnYR^&Yyxn<0{_=nQ)dlUytNsTVDf#wSCJH z;n>(&IhEgg&H`9DqXIvC*%~XfR`_i86m4)khbq)57M7%3inHzX=QPUl3l)%LkfNUe z-eM=%DGLA%ttzuOT8s2g9?`#aRl!j_qHhVx6Ox~AR!qQA5r=jTX@7{_BbsQJQgx57 zO_E}H&n`?W$%I2%imyT|FDVcKa@DAkp5ktbT>;dL7M9OGp4ZNQX!t;lvBH+N}SGY>F`ol3>hn7gCkL6X=Y4+7wd3 zayg+AtZ(Uv8n8sE#1x=<_0Rv^pS4d*1TA#1hYiU;QyNnvDWj93VZ zL-$!K9m}!87H%?)OLJ5EV3^^dHcyVW7#_mZ3|YycbwCJUY#m6f`lcw`0vWJNvqtY{ zHE-?V&$Ex-O;y&fQP=Pg(rS7BIGTf?iGt)jA)y#MOzS8Hlt3|TNQPTICRGXWE8LRB zBVgkgx7d?ShJ;lZS!0#c%}*)e2=uNvy9S*%kUH{V-Vew}q$B1i0Y;A$<}F}Yd}qK! zSzsAa4?Myc1=VbuMs;AO%v_UlI=xD=Ao!8{Al*QBbrP_ujrkB&MZcZyDz)_5QdxqOA(kaZb(Uyh$s%;)htLW zC3%I9hJOtShG*U#V4-^ZY}fM#xmIZ{=Mtz)wx*UWkpvx$xcBai+t+9rYq7rlFj$)# zl1oiCPiq7Y=sW02?I!Rg>xf{?yL@%_6P>8`-^5Mr`P54BiYe!&I=0jpUyDIM=+ENEk|_w0}gUypB&l1Dv&Lp7LBao>T-Mo z4GCDV>!M4tp0%~cN)N2Odi9&p<8T+szIXLOJ_Spc=wKZ)ARbaOqcOzJ4oq#RVa{|0 z<~XJ?Mg_Pw<{=*tYsJKbwI8BJjEr?Uu(Qt+(gcAx;IbtmEPuhQkeJYZRRUp*k&A^V z&Z-STwSZOqT8FZ=kvfl-@a8C+2xXJNt|xI;SZs$lrb1rt*H?Opj-$CPlH;$ZMamYp zoWOl(W4)Tx6$fHS-LN*^gqp<00Y>x@s7Vl|D_FL@Q_7Vh?6p?P;f5|CMM-fyX786B z7UAipHKZ=P`_^knvnHA18JFNb&VlafF1! zh*#ZTNTLnrV4)w8hEqj*{NXGtRtM;yO)s>IPtXWDlSJDoI@3TplT^x0bS6s+?n>cU zuEn6XZKKWW)`xsUI0;DyV}+=!rqw z>AJSVgR!;)3|!kGJ8IB&6u;-%4krBxZAWH#(f@U|9i^5M*Ec2ULuflg*LI}ln4{U0 z9*Ob+r#9Djpg*QrqP-&vba=*10ANdhBes|ZX#!D&F+*Vt3Xt%{$VNUf*RipxPvVO! zK)5JO0otHkPel~+9n=&c&M^xLkaS9|ZGy66(pUjPv2;w@pa4}!<%$Q%1F;~uf-{gX zzYXc=uf%fpZTlry@CQ>ssz%DX#d@_BHgt5XJ5(KAr#lQki0;5V2CpnbnXW>t_2U+< z9Xus|Mu-*!+4(1YIa(x8Stt`z6km=T)OkAHmm?D&lK{?_z8o3|z8q{tyq$35Pm7sBX1P9f!8zh24?>vd)_fw-G4qK?jCY?15qA{W#3w=)`D^$@uI~}S zynr}5)gvMdmPaHmKD0+97%|Kv0;iN%0-4K9p?tw^+(DW)am73jATiq*=>UQ_CEOum z^npNQUrLTf6ow;LZVvK1Om%ax6mN8M#61(-trON4Rm^ngM+TH$?;muN*166XSfVTy zSe9JUHiKe$MY|L54i|fMrN<}|cO@BD`P^H%oqA{+qw&FifllI(KvMl!#D7}d=6I+? zTy`MhE@FBlQtP0k4q3T4lbaj|I5|)$*s2}v;(I?7v3C)Z>la8ZJo^?Z9;Xf2ZvVVp z)-zkx)3kcX6Iu2Go2)z z2s=K=*LgAThCX()uDXsi$${P@gtHQ&c4fI&5LuCUYTMwEJ~7=`!&A4xlUbV&^oq~e z2H!G+sbyn{KX*!s0w+;+{WJ#kBl?%0WhyL%NwD)SZw;hRysMg)xV9oB3rD(Pn-|f!%yO3Ir!?zSSte zz*wVThdP)$RBRQ!`tXC1)n}OXFO*YmSktId6L18)<-@TI-60=NS8iCQ0|Tff_Gp0A zhDLB4e?-y2Ho(FL%E06+mln7SQ(lrzF|355-85SkPlL^zF-SIsbpYC1^j zGadv4Np_N^lKL3<8H7UKG>CEnn(GJA*klmI+9@;6bSmPH_fmu0h-okJeCp}@yba)fv;xZ_>a zrki2!pUH>6IBU4@X-#-gdTA=#AlgMoKNJRa3i72m&)Lv^+g_f7`b?Esuqc%OO;$t zb<4wHAL!VPh64Er+s} z=$xLd`e7L>fP{CzU3`eFF3hVzOM-K?*6&5&KTVj5dG*Nv4&vQ zNsaCkTbUIG2iT@*Fiu!Cra-K&F@+?sHvB{Dm;%R_Y$eEg%cYAnrn!UZYT`yxV_PZs z&$w`R(feq$9oTcveBYJKU&^-zM(@Y{ZlHTAP(R09jPPy-zmXRwfr}*^r{}zY&)~(x zU6h<4ffp0xki0$Gs?}key3xqh>jj;KF(hyroZuXki`iDKair6GTDD3~OgdA?FeiciQs6GK0SZ4^}gT=E=b zxSP;$Nz@#U&~%> z_z!8bOM`EP{0~*gf3!mWqeA|J_))1=R3PMECRG!6%2;FgudHX(W{iT0VGBRpZkwpun52w3h*f!NPOq6<2m z5Ef%`J_9UlUO=oV0N3FNifBrpbU7;IhEnuAGp|&Oh7BW7dBHJ*lW#8?Ldyh8*kaTD zX{oYM!>!snAn^ZcC*547GrIu3xX8Fm~1Yky*aqDbTLERyq>nGGJG(}LP$ zy#Ph5a_o@Om_zC&D-}8i(Flhmg3Rc9MaD2V!liXx4gs9?q)T0u z2_$W8h>ol2(D4=4ZT0HNCFD!Ob|$BBOJQvXYI<2pbB7U0kdm^O7js$Oh94kR0Fg@~go@~{V~1%86`gCPxG5SgTbs^}NJmpd5saJamOpw@u;;eL`8SVZYY5u-1V zt`yjFXkwx$SNPK^tKV9ppcOsW$xA$@AQEb|WrORmlLrqF2aV`GAwUWR&~_){YTAUj z%)nmFIfP?Gk?}}hiZX7XUb78piG$v_))^(m-~YWUEK)pKEVn)g?2qU?PcEQKm|w=Z zFma+zDI81hC0g;LZ6&<7&K)IX9J8q9(#Duk_+gET;Dsf*xN(1!>yM>VJnA(7(Qyr2 znj*DVdF!BUh6qtZZ zvGU3LY}m%Wv)(WF)IF~s%dH?p?!4) z0-`I&8s6TU*KF^zReRpDb~1U(ovP)%I$4HEAPf-r7jb#2CIEy3HQ~B>hZ9aP5o#F# z^02iWd|}bjTH8Dj#mY2^zX%!|F_@0BP-?FjT6gik$MT+&ul@|dnS_uSbnTTLjiv=q z{!8k{r6lpf*6#z6Wv?W(fmS??5fwB~(~4K?=_qFkQc+s9;D|6n=ZpEb=oHH6Ri&YX zosxzUVqaVP79xC!PJ1<8z^`tA5o^dVQGqc@*IJAVSd^~Uh_X}|4@}7q`V#jzgofhi zVNRz;@#FC%PMc3VG|`c!>yy~@N&J2}i89}4rl2mSX(|dm#cM|)pIn_m1`0*J|D}_( z-5Gn3umha2<({MR_h=IS$q?UR;p7K%f+AG;r@KgspMnT5&HQWjCXHs|>c4VxQfg1M zU5Wp?0J*6^nSMK}{%hL9gR3_G98dzur3C|4V1k6u;U~2j2ppE!Bksu+n4`RKZRHU~ zDByS!VoeKV%j9T!lqab;5x_sr4kCGF=_3e39WW=a;qRjS zs9em~hY{A5R42nsbVw;K?OTD6n9aIfTVmLBWX1YjTtB zz$a{xU?I>lBxpOt7$^@|>4*53IgYsk+Fs$G_K$~C!4+N0w)F|hIf3bvK*6kju(n7QB!n?9C&+Ms{?u&%Zux)<3mCtg2}d z9XUHMptiR!ecv8J+ixTMa0pPW!Fa0<(;}g=gMyIL|viF;RzZ^rtUD1Pc4y*+rn-5Vn7*=`l44L z8t$&eEe%Lgc&N}R&D!Q@L%^Bv1+=N*?I!rrbri#@Tg|rCG8&jbn>scGw3hYD?Q z)POX~pv*bA>(K@#)GM}_Ges)ew10o8_~s1~0OFWf^RxsogjeC`Q~*A;70i7 zeky&;Upr0p;)OCHcO5PQee z7nA5^xd)smpqecNBhU2!{8=^Z5trKU-YoaKb8jJnO$(+|tbgPtBwlET2m{wS^)zoj zQh7%(N7O?ES#5w7WFh5(B+W7yQa}bC=vkJf7_?;4qeD z_QjB54M+fxV~UT-^}zFarK6@Zf``pb`Hsy0+E|ICO(!-Ystk1{qRt3!CHn+KoKaljG3Olif`q;w0tQX7`y~$!0aUNCGRctX3wePh}p0g zGSZRIjTV~%DHabm%_{9v>x|6fh%&SglIU1E5sn9dq7W^$6><2V$%&%QV9H`b8fdXT zFV;C(8d=qZ&Qy5TYza&)+h)~a)?nGPX`o|+vas?nD2(^AvyKO4*4mG9P*97VEAfE_ zB@+n2^tC~8B8hbvq-Ai>p&)41XM&B+os+lcL8h~DF;Bmo$=4P|zlx4`Fl*W?d!YB9 zW&7cgB*Tyh=X_Q~fl=8Gp2%XYQFt)?;0ey35KJC`h_e|&vi$Z4afp6(?~1qC{j%RL zuPCHZpX~KF-XtG;lX^pt1^1uPJT>L&p+DgUD)jy^a+@(X2#J{fat~Ao$3qApJvKf| zAttZV6tDa5x6O8ajBt*%O!_v*Bbpfpo}rD2#~aTBy7>P10mzM)U1NOWC^~eqdn~ft zYyQqG+aMTprDf8>45{J?@ePqSN-{Gg_i3!j2p(=8httk6_P^ggh5wWd|ExDLwelU- zY%0MTL5x(W4bPG4OQ_HNS>|V+S`jnNVoZbZq(_Jd3$@XG4dLXH52I(}HvrJ0aa3yz zpBtYudYv#9xSYI+2QbuY0dP3n7b(>7Rvk!sB?p0&^sZB$ehJup9 zYzTHHC}J!_u>L5+U>Jf`$r7qyTZ4M2)iNIV5P&aOm!+KFsUau`EN2`cg_j>w{<`fO z&Kj>Di@$g*`%>0<;e{;nhsTCrdZFpm+3WprE17ji(@V0nYH8Le7ISyw!c~blh>Ks8 zFDJGWos~A`@XDx{9#v6b5wnfUR4VqPNKyff*w$fr?EH8*cTka8tC4f=?}b!hb*ar~ z%EfYWKFJdv88{Hg?}=YZbuxR3_+Z{UeIqGa8_#2%*Gw!FxrUxL`MbE3XcEM!gJ;GGmp)m>7J>N6d!iF)klrw1h0=F8>OrP6O!RpYUWT7l=O%!G_`V0%ofE>@ z$dFoSDrP36 zMOg71@a*(x3EJ|P-UaXN6~tCcVT0#hIUd^8($Y059=Z-jTg~Fn{_u*Q0hp}LYI^XO z+3Ew79vP%8tzG_~Q5B*IdIPfO%FGZR(`xD*zUoJ_co%2iY?Rdg)4ZoVKUKU!+(lvz zuPX|tl;!P?2e-oPmE3o2CbygH_ zOqawF;E?ySxI)o2MSdVYPaP2||FjXk$B3F5kq?CFw>}=EZeea{H;m;aR#rBP=Y`c6b|AtD5anoKc+~>SR+$nl_Pa< z%oIV1gyU2I@<;_CD5ZataaI*f4uZ}G)``lAJW0&zn#$3j$U`^gKjcmS3euik1n##! zw+NI|A}jXE$LW!R;K$;bGDaT*f!LM(PF8V&xiJQ`kKP;_94FzY8Y=?%)d(Py%os-wF5q%mUJj--y=oqpjc`HK2Ks@%)HdIsvWml; z>Jk9XL)4+7$sFjO2L6GTC5oi1Hs{-{w#;Uw0yrO_g{sm`fK?U9W~)k~psGc=AS6o8 z8FTsFe|Yu^{5l^8ts`d)A0>DMPwy*V`(k6)W`95F~j zj;frb`#1?@f(whk>2lqsVlq5Xi zWYg_C3#jX2Y92zTW2XqvgB<+`T2nE&H{Bl;$s(sF8+J%mold2Dl}v<`b1L%Wc>+=9 zCBDck29gK9sEi6ZP~zsQqEttWi872&tHT7~`d)HAhQsPG-^zvU4MTqjN0Bibl^c(B z!1N4b7EMw4)TSfM04kF0yvYnW2Q)W8$f+XewhUVNA%Jk+%ni;-ddwaNe!>3{W*+d5 zDg{ag+a!cs;F-)hARNV^EzU%{(gC0Q9ANgvvEkyvWMHs1Awx|om%W^hW55lc#KXLR zex!gz?G0{Qz)R(Mn+12UOfWtQ5CuY>Oo(}R;X~x@u!BivOE|@cjDW&W6xJ$}Iy4bf zj^`byc@QxtAq8ca{80~r>J;~|v0J%B3Txy<*+vlcv+|poZMg`-Ua!xhvo`UOa%DI` zw*p5%j;OPSpwS2(uz6W|GL*n!S7xIaO*N~Xc+-lkkG&PdSy+aB%m{=$XB$v}AY>Oi zPHv2H&kUl-MSl*>LX|PSmO7#JWZZ+J(kx2iU=kmo4m%&94%a7F!^e*kT9gfWO1E() zP4L7;YEUMI!(j4r5!84wOUOqpTg;hDaTMmd|dF5a#$jZ?sWw0FV zWwCv0Q@wVMqjI580v`qNGgxO91E)Ahh=u@FDM&-kkbw{7VuXVY2&@5R<$Gi#m4BQn z4RnFqCc0%-|2Xh=Dh|is7)S`JsEkMK2msJCgzZJoU=c1uu?a>>h} zN%4irYS)|u4!1upZ}@j+8aF4XQ&NJO$k^C!52gFZnS z0BtCkvmIAFdw&pyXM0e`2}M(gD}JOUCVEIBkjI^eI@fZr4-uSZ6hR%a0vtWKhXP!g zGByMb7jW9H5ATYa(zL~@(4cQ7r2CR|=!VE}RuTFheCokIifX`x%LXKz4;QN93K#Tk z7Z)8UB;%NNmTE>_hFu7K!x?vBGUB)k8Gb7I426)4gE3-?!$BQP(c>~O1!96J2&ym@ zo~DkwO&R+9gz*I90M|Du7%&mSV8gGN=t=Z)jz;)^2`9UdO%w-_!>}g^LX?ibdNSv*JRn8B zgjZRyO#JDgg;AScW~-?7!)I(2Bq8qcRgg5ecY?zl?-sr1!mAVE6&P~DviI7e%L;eD zVgDVr%<_)?zi2UJ3ST|myV3Cu_gKK%899g;Y=5<5xcD4E4E(#{nMe7E)d;$-<-!uB zJoC66F9EkWo-qPl0l>K1$>|Q~h3E<=AzC}svIg>HX~Y4fgwKJS5i#?U5-Tr6jM6fq zCg~+cC-XVy0Tj66hh)k*k1?>DdCqwrM(7w+v2uVEr(vKsSjBeHW6Pjtd1NH&*fr%j zFQS!s>MDLHOF1~Qioy`+#U6Dzn(&k3YEchuFV2Y`Et!hm5<+h?*B7Wz#b9XvxHR`~gTga59FjF2n{{qn#N;F9nyCJdA{v z_>2%JL6NCswL?pEN12r*+hExl=Z&dTNl|paZO?QV4Q*(@w+fyfWkn_N$$3T>d0^xg zJMzS?)R~ZUwWMd#w+hCMqBkG@?f0%RZr{enMm*g);q)y)f3saQRA5f87MxP|V9beo z5I&mmB5cwvic*@Jqb)4!-o4**&mOu@BjiFJwhgQLByt-q5(EpCd8-ozRzYKen1Mct zc8%D{i8CG$d}wrIW1=fbCJHw#wveKeMX&_VxzIGy2!||SCXFl1 zQv~Dy3{4}AFdtflE|d!z<)qR`4n+V=3XN2xq7jm=mh?=jXhi?t9G6Bp88pIHvJ4s} za#y?bqRyhkBAN}gZrccP8f?V2Y}Oy-XoR>m8!^`@u(~uRavA~Cj-=F4T?%T9?TwJI zfkw<^G@0ShUxAi!eRP`^_4p&;!; zwhknN5|nUG8!#Hd;G)JAF`$a-Y+z`YgL1*x;iOoB!j2UvLJJ<`GxQy>1Sb{)F<{%a z9hod)EO*iqP$oFA8AuwA^XVz5s*6zx5Aox$oGJDL6kwuw8$4l%sRT-|Sd4ft;W>sZ zNt6o1sUDCrq!KcfL7_CXFc+{fW)KRu5VRd`lYx5YS*0}6RQ9<>lU5zdI}pP#gfx|N z3}GC%sZ6lCyTe{=;Gar?uS=l;QtJRk4M|A{rkClcF9YCVzf}`12Mf?o20t8DZ%=-h z17{Q<1;#SWx#U5SkXUFsx0R6O(E15T(u3qL$f| zMs{GG(u~BOrA`%Vg-&Ha)v&dyyq`_0f=0lvtI61lDKHO9fPanJ zGl5$-NJ89tVbsxNoMlMVF5E@!!X0WCR1Q(Qa(Rc^g`EIU*QghPIX{rRb zg?M`<+`%7RiF#eeV64zU8c(ky3~NDja92AM9G^{UBB@$Ps@{>RJh+NQ+L%uR3iTjN zBU;p-a1N2Dhl&1_hZs-eAgZ?hpf#Pb}V5T){>7 z+5(zb=q4doGxaj^^e2M1Mi)&{#eEr37sY@Gq+}pTp=ImzCoT3~2u^F^l-`WZNxCDJ zy}Q$wA<`qtX3A3;letBhB#IG9#wQ&T-k5cmNMJ-@$`9j-I)X)-2_1-i3M17l`f^0k ztuSSsg+3`=7+s6Kh`Vv@-hC|c!LtkSCayY_g#M(gos7gc}%zAr2bkca)#Y*OW+D8B>qw zQm|J`ET}`#WlE-)lz>ejxS(=SW)XLRf_B0scA5jIghP(X9MF|nWO`Bpcj)pAk#b&$ z{X|0C3vEGr;b7uSwFsU${o&Nf+Zja|GOs)N@@1rC79l7u+y==qi6RXAw7f|M8_ntU zYQp2pLIo)YYsrepAl9xQ5s{D&5jF_qK1h^?i&;CEtM_E-U@#%D zgOO>Hp*iBPWMH62)4(Xfvj)gz;2W;k3cv9Qo&{`dJmC{GToJ*ObRu*xwRTGG@puWX z#0Za_gdfODHfxZV;)XUa&LLev)zG zbnKaXXe6Uqzu{~vybNF%>TsZg%nHWE;NVG^L4FvBDQe0%9dpuRYe{%Pg%E&-350NVH5?+w~>-$0w*!W8&voIm?kMhPXw@HZrFDc>*Sq3s3Ol1|Hmo5$4Gk6d~9& zqCUX_6i_CeSW!NoKoDTbCm;wsigF--F#3Vz`eF73y9CN&G1%lvyu*THcoFQ6VPLo% z8AON@!K@rX3A+=C5;Dw17-eDkaXG94Kne}6+&9n+Aee<4*7Na&Ix9+FEhyeY%}#7k z!&pqNRxN1QEeM>PMnwBTkGI1MVb-se0py5LxX$E=L)LwkXD;mM& zQz3Ey6tr$C4nSYc)6uu1w5T&@=;KLjEg}dc0|Y&vWigsjARZ*XN~PR+GuEN=dB!FV zs^HiMH&V1cT`|QRAgko*tI8q7N$^g0k8Qe{!6D zlCl`FLAnc9D$>j2LV3=H#q01QeyWtgC4pq98U=}x1>vjEruhPP2IU(85ku!-$TD^> zkUT6yuRA^qj>g?n2U8wvG`t6R4FCWLUro!Ehk<_$09C zC8sCxA+|mUcOheuG6#iwX-OS@hqa~PrImq4As7%>)DAGz!Z$+LQwAFK0WsPebc3s$ zT*+qhAqk8svIEH%MSl}$Y_i?PaX<=ZcR*t95Cf9G3>sXuRVSl_Y)b{OqyG#n7q;h7 z_N?qO#mx(9pwB9m$Uz2dSn!co&rtFixW8zJLO}{8=?SBaO`^^D(JDl-z0tELSdsYg zT*m?q)ynw-6{AH9vip91M$H(lER)JM$k_zY=L!kC2=0gp9z3^eIuMQ;^?(kxfvgBr zW1N?$Cet(LqT_F(+j{cZGcfwdA&$BGYxY$Rtsln%R zcDx18B&who5HT)}`C!{6U%mS28=F71U(<1En1xY%C`Kmq`Z3@9?zyF}t$*v@uLwXp z40Q{hXN8`L;RUy6H8yb|UIK}s9Q>&>D;CDk&JQwSo4}!L)T9n59H*5U4Ecl9pilxD zi<%CfBoA~;b%>TK33;RjA%s*3#KYXv7+nM%qMtboig<+MEvECl<-uziHwYTIEXxVl z>f}Uy%&@bq*fMmz+~o;;D3K$sj*)gb3|5+zzbKKS>nUjFSxRe!>VLYaCQ>k^PjtL^pOE)FUM|n&R2%sSl z`l97hx+<0BQ(e(jrU2EKQ%Qgp19T4#=FmIjNK*gm z&p@eIU2M0XhReUYh;?=>p<$UUY%h#K@Oev;APyH3u>{%1YQse%NzX;H@MZ`l3TrNs z!N?#lxJU-&dKIk>SR@OlE|P_9n3P2_6{!}F;{1GBXf5Q@ z7|x+>L^8MXkD zNJi!HO}ESy!kla?gtP*o>Wvt(up$_zLAa6Ys5r!#tA<<=$r1P0JDI?s~Bouxpg!K6&Uuv$+rcv6(b-VcH4a#F0b#_05akQd5S5dCRZS!i5H z=qc+e2<2jk!mS&)LSxgyx+o?iaa_Slia4@34lHm*!JsZHDmlDcvXbH%hhR5Q4k5Cp z0@2{J4qzlkn9f#UF%GIey8@_(e{4^06+&QPoWR}oD`5f&LB=32T9UY`K|=(mK&jSy z*FrD$de`tTp=_Qctd8=K$@GUwG1RLZfQaiMDW_yIu)oUojd=0JiG#r4A>wk?^@ zSSvP%*xEu^v=M8TDCMx*k+h&7zY(C!G|jKyu=*gC_-&{qAPITvH^hhw?#ig@c;t|} z?qZLq!8D{f8L8E!w2VA6F%xGlZKe2(NS3UKyC~&hM1=t8z!D+N3$g1XC_091OKQrC zWUV`)2ibY-G;TQ2fd*KO#|g@wKd5;a<}hofRLznCYR&;@HnLCSHEa|@4Y6BKg0LB3@IyHP=%^}&wq4n_N)s<8 z4nXLTyl}Gd8&q1Ya056}Ux!obu(?7K8_7j-9CH#wvw(|*Pp0UZdpGAHUBF3q8uuwt zKUV3`ZBPV^9WDFzAr}tcNPwvuPe3t83oZx=g|I1-+7AiCg%Cx>Nb(D~h@!tjHHjn( zPD#r5i8-eUB+rM2g(}KsN|h7$?$Y4m5W&qy5g^(4nTaHvmWXqq&Q>ktx(oXjiZ<$J z(zXLd3mK!OOZ84bCjp;9X>WMUNJ2I1!s!lL?0R=*gKayQhoeQE9W%%ij@;ZRAl!om zAEsp)`;;1OIwXI>PnFJo)L z7Q$T>;5J)r(?})d1%dW(5sd-SBTzehQ5?wf99$%Yj|G#eNfj5`x$dOC*c|YZ=GaN0 zOCY%<6&eBDGNn`|6)n$~DwnB1ndq1RWFF2WXHY%#$e5bWj|15+gof(BJZ z$rbF?6p`?iUmua=!?(~_Ftw*58cy;P#mJ6F3Z>GC+mF;d7ZVil)l!I^oMp>kt3gNM zM^66|F!=>+-97@uovxr>oUYhY6u6x^|I|bUO-0e;?E%2RB28!lP?{v+_~wT>r-(We zm1xRDMfS<6qzQT*J9_}aGEt%Nn%zi@*Rtoy&KsNq4Kz9{zqh8r2OAq+)2@`L05U*x zv9m~dXm#HNg-vPTuv{^MdmcIz1TxiGzr>m9D35pMBa;?z43A~yoSpL&=-8NEa|WD4 zQrYttc!2Aam^oYSAJ<0Oi-kX;0`b)rz_q>C3YnRl6=WFj_tJyJM|aDgzvc=oWO}6 zT36(O7*VOAAQGlRbxJ=Q5j{m}M>eLkl9?NrB|i`_HJsp(#71?{0tR?`H*th8xO1JQ zY`~s?#R-@O&RqxD9a{&2u;;_JjvzX%NOZM31q7h$639^lRU}Xi)lMQXJDkNJ^dY_{ zf;o^okYK2dJE;c|x!G4Y$N-dfY#g%*V={@xci>Yw{sDgJbqUy(J(I2M0E1MW-)xtg5K&hi{Wg{^EHdXW=YQr892>? zS6H8jCAa~dLlBn?Ozv+$&vfzU(HV%qQbM2!)VXJe%_2`q&WkN#6cP4X1sF?+*%kP*8y1!M{K6cANJWz-Z9ZNSN|SU*Twltdxm zc)~DM>U7tgH>3H~j9hSrE(!kQEIRw_kHDP$39uyP?9U6iGi)y-Z}!K;nbYQ!X}`h- zaGnQ&i;>VWiX5n}v2EF599lL%`@5e5sI#&LM{7_EiS1Q2^eY)tkt=gdM7Sr6t3+00 z7Kc-5H0Ye>XpXsnii$wZ!QvMT$=p7ktCqh4c~lAPB{2F)>*$QoG|+oEF3Ne0rhk(+ z+AMXGcdl&mMlwrhJHSeGFt^UiHM7nY zbk@0o+1I(6eUA!jVm1)DNh6=T&ZWGdV=vMLCDm(^wX1wgc(tmWlA!^&JlYGvy_nQv*=-jzD^k~DA;Jgq-Fa6w&0@Z zn(-XD!&6Iqa>w@LLfcb2w1-}(Al#kkiKMhWO&i6jsfjV%$plsgT~3Py3vqWM+8kpE z+E&VXb5f#=E!=OI9UCWCu9VTy71uN8iT%$!^YQrRq5$SID^gS5da=7ZTo z5a1~9u$?;aAEaf2k;}ki;@t}$4CQ0$_Yusbc#7E*?S_Gk3_!ah?T<2ynZQe$Fx73( zA`wK7deKbmVCULj#U@r3zPig*HtxE{*j5ITY@VFwXs^NEs1@NQNzOQez0>Ne;2 z+poo@_qA9HTqf;9k>@c7_?HX<#mN>8EqEd~#c|NNyi8MM6Ll^~Av=4&q;fcposhO| z+PKLxKaOM8nkM{-7Mu9QHf)PnOlug0c_YRl91Kf4DDtni6@9Fq@im+gG_WMlfaNKq zcC4!%^;CYWyrKetY4lluVgXAvPc;F?m{*R0KLdUgdzhHv56=yeBaO%CMY)*qK%ir& z>zdH8X*|QOjA<85lt4<;GG1<2#&{fCMn5xj72lC58^)BKy{rhr);7}RE}I}9{6$Uj zfv*@V9tMW7b@)zVB5)AY9|XpfoxASgMDSpSIG5BcqeMr!JR?#&fL0y&1i^2ou8wbE zsg-qcD>z=nuzqL&zCJkU?BTm`({Q_l_U{105TOjm68S=>6Xol0)FGk7V$g>Tyuiwr zPaa|}oe1GI^qbhF0X=MQ0)!pWQ7qJ*EP%;7l~pJXR43%fCOp9eC5?g!l<1>k*z2Wf z!65#pU;Zc)iXas>=#65VhN>$XB1@vt5SUUy1j<=e*yI3kz77W(Sa1Y6=z2g8*-;5? z9$l!_9|MA8DFkcK6ULgB{3)M$)6jOjpWHw0NkSDN$xTPre zP`ZH25p-9u{9N&x$&(muFVT=AFUYi9(!>ptf{Rj^$K}{lv@b`ggSyzW;N=0k1y0ov zHiyawmk-VHtb)qu^w5a23spQjBRmX_=RxsQG|bLrt1nj&DfuuVX4hBN??ga^37oZr z`Pu8(r{jAQSURBu%fzw@6b%%~iKZA+FwqRBOf-YQ$f<>;ie%20j%phIt}&+ zc#HCD=p3G9aK=|+G0FaRXU|g-`4mAgU(>)tAJTkT=S_Fv1~DD0D_+qn+<;Az^TIp~ zTas}SOSoLv6HjJ!?6fLNwnRu-;*SL_AcWEkr~t$jnBmK-iD0X2z2GD?AoT_-xQ7NM zd=D+a!+sM5^o=YSQ_Mv{UJvcmmM%-g5!K0#dVkbXgd!^RWzVI{mT}?2igWB22JCHx z>FCmihuTND=~=VCk!#5(Q*9^LRVMZTpnu{NUO9jodmsa75o*AgpsSDDCorG4&#Y4i z+;EAM>(1)TI?kbB(iIwvp2dV1zlx3hv7kUAq%X}Qr9*nZ z8Uj5F=dsH1qul1nmc*8tAV?QQO>u;ibUcGoZuL>|oFWnh!Vj71&{mz)$|6Kt9ZQ^8AZvrSD zWU>8=Re!uFOPI4j|k$3U?|`XEcto zFlnew!Qfbu&;48ncve2<=+q63>)LBrJ@}i@d5i3qrE*#DCK*yIN35EyT*`iC9|gS1 zrR<4zD@U69D#yJ>-~n1HA+A_Q_&uT3*_5KJ_|NM3NjL!KVEu2A2tBdY?T=Nl|26jB zB@Q^tlrLl?;qL?42+;?h1Pn1r9PLN0f)6D%Pw*3VW^yp2u8Ofi1~#5(PQL`hfUd)T zfC7Mhq;%Hxj@bWbp&Wn}(^12VqgfoO3|K!@@i6EqnB(##xybQA&J>C$?tYNqEUa?8`wf` znT26#n>Hu&4bDA~q%~gpEKm`AbwP4S&zpPBG!Dclol9)?kV!O)bc~uzg;zDe@5?*S zthTs})C7t+!7w|D%nI4;eE79ep3neR;hGnx`1Jkaw<^r!M;dM9tSAt*kLJx}UuW9OI{4>RUxsJnCo=?~bcLRSoOc~Jy4r@sPN1PZ=$ z@{jT=q&JV+X@>?kcvkTA|RH$g%M&AwOD zWqUSRCgu{~v^mRsYKx)c8(kDA=(q4jwI5|8E|0DRcV(QS37)|#sOWqJeadHRgh!eY zq)QZ4IDD)F+BO$`z{zT68`xWKYhhZYtUqxKlQ@+Uofo@PFayT!QwC%%V=6x&@K1!nr^9I#@|m=Vk~_;6LeQ0dYS@ zn}|y9x*wxE$;<7j6R>T?@5*jmct{!Pxiz&dPF;V=Z@HP;D- z*#xL>dnzcp$Y^0>A>$oZLD_>kRr4Oew_A`2w{gXugsUjYIvVO2=7aotkRuo@_i2Fr zM6#;4bc`cTki&u+n%e#<5~>Uw%0$foErDqnZrGh_V5@7AGt;t}@nccE&>h^49?%QS zgqsClTqdW_R+;37W-Y9d&W{5u)MSi}4LW4|)EI^;z{}W&{P1xAT8e27Mxp5KaBO6= zFgunGSefIBIhi;QL+`^087LUS=VT21uqX2vipMlo6{$4N=AFl_&ZC|jJqv`q(}1Ug zcr?TO#HlsE!K6-arbXRIM92*6Q{vH$Ck#`&ZTA)D>w?gVfH+)wqA}9PR=7+HnI-qIj8h8-%E%v+! z%Yqq_LX!njWM>)~=G}$OS@_h5olap$tVNmzXAZzA@B+bnQ9%slaLNP5NgSpL0>hNX zQJRJybSkKp>eP2xOt5Ws%MEwwCO}gxc>tq3DJLg4B01U%G_<{2SxgR&1T=KyNX&r) z83?5jJxnkyXe2NjkaFzEh)0aj3+K-Xz2f*36h1PC{)$^fNj_$v=)#Fy3v@YEQN$_I zZm}3L6f$7Ti;%(I`r;=8wyZ)?RwB)08*m*PoU_c(gSKQt7gX&AVo*o+gciDv$Q1Z* z!T^A(fHHivzpljBj?l8-Cb%a8MBrdbo|nF8e?3lZ#D@9H{m7D&e}IV$wTS{Z6Ff_q zg$=#7%)-)V%6FD9W?}cP$SlsbWw(fws&;` zfGNX|LO{vSVu#|$fVmJ8$&K<8fa)8qwgC*8z>EYVlDx#9+jLzQ-(qP6d|n6DO3<$s zYBcfIqoV663cUt3y-QxU8F`klvY{M6Ng`}}l zAn*{s9%kvW8+9ciFtV_9zcMzOTj5#_{QyRG)nKTAJi;yAffDif^LP0bsL{5cJpTf%`pFtzxuAZyd3>07d z>J5sP?v7=D!AZsdv?xkZpSnQvJ3T?Z?WVV~CqR{EPoPEyT$m#n2{2oCX^I6C43b)$c#xoO~?j>(TX0~KzEXjMB&~G5>f4l zqDqxYHYy>CY-*4u*$k2SU|O`PFfH0NNIH^qa5YJyA-b||kZs&OD?_4u>s-ddkO?4L zWp?%rsbdmNRs}@hMpjuxBw1|lP0$GrtM*12QVWRMtDBnUJT#~yN^Ch|`)^KFV!_r9 zMSNphAo?np9PBDz0i{c9H-squMXC$yu=DEpV5I8aOkxZ`#MT=rB8mmP6V)v(_Is~s zL=8|Qpc3weq5^JMpB1|YTLx4hv1~eEOV(hm6m1Hj$0zMcu~T%-vJ&m;G@NI|p5jb8gmHF4 ziOaGQmzlgJ6(jD#lP?tyFq%C_P5k7bAO<6H<;;(6Dt78E~^O zZN(9goOIzK5jb}lS{ZDAu2M=UFA;xk5hev{kj6NIq0chV0kSnqu4;O=YA<^rkp`zb z?0R8pnqnZO2S|e#qnRyv;!$?RcokQy48>h(ibuOzuF@0tP=wrgo@!XlEk@&bg%wqM zyrRMf&xQfORZFU3_$0+>v11%*q^4+&1i`FY$r*QQ;tC`+HE{rQ!2lwVTtEt%*kKA; zCzbKZ$i9%*L) zuO!xm1>^JyyrRkt?nD3sIqH~A@9t+OR=}VY)>J?j>yA+sUS zx41-2dRyqxI9wI)ES=}k^lG6-g0%;PV-ZxfWty5&HR^_vr@9qO!FE{?gYp#XB8Y)} z7*D@k|0t3`Z<5g<)={%#l%ED8$wIug#q#a2IU1i- zz(*A{EtZ2Q*bGs0EP_Xj@I9S}1MpJH=F1RX#>dCPDhK->h{5;ycT3MZ|GHm2{rFjD zN`@vZRs6*sTWgNeu-^BO7JDVXyn1eB-Mq?q)zwus^_6us<<(YYU0rS62&7ZUNyJAZei)%x~ZkptLkUW zn^H2hcJ{zQl~bqgHF)^&iYdb@rw$vuM=4TPR8E>Xx3*^BppvqZy#`B)ipr9@xtgX8 z*5cZ+xbGFvv_8J@XoM387vjfD$FDtpKRqVE52$Pg9>*d7;UP_Hi@OsZ6p__PH@r8( z_{_OBv3_FR#F~lICQg|+abn`fU{zl~ZQz{pI-oJItYlaT2nK>yS4~m$`Gv0NlW%BR zPI~?8=FP32H>b3|wze9LRaG;$bZ$M{Y+!kL-P9R-4H;NIXAVLY<#qF`YM5s!Q}E6* z_{_+|)s+?C`-2WZ`w5JFu>(g;C4Lj)sS6daUVx` ztE#4=a)D*l&a1a-r&&{K=halqwY1{`aV-}x6}T7p(#}F!_G>4vSAh4vzVKFr`F@O) zYgJd)Os}7TGOWo`nu;DVqNZ~GWUKbn%DQRQwe#m%^X68aR_W%s3{0AjJgRC=Ew8Ss za5B-pwQdlqs=Lz7TXJUsMAx%FW+`r;Bj+ z_c<#qoc=z6_df=&8Rc_lOsT7#Un2rb$@9AM`K7aKD@0BNLUHW`lyNwI#rVyys;Hl# zdRKV`hLEY1lO)Oss8@-gpo`eRUUL)}{%Ihj7O~JS}YwnENx~kJaT<1N; zv3XO$u5(1{rG~8e7~8C2R%LbNY#_rit7kYa?Ms?tIFPo-#PYohF}iLFj?%DwX=?eL z@~Ktz3tgTB*ttkX_UH_jh6L3zMK6dr>D0=pLPSk_?|?4*m@jns!^7V_y940b@1D5w z$&Neb-1hc&TP1w>+nXQUe&_t1fB)`n3Fp2#EBVF6$2{0(`!)%W+ z_w27P-JUDqW1qk0q=juqo^|K;LJ1E&=DWl8YK%Yf%=T^)KK$~7hSmQ0(u@AEy_bZa z9C23fXO`E$rhPv^!e3vu<+A5qID1Xk?}teEctowS-sR_wjw#KJeb!l{;>faN`;E=e{uMmTzy_v0lP2Ty^ux)pPd$&0{+@N_bZL zf-T>E8TsXVJ2p%BojA zE3Vl2wS)&$cK-0Vj`zNF_s;D*wdAiF!M(xJS3kcqpe5Hc@Q3d4o3{SxPdh2Lc}-dW z_+J)mFl|w@EZX?(g5jf<^bnrbw7c7fpFaKh%N`nr$sn&e6aRer^Melt?FsDn!=lYv{ z^=b(pJpYR;uef3M^<(sU2``^@#>UeZME^EXUnJrAo!(h^-L|7P&exYo_>sr2I&sz6 zC!W1ZUm@XrPP+7|$B*3esr7oJgzsK+*}o=k?0?CV`qdKtXwsT19=LYwyC3K`O1Srm z;cpFj+2;v@!HF8sJrrszjrV;O8EH)KRN2iEpOjD$k;6550i<%b^L1kxrZ8$ zN%*D(6JNgSdF$C}#u!8w(N*8QXnZQ+`2IJpJM_>~fBP5XYYBI`dh|VCTzK30A#=Ng2P`{w zZTyR#FXGGq3@Mt{Z_ve`e0*d4s=duz315?Y^>yD}760SWW}$lj_1;t7u!`5uF}q24 z`3vh#JNc0P8_qX-NqFEp>&?;IiniQj4v_H5o%^3$diC@RA2NqXICqi?`z18_w-KAR-Cwii(!Uf04wdlhxpB<`Uf<$Q1-%!3y!f&=eoE~~ z(K<$0^)o6t+FMm~Eo%xC5{4BZVlvghiYiQG=0ckqQl<^dQ$qe_6u>eZX+5>Ju2RP0 znt8KJr(kfIH(TWO48X?$w*Yqzuyy4%P=+dND(nIsg-FFutF5!0FA%0~G(C-n)_DQ7!<|TE=R8+$ZN=}Y7w1eI;*vaT@b_sVgy6ZhVSmy5L0ApaRL@zT38H4q8#x2IJf!iYgGQJCb zAJ}2;jB266xbO!jPu=j_uwdc&7hGR<>~ZI>xTstAck&AkIrO{jC8eV#o-}FGhs!Rw z@Zwds+?NF*bJQ z%i9rqA24>@!6#Q#F1z@uYo31og}gTX4j6ZAMdbw--vZ#rpMG!K$6w~PIbd8xWy7+& zHb1!KmDj%f>(b@t-?;X{EssC>{0ncsbIJn6g(SKfKgy;~lB z;>p+Abm(~E#J~Sz$Igbl*{8hwUVcH(n%ZvNC!MkQ*SG(6^S?TD?9p@Vf#VN9?u3aa zFFteA<6B>O`^&$6Q#W^I{k%&{C-o^QU3dGvTb_L3wfC+Zec9z@D|)YJ~$XVjPjF1mQf&LgMKd+O;IUwZwGKknG6S(6fHy%#uZ|47$BsLhh~ z`3<-2SsZJ4-|QUG1Eql>fv~BEL*X_#6AIdfj}DuGZaGmiVutaFOA{OMuox85^VvrFi#@6F@G?PDFI zg}H^fGebF{E}`SYy9dYS3<%@~baPN_K%h$~W;U$HtD;ed1_qk-k&$MBIWjyfvU~8X zoozZrO4|%HacXoy!-~LJmvxS{KesVh8r(Z<9x8c<;xxt2=!G`y8KhHCl zU0@E4E}2-^a9^b1nf}AfoY1hy*hp@uKGwrLA#i-OVQHssIUS;h1{!`Dy6wi?j)6hf z1(v+oC!8A$Hr&)^$?W)o;{GALy&%x=pxMGO;6#gYEUbSvx_9UtgXuwQ=X za8Br;NZ;tZ*r;Ux(B8qE&=Da$7&n6r=TGTzP$Z{e?a2w)(L#CchKFL(q=0<8dj%~QIF!$JK=Z15Z9B3{dQ_z0-gxwon8EAG17)$1i z2NW(jwHq}IV!ikX$Hg5&f##>%nSExc&2yGvQUN$o>x;PhQ2v< zunE$J#6fK&WGBaq(L9||ttQhDdfVE>yTN<#mi-VK3liID(+IC#i zBiDMr#}@;v-TRlV*}Zn{iOLvPFf zU|4CVqTyxT%Ex}ytoLN5p@Y?IfU$eRB@XD7yI9z+PXoB|s2S=2BP=4g6A6|FV zi+}pyC`&6j`b&Mw(GOuvMojV~Iw;U!xSKH?xH)BX*ALPI zIH5%o9pwdMdatNHEue>hlF``+m~ou=Wf&p7KnMNJ z?q+wRhcOx+ff3z^MfHK^d?TTsY6gs`9x~rT^?_-a`5BQ=j-i*e85Jl)IH(s#bFst( z0CN~#0u6IS#4s*5^*lYy;!NX-5qeP5A1%_%3-rmB7OFC|fSzL+6AX>=PVa04^~;Pd zZS(X#kQ?p=+eBaE3zD&TFUiDnFHQQi0kZ4DmKFG5)X-O4G(w-mtv zA;T;Ik+m?$p#P$S5oT_ug-`(K4DMo4I`GG!qv@jpNAMZ-3cmmDTm-*1r2#Whj3E^wJ{S55
      -(9)4rafHyx3hNx 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 diff --git a/utils/wasm/svg.wasm b/utils/wasm/svg.wasm index ce3a2716c5c1161f505852d5689e72b547f3deaf..6deebfd286291871029c6548e12366149a5507a3 100644 GIT binary patch literal 1053659 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

      TPDM)F>T{bxV5UG*Zj0&w2c&E1aS<|N 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%0ANm9fAB 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�Y6IgrO^cVJ0NCEF^+^V>4&WZ!m8raZ*)EENj7Lt{w)}mTOA)^TOVnp@jlI~ek z`ZZc6f--czT~O-5e5eMO94c#GF;v?aDu%?nb`wD~r))LDRF0;#XJ9^!uVJU14Kcpn zv07;gSbTIkJ}hz^4#I47lk9_79!3%hI1wHOFov`nF>(#(ixMA4?>ZtLbJQF~^aI78 z{2zWB8%8#cvOX8hEbogLTFtU88Q9={nAS66BF$>OO)V=bN6L{hM&UC!5{2|4q<~b3 zcH){yY_Y6&krDt{b_!fmpqfp4qh7E~tzkN+c(C%0^00Ldj#*u0mC@=-gCPyf1~7x- zk>rP_U-($|fC}2xMv8?FCE6nMNF4id(E7mjDC`D6l##pq`Y_;Z4K3I$UPab=6JFIyL}s4t?_XrdO(!YUPAU2!Hz<@WQDzi z>?=O+%S#utu$Pd1#c%s`DP|V-60)y&+NZNET-r;>z9QIB3==HuC1hXmMPD8wQQAw$ zz9QIBj1nyDCD^;o?I^|w7WNXdulSO$hqJ)aUPAU2!Hz<@!-c)XdLqG&LMn)6H<518 z^T}>=pxkVtRjYk2GvH;l+UGKr7_Zenmyrbbopotn3&dm|!8O`7IWmkGsntH01@LgK z_PLB9hHACXWd<==t9>r>-+@}~bD2K$*J__1fW@d)KF8dlS*I;3Lx)C>`nd)`CJrvC z>Hi=3$rbQ_%?AbV!MH&n9*i3V)xo$yfEkXnR{8w6JW#hO>s1sONggNlqB>OnS0CZy7j;!S>gh=Os0fG8L@2#A7lgMcU)HwcJ=af5&;7&i!rf^ma@C>S>g zh=Os0fG8L@7!YCHARv-)gMi38@U8(O88_4ek&GMafk?&;^*|)!hI$~9aYH>2$+)2& zh-BPQ4@5Fj2r5KNX8BIKqTXadLWW0Ad90 zw8hp3ZGH7YTT*?{R#6|ch0_OZt@J@#9(~YOL?5(8&0t>x}d1yHy#JlPUfNlqhL8B zFv6E~Tgif>U_~Q1!mYF!#|n^wMU4Q7h1wg(3Y3C*jX;T|-5bXWn1Zd1fC*;68^;Qq zg5iyrCD;dV94o>UtZ>9{!f<%wSTUKwBu9KDEQ&Xd6*C#^bHqQw)Oh1qF^$1kM|>h| zkT;GMa~Ldl#1FzadE;0yfx(PNd>^cqH;xsv7i@aO-(l10{eSKv;^Dr10l}A;9C?yQ z1XWZjJIVQSEgzyxmPJ5A)OBD?_%qmCD1k zwAbbEtea9EcB8$nskfThyR1Tc-4Aau<94@vKJ9fvyqQfp>RdLT_ByNHgd9fR*nHaS zka(lXhi+s(-Pko|kxSXc;=Lh2uP3jKNJSnpf4e8oAp()tH=p)8D&Bx}Mjq}zyBBR( zLQNfaly_CA)tuGeyAu-qg-IxHT!5D-90zBx9HrlDIFoc(s3e4dfhoP!!snFUYGH>; zZ?$kurMFs`tI}I7JXm?H0<2o;trm{1^i~VwS9+_3P2@@g-DFTBPskm0FTBYebuXmJ z9d$2^$sKhsbjhb)FI>qTbuUE89d$1($sKhs6v-WRFZ>L%81zDp+)?+!j5dCHp+(*? zd*OsVoF2ALLIW#!2?#9oB_O~Llz;%+PyzznMF|KnAtfNdtCWBMOH%>@oKFb|Fi0gJ zz(|Euu87`K}pqG;9>VsZNqN@*jDT%H==%plb z6xvHkboD_mCDGLfy_7^(AM{cZHgjtzi5!{tQWD+g(@RNEw5XvZ(%tB#BEBuxjDB-{zGpV8{uCmkYxnD6WI|P@@?!LC}<{V@Vbt1&0Yj z02P!T4vUq7TI(*ikl4Kg^GXx12Scb};Pn&~r^ni-pg27^It9h&!K^7LJ`X-jL2-Gk zx(bTRW0_S@JRa++g5vQ)3&i1tCc@!uPv+Y2cH5KN@uVGVGpL_FA3wC9fw=1A9J{T$ zip7S-et?bDu5aNaCsisLMGO`}21`)}%Rk;SL#(Tsy`9xepJz2YJF8iBp4H5DR)>s{AwpuF4Ob}#N6lC^~I%I~l zRqAQ7#Emenue=_pZ$~|=&$Aw=dq+Lf=UER_vZJ0==UES=yQ7|!=UEQ~yrZ5K=UETS zLq|PR=UETF$~)?rJkNSqxjO2ZIKO&2>R5grb==*74^70oR}ROAyXt72M;*6z)v@e6 z>UeEe9pmRw$Ms!xpy2w7@%rknI@VYn*mKxyL1PF)V-$tP_(wO5IRM|mX=-JD2ca>; zwB?o6BmRYp6*}r!eV+Be@^{oTeV+9oZgkYM>OAW~py{Y*<$2bF$kb8Kiu0@oajm1C zsq?Id%PczTnLN*Wknua}nK-|CI_g+{9(6nscOb+dMCO$P@?v)-t@Ehlq3%kSokt}f z>#k({JSusxyOOcxLFiQnpKQ zdC@Xg*Jr+9nbY-|-?GeA^_kza%$4<-&spY*`pmCcCaO+#t^KNHPS$6B*)k_;GZ}#8 zy&2ClJmk#u<~-|jTD>{X_?%_EIbZZSp|sY#i>k&_cuKERnYZWTTDOn6fPGk+QPK%_jqDqL{ROjF@}X=1 zCnctxg>o6YHSFWGbVpR)jl46hUvJ87K%ZB{cG1majpVp4#c&KXcN(OPUC}1fto6nZ zSU^h$wvp{L-zEC6sc@&1h z9eJfsuVZcoGXnqzyE09cl5dj(^AzSCuB$Z#Y=>2usWt)$uF(Pr`*%fHe9PUF6b(a* zIHtQvU867ZP@&$~4iHny_D!GJt`5kL)li0gIR6iK4o-qnDmz+KF&IW?NJ^qO?r~_& zsWzNPwTDOiz|bojDcNKUgwau}{petUh23iy9lOK}jW?N=G*sVC`l>-fl~tqF9%xX< zHS+ADk+8n2=?uuc24q)+&ju;t$%{z~IX%o;=;SMzGGxE%lyMEt|G!g)4<-)1*c{`x zb!1z^e0%hZ9*{6yCP?q4KXYXQq8bUaWdhq{B8{L1vXFv*@=-b{fHm>k7?P!8R5$fGhrakSZg>Xi(;i!wQ#n`z`uBI&##86j% z2F1!u|B>x@a`q()QcTu2_9YLQUT44b`5yw4`qABo=JADo-D=$cG`_{)Gwy6%+OR9QoFD_P-~>U2TER(z46=e#1Q}ihS7=zTXWLR(4Gc4K$)(X8 z9a^ay)i8$PCKn%?<+2zba`-6sAxv&2dw~pezG)J&l!Y&Oz?)nZV7Jy-S-x}(R$!5 z!loo2R)NI#I3y(_n7A~vZ~xgBg2%G%RiQiX*D-0_e>iSVPDYK%$-YVc^$+Nmf5})Q z;%9PD>$gvuTppg2lcYpZL{$GzPLA1c?N9MeG8RQc!y}_(q40QQS<5El*5pX`$B(Jy zqb(L&`tjesYB9{!`-puDCV{;1kqmo_?5S^BY>Zowi2aq%8y(4pi2d3hSst3=xNpq< ztIuPxvpRij$j3h8zbDIgN`CYOdk-_`Q{S*qzyI=2`&geZ^?)xWn`Ykm&%Qp4Bh|*A z@OjLG+W1YI2Y3$4`zgy4?#D1SvU#8p5CdWLVk`#)BWRP0O4nF4{MAIz3im2sF{Sbw zl^_qf!VqUvP@D1$JSYscNk)$-zfU<=7)nV-kEpoLH|Ps(Bw2byg|0-<7urNR$42F8 zdC(WyOuF=liu-5v`Q& zh7Oj3zR-4pECA(sd(ao!LAvyaiW`H2zR*t6*##_4;d6bVU8GBo$ds~B9`c$)DNJOY z;?M@S%U#f=krE-uy{f#S+nJ=i(R()lvXX1`j9KJth?lyr-fjyMY_pSGLi9g&^&WwT z0I8?9uR@5wzv~r2$oH;#5B4NMy$5pfDm;ibEUn&i?i6D~k3xskdyI}OeP6xP!lBI< z_KUxl)O&WBf=>@6c~!l~Qxf(dYStPj?y6_ZZ2wJ6(<@Q$`Qyn(AKvI2`33b&+j%<< z53T>h9~?A}vl~&I;A5icFTzHAol8t0ZybvFcNi06TyT+m=%tsA-||*->h!P7oV}XQ zBAMqC{8#4ZLZY_r`?RaslNlLN;t)V`GfF-fno_7E%X~Wcta87s(%fvBw`)z1^|5YaXPS{(V{(ifgmzBlPBS@eljBn6$`VPikYX%nspGD3fj%dqSvZc$MB);wXM;* zRn6l%+UeE{4b%E^cAGcT?S`)wxar@!coC3eM}Z{V1HSa_?44@u@GrLIqQ_t+njwr( z14z_~90GybbikoD{fmEq`72YLy_g)y9y)Qx+rJ`S$64&+nRX<+aU(Q4tu~b0+J;JQ zvP%SLb9ewOy zb~I$E5z8AA&5W=`B%c=ENE|0R7@UvA_~q3%(72)Akyl=+Y^Vhwaoa#jK;iw3`%Xi( z;_K<8L0iOmK?+8`UmM9ZM!oNY0{xPUf9XT%keug|GV}{+%xfGipf*Q?fl}GKvrp$; zoX8n6Npb5xdaM=%HrfBs7NbB_C3Q_JX^oe z&Ya_^koj}QzPcL5 zL2Y*22k8Y@$8&N6KpS|seg}?86p~xU2^jF^aBFm=0=KasJcnDK8Q|7(I^b5TmQF(j zw{hbDZyDTzR}l+sGe?C%Lz=2Dh8%AFclOF#2yf^|m03jZWK*6MAsZU0sYE|g4+ySi zR2_u;qiCqv7CK~h`MHbPION^BwJI9<*UK9d$CD2w(%ycSW7P)Cov64NqZk!th(m;P zkgOkNz#ib3X9Wz**~q6UgKTDy%_NJa`@zqkZ1p(0<=g$P9z=-KkQp zl#-6Nw!S+R4~Mo+efQcbuOW?&woX^uYW)1mOjv?eD{FI6YQ~9wAEm8=vzSF9jO=uP ztFUlR=WxZa_dr36n=+b4mM?`8JzNRA4u8pwDcJ)YH7Y^|km`=yo1KYpQk2D<6$dYK zC}oIba;mMz7eOBk_nf>r^NxJiz_QJxL-5_J5&>a&XYwv2o}u^C&<*cT6a1%fpF6I5`tNcakd0dTF;$_0{VLe6g525C ze=iIRe$#GLH+5wK{;EJCePAfBx%UN5pzo4PsUa(f(`jGxuxiFB&im708hdZ5_6}1s zjL&`Y=@#FIe@_234sf%+``$gD#k4o;BeM@L{mFbL3yj9~={Rp4OP4VqE}=Sh?}yZ` z_?X7Xku^m42&a#%F(HXzQpIuFjUrpSwsndZ+#FS05k3J4A*kU+DN5PFc>W~`?KL=9665Z zp)*|`usC`EoOr5p4SJu-H4R@dFkn!4^7@?H4rP5{XGr z89p!iSj<*j9&70|?O_EX0}y^H3CM8_WQ$(UjFV2%3Jt|1t&prn*CzQO)W{Vfi^F^4uU(8`h~VtN^X`6=CBRy=71)*~mjIYx8DN=km%vj5rq6t(p^_ku26{ z3&`bPfF8`Ogk3{GHR(W}0i>{RNj(=_SiL0jI^ll5wUUMftMuR@NHz&dV!akrR$$ z67T}#sK7765N^~$1UyBWikc_eX%mf9BOI~Qz-CAQ0CI`w3b>{MAoKYp0;?C0sO|}{ zLEcgf2>B6L$j&MNIY*f-T(8N;eA|EB76sre%W6a|%~{2t$~7|kOyWNyt&HMwS_m{% zEJ2jYvz9)|5fp$yW83QeAd%A4I##Q0KzXG|^C!Pi>+6Py4d?6A%CxWt}ooEP*<9bK9-ecDd>CWxR8+j9Niq4g+hjeLu;~pp~G+h`hAVRYTfS({- z01IgF{;`F5CwxU|>M8B)yS@XB(8^WPr>ODdD})hzuerzhYwnrvP-; z>YLT{*|_}|Vj~S=^tIn<{urdJ41!mSS|<)-P-yU)j_@3IyEGu&eg3eDl9 zfr15|X_44e2~K51tJfC=2Vo4HmOz0tPPaM$uB+}-)$RP|QbU`tTNM??WHvI-1j^m! zYX9Zq5`5J4{FF;GVpH^41$2#s&YqOTt`1Q!yCMN)An>uJLrw+J4| z)^IE1$>lM>Dz+9r7WaI*Ihj2C?R}bW;xHEqo${NO#TL}WC_RVluq6Ve7E}`;W*vhJ z1AUQd2L-@DG@)59tmmok#pjD&!0_tZs^!5#8{`@I)_!hP@Kl*2A^V?)4^;6ti>i@N@ zGKc_DyR{|}=s0HzpJ9P z9u8XT;d@yyE335DvgCB<(C(cE56MO&KtQWF>?cgR z7cu=;^IP^Ruq##r)}x&v=(Va3z^w@+K)__1Zw3hKU>P!;qiww-4#H`rq5$0?H5JPi zy2cxw^+#}0y-B)nQhUQfBj=7KZTC$@hac4?Dh}Zkj#Y+1@_*`2U-`0@CpW3-NRX0y ziK`OMT1q6v;r#CFf6xm)$A5%#_*TlfJ9=k zPhGZ(Ut}!@2`Eur+>DjoW^`|@8R4;~83wBcX1mNBWEpb0`opZ61r6G%ft1~(8V1n@ zmm&0C_eEDUMsi7K^hAy2xcbpU{?+I;mX4l=Db=w$zM{~WRI6qmk``eVa(J;c)8Tr%~_B9=t|ML-ZwQri}-(cHeg#-+X4;e&B=Ivc9j;dLoeUdbIEBWo~4b z|Hi0mhr4ADxsivCWCl*15%!<2^Et|di{2WFJmlIhC?gT}rikTUam%L6n%ka&tybK~ zlm$Q+JAx8_5h65R&;S|*BZ!7%@hScQSX*Yx9$d7xNs&BmFIJV_Hp|~C*LW}+pO=Ae^-)~8tD2xzx)pDyU%I6T0@&(#H-0o5@76dZF+f%JAl{JV zOme^NTNG8cMMW_ok>mwvt zkM*SW#d^M>M)n+)=SKTteV>ec#@GCEBUbY7F6=lg5#jA zJu7N&jZx&`f$K)#5K(lsYy0cIJaJ=U8r!Z$|KXPV+X>D%P$ldpfar8L#ij&*cXnw! zV#@-wsJ9!-G&V0R_i5`F*!LW|Sjio-` z#%IuCMS**&FL7&Yl#`B4DUWDH~jQv~R`hR>YaUzARaHFus-iz0TFW9@V{W)V;pb3mm2aL)S}sfot>vf9M5H&Ca8Ob!bQ*JKJoZ*-Amun}Ui*M> zT0523Dsd2(cvHdM`h>6^Cw29byemmvwIp?n)D=roM@e12BvsbFWlK_rNgY{|DwE*Q zl2j}cuDK*tcEf=ssZ7zXz9bb*hpR40WwPq)*BmeLOVg&J{~rc3Jl&m+Z{?D}YVwEw zF5Y;5_-_Mm{=e((EXJc?hU<)rd>0>}iSG;_k+(B^1Pj&TsHi0QV20(s33)p+HQN%{ zf*E%A|L~@}>xYN#Rv#W(DlVb4N?20pn&!3=+_os8iS zgIZ@AypgN3WC$inHlq9cC|jo085`@-$#G&W3va)FT=sJNRK}+Bw#;M)S=`tzd(&{( zPGuRJrMRnP0~guqydmo#3wO?7`Q?iAHiHO&syJocM#e_QVOsheR-I5kh8=knneq%f zP>QuW8^0HW`nXg`ARubCNE>>!_q?6bZvPhyPnhp=MbgF$RYC8&QcIN;YEi1Y5!xP1 z3OWpwN7<$yk7z*Mjdxa|S7RGb!l!nlHibdfN?8XM71x@2dL@@*x~>jr-ZU zHb6z_TJ4-G+A!8Ji&z_C8lu(G>`WT zrzo{q6=EWheR9wZU5KKA3$C_`qrfX(UP>cKldYA=C-!Pc$0|v|gK~<4&Zv$qc<#dh<_(6%em0GjAY|FoV9N?zxm&`9VV zAs!Wgz#ME)<;j?ZN>>-26oLWZosHIPP__Za6SKc`#~99c=jUp1relZcV+H$sJ+I^c zLqYTm9Aak`DB1$`Q?9PuZdm6s50Dig+VO_Y4rP-$lt`!KY9FO`hS58ca<{RWvA&u# z*Ya@oly4I6COZrjW_l`Dh015Gskw%fj^tR+{#U=mS&wGR`bPi|>9lz17)P>lW+H6c zwPhsXf-`FfrlGH+V5Jld6I2+)5-QG&AAa>DIB69~j2XOH0GH11l4hWRBc68SyUM2M z)k75lYEyK+Z`xYHk>y$0!nHI<2^nWHGVqM;dC{u{6V(`+TjvNTG;|(uIp9<1!X+TC zO6fyZ&qg>2rGS9LPoWh>L6s!x5HwpXU11oba)9276hq9`8SJ2Z0{Locm9G-x~`6<#QN0zi8BgV|lH zmqEEi%fR&EbJI7u-H_i$Mlk+>1&X7=2hatN;CHcVyWIaq-sjT$x4ZY>2LFipa3>L4 zV}MqjYkD{q=Hm_)4uHpZxA%bRz3m=ROQdS+Z8tot@-iMbnsx~)>!tPCx~j?@{)k79Cj>a2#4oG7E8f= zK^~z{AkJ0&&JXBj%bSQbL_4d>S~+~JKW4ppyD0Z|oM__PJF$yy?=ZI*4+caXtVK;C z+SK|g&XT^V>7rETqdcL)Rz4x;Les-bRmOS3(n@p0uv~@h!m+_h)VtPMk=q)r=8nBu zV_cFcsFMplkuEOv*L@+rurzTf;Kr%PNyl}2{9IGBN_3b(h!5XsCvoH0rN;;;nXhnk zt+b=eK><9p6ko9TT^x=Yptu)Q^S5sz-3{zxU^U6sZ-)=!bm-sx5aoP@SA#n~?HU9S zl!HF`8rOK&K0DzPyAdqb+I}r3l)@L~KyEJlj~+ZXeVSvZ&7+*eV@fz45}x}&NWk#x zi!{$opD6D2a@)D-W4)z$K32Tcw`9@w=cnCE*Be2P#{Hs6l z!w+6K}+JnR0_t8s?X1Io7JWHdT#?M~sNu1Fu#73!0&@9uDAG zo2@wv2)V1^y8XdywGedMHH?5wsi?m{n60!l=U*udTeR))PiJdC^pIQmkQO9t5_02Y z^AB?$Ir>00aX4GO6#cLo@M2}37pfaUM8oe^-+1dv zr_+_XlUYn?6ZQRQ+&}g9tlsxUEB^rYw3g1j+T=~BMuoR=5TuLH{pvtSi1S&{M(y|q zT}eNoEA)9svNie%<&CEjbd|iLr(P+Z4d7@j}ii z&}Xjn`rGKQ@M~dzp)Q-Q)zq(!NT4$)gBG(1|ZTI$fDD-!z z>~DBo^cNg490F&ozu>mv2Y6!r1(U76pgy={8&O7#7dbHxF%FB3mtM?ZH97-uB#Cq# zRzSuaMuMB(kVBbFvn?w9kk*|<&UeGzl!j7}vb!l9G`c7c%xqDfv4wdg(66%Zz^E`B zwq>>~zqXoP2bv1_g!q_m3g27<&nchbkM@yOJ|CQKB{irmy~Wfp4uMd0-IAes3rnhn z&tFoF7I@YygpF_L;gGnXRYhWe(88PxT2bT-aO%k^CwAli17iE|DmiO#srprk7$4;C zryK@V*>4cuaor!TH;3yj{>sbt7a8SHZGIh$le$@$;>*>BKj;Q2>+qedTv#m~zLP{z z&=VG!@$hKeIw(OYGDjFGOr&^0ypBL9=C{O@D69!c(bOXm5>H(1bn?g+P);SXRI5Hb zE-r(UBWsx%PX6W6N*vH~8*2m9Z|R6@aKMhdvnF+tFl*-B9X9NSg{=g9^LRr_u>Hf3 z0p3zHATC^U8{ir8pq=QAgdde3N0H$_u1Z7~tW~Tzwr-F*5s63UKywaZ%dBpgHTZ@F$w_Ige!{=PIhUemVVj7TF0Z-#Nzu?*;sVkTB=$p^MGBOCz7~Z@(a@f(myus(Ywh~5p6c}<2zlAFv1*|T-1E*!cF=I7 z9+#t0ML+v3zDUu}n#I{S@LM@L z(ud%INx{dp8js~E2%;8P-g`ABGdwsjfcC|F1v$vfIrm$EvG9>d~Hevz|$zZe`2wqH5TO6RNTG`3SF!WK-l6zb*;*(&Rg^t{Nzoa-s!|ktx)lXOR1{9dN7*66YqT@k!ECQV zX}zwzfSRE+s(77gdDHyq_#N;&t<%r+6xAeBC}@RNG!fvT4tsK)K$y*=oqtuhNH zKNV9FKpIL!GTtS#1RXP!il_M$-DmEg`@V<((-`;d z9Sak5!uBnO&cYlp58$e@o_N)xY5QR1){0a}v+16!DpzA@m+mF2cu2WK5l^&th-C4hs7J=@ttk80qOy!^QTE|(SvF-BWx@AEpMN?icE|*splX8sh;8Y@4 zO1zJ7qLt*tww!h*S4(pxozK?JMB$(Ll0x9x!J~7=%%yZbD_kR^2%plFMU*O>SGH)5 zdX>|>HZ7?!*X&F{YHJ?IR`gYGOgyke=i}8jE8JS#bXWB)w9>8S-FV-3tK5oRrQ#>t zt$N6wDEEa2^R3*I`+~&Y;S=2tB=!!U=*1w>3|`HD4{b*^|HD!dW7zeu z8VQztN{z0b6+MBX=yyX0P|#S1j_FEAKdUPpMgPOqRApDQd0u#OwHz(I63`qiSCEQ& zNsgAR{0sv8VpdYL?VuWhLp_mrP>{L-xJhwYCl`61F|Cf6fo#7dJe3rR%en{Z7m5Td zq3VHJD@gm5WB87inq+V96+iqWU(*`ITELR8eP$?nKI0M$9I{Yp9`!pe+IpZQDz2MQ zHgSiVU3#PaolzE5Ls}tV0`8#7fUORgMz-OWU5@M)v1-d&QfNsdWt$!%vMZrw4xbp^ zqdbycCXz$^K{xi`%t zDxN%L9{-W)`SR|gKi5N#r6)3^sf`GMQYqj!B51Cm#a=zx)%~(QAKk6qx#8WI5zq{q z{ZCWX#%utv)wPCY^=8Xp?RECc;9?rmdlnArWKjB$peH3=hG`p^*m!m#?aj2gP_>nN zGij2&7m!h#Qol(n+Ts+3*ReK(uh`)N?Vn0AlAlXlMBAv%+7@ex&IT2&yL5@P-?jP% zoG7aK)8Iw|c5U$C<(U91p^P`rJZK4M$U_dSS-LYqevWs95)x zaf_!hO{!ozp^Txtr>QBA>%S!1HQ9lNRd*~)E1cP3 zX0$nEpgJ;8Jzp! z9`EyyEuCA37zsOkaeH$Lbp(Y>C-* z$)5aT=HO-4@@Yt(q@naz+K|$47m>PO&%=6_d(0h7D?*iQL@9%$93sU+f!J{gFy;;E zY?5(`0wBbM;VZKGh<^k?t*W|&WM_5MB_#W^7C1%744VPlLXr5YL+Iy1QroUws=3{;UvU3tK0O2wuqfOZXB>_|W)3HZJ zU`Wd()#11&-JR%MkcpYcusvF{C1Ao+LvKKmz)k3Vpj5Wzs>K0BmcvLlK#_18hUxt( z=0h*4V)5V5;xH}?+D&6$O!cZ9cFC_WCpi^zbtxNAmivPYn*z%;P<|>A&!oqJxJ`{? z9RTe@Mw*MB$}$Sjp1e(Al1%FrDiaekxP91kBwpUInW47|)WQDsV%1o;tp#)M;X+hx zEj8xeuc74}VC}SQi<+qo&-T)$3cJJYlT3j{%}J1H-rY`W2UGd?YTI^geN^CMzpK~v zfTA^1E-PqB6_T&!>)&CP4ZpYA3__L8psPqZ3g@RMOqN*DfQy8bf&6NNGOnj`f|UoV zcSnRr#=PrLz%?Zn`E9iMhtTH*c z)i}3=pC0&>Q1K9G4gAXud|d-yUo!CL10*^!#RVb^yfwN#p^5Kpc77vEr?8M>_eNpdDfN11QR91-4!&1tPKTYHZE<7&_8j^b27ib~+ z{IRe7wlFu)K8aIio)vMGbiw9KQ6vOdCMmdYE&tnSHycm8;w#hs0iq?%T6j2 zHl`&c-5p*w- zEj*H(t>|U?Be$8mzGFDj`q#!0jqj%Dl^`)H7Nd5@MJ7Y~4&jso4}#UiH?Gi7qZ#ms zvlv}4SU+#ER{vt&r-A7V%)tdwRH?Z^njfsl@@NR*hGg%9EkUhuZkcUHV$@<$xVA|# znFO8&)(%N3G~Q>TqRDM3LX2l?3utK}?NCT;K(6dv&R?SLLM|xT4j8^+2@DgFe|G|) zJK(u0yu(QQmOI6|jufanxa6~L{DkeAy|x7fPkD`FSz zoInu+S}*XIXw`t}Vppf5%T*l=7iXqB31`7&hc}Q+d#lM*XPvNx^y_`*T|VPp~*PjJOhu!1Ffh{!PNZ<(nJx8B0CurF)u%LYM8BwfXAkSDo9ImpGkeY!w$n=}XFnbZUG2M$|_O&{gpYtHK~QI0=IYQY{Q(AC+(byIY|&yrqlm z9u=XJ3V(47!!qp3blKH;i7r=l*6Xsf^HN=Qbk^xI9T0K4V_Bzs*3CZaq|fSn*71Ob zyL{HGeAb;l>kgk4WL2$G%??E1(XdNAZvlRtN3vy#_gHhww%>-5ntvhQBXh>OlH`8##Z>!kflm(K1)>=0sm$0kXzso>r3)gwd+HfWJwDk$(NMXE9*;o zvij=Dl9gHBj98h4EJQ;HEzqjWt=W>!f;VnrOG?mjH@+pkfy?SG>GfudPIn2G)$O=F zKP^=}FJuanAs8izU7uBP%00nV>BqwJUAmGV&8UpqQnr$h$TS(5kEt@Qvh?CsI$?>k zA@MQg%(kSDiG*H4W?k3wWnEv2o>td&TT&yn&X#nJXOp8mJ$P#PAeC)McL{5$?o4{= zvGit-r8jsiy}q;B*s(jkWbT6J={>;uu`u|v2W@BpM|UDn-nGx0_p}8=dRkB3+d{oQ zh$z)|XPr0GWEZj$kY)k?UBMO)ce*=mE<4QwZi2%DC$5_yZMFWtbs{_cNLG9ndl)8R z>D$&iH<#fLtN~!pfLlY6wLJ2lB5RLi#pfx)c3QA;O~<(jwpfp2I$zy6U7`UHZImoU zv6)MLGOS73m0SvLHP$C z$3Hm50u(zoC{ztTW(bHo7LlC`;s}R%vo}qGge?XRx@2R7RLa3E6?U{r&%vyaYn!5N zGOcfl;(Qx%rCA|L5!yr#BiU%(-i%1=`}c9H1L9lxpCiu3Yp8+XdcFo+HaifP7{lPE zC{iu#iIoJCG})(xuZ=38KJ5_D*3&_hG%ZqUFgjX*oWo~nkk&GlPy-2SI&7<%kM74G z=R~xZO4X9uK4PxV&VH8DO4!Fhm}lk;Yh6>-s0ixXJ%m)Z7|yl)N5er*wcN=|O?nmE z0E@FSC2Q?Zu=1r`LkyUHTm)9CRr>Mj0KYrA>XJR3!Bp6&BXTT`UsgK?cr502y<-q) z(tUtK3pDAHm>VA8$y}7kkHvdwf;!7SKZxKtf(^nCm}!0Y(2?Vs+GU(h@gmpLxxKcMRZPT z`JJ<~6+97R`j!|L3nP3T=s%z_FbtKK*M=mQlMzKq`{%WjxojTWffRncga~=?u-EVMPKs1rH29Jq?G|p+(Y2vqQ{W9iqG{|1XxR47)X800I*`V*mw0m%u}y^D-m= z_`;sE66y4<64_YG=%3bH{gI6qFR)FK+JxLzAQ&44dJzoHv0$vc(kPYlU|6}PxT*`h z;rKXp8$a?5$?K#d@?$Fm*VuJX!7-j7>GTR^}JoT>lxhS3{xWg%~?Q2L!`E$2h_tN?G#429yDd z#A772VqE#!aIy>q3RC@Nv#n5}bbQRdOwDY|3v0Nz{VP&-nms^v1rJ0yw+3>@W*~A; z7~sf4?uW4ZQumBw*BH_q6&ybh7qph^K)m`?)eY&$gdy?40fkbqi!@p6g9@~GiN&m! z;(fJhoCqlCD*Kp9`DTcvI-psXg&}eS6G=Dz2ei#s_GHV%cm+6tZV3B}04J7_e<4VqZ)}Q;t=9|QRbRlnY^#wmB7_*@?t^~z9&`$1LAx%X zmVpcRWuw+_ny#ft(RAN$wb372VfH9>aZp`Ex+!^;b+Ngdje+(dULt0Mo|0lcwF0)` zn+h~TR2jjx?~p_w7_v))?50B)Ow@r@usO?5{}`>kAU5nQo(CMoL^(o+fG-lkB*w9+ z)QfP5L^$dh#_vsX*^-)Ey~DgI)@vddv!JTLIPQ1v#SJm>?&y6FCGkf^P`Y zkBZX}lLo~EV;aJ7CtX>NQ+6a(?qe>LEXTkps)IV4qTz$ys9BW7TWkKIO|eEG?GV@Yt!AW9w*gdS&LcYkL?$%_ zY~|~N?T=KV=8uoWLt0}ybF$P71d?*tDZ{8+$)#{9^)JcbYC6amE3LZQHBW0v=-Y#+ z&#_nBTUkaQlxNxGaO+~e8psIWVOs}zJs=j(Aqt*zuxr+{Qbt)H8xB0Z3J*pGNNuSr zuCAEBT9{Yh>WJK61!tzg)j^}qfTkLI9UhHK*NUo%pP{Omxs6Nv-JZT`u*+(}`Vv^Z z>eZUv*V|K(zT;;L+bl{gzCLYhE*I`r+ddlUS-oF(3Zlgy-#J?M>ph=kkQv}Xef~@5 zW5bqYhqJp~EBo`0e({*eagM{AEKP9&m8ajkKb6bFDc)^7^{bVqe#LBZstT*8enouu zQ=Z`I6u(R|S8U<5=R6S_~T?W{w`51aB#0iuj z5(;QkR|%3@ySx&l>Xjg3gbNFz1UW^)LJ6|83`!7_T!Iorb@wVk(h?c9;ZoiYT;HpW zm;#C^!Nj%^j|3Uy0c~lZ_a)oL#H>g4uG4~?krCu*VM0??01`!WsE~xVR7A=I;Q_>i z4qdB@jY2`hG3+|Ofd)%<6M3gzXtR=3X`mVXc%c^tnN?UL8T$bTrFjr=sOfz&T?u|_e}oaXuN z&t<7wHRxy5A9ISwWThx{@=$KSpQ|^4+pdetgM0g}E3uwJWljBPyqq`*kK@n_rXuN00~~7|T8( z1wK2Rto8v!6%M0XI2hWDpPdGp1ZTWu0c)}W(3Rs!1{8^qRktk?M;UM}7FnEW35V@O znp+dVMrCJ@n4~P+-WuM8Sepm~wwaKl86(J)Xg6!QtQ3C9Mj;o0F*lk`uwWh$-TSlb z+)B2dQhjuhxCK{Nn~<4hBx`jd$ML5`8DuubdI(?;qCTX&nhk?hMwPu;qE5tY%6&;1=o`D|`~9BB!N zsGTrCdfe=+)Eps#w5$A91bkf1wBC%`zn5l1Cal!+vk59nDZKlQdUq0N;ZoRZJ>M)A zTF+mJUKl|OCH$*8LjoKJ+lXIQQK~VzX1nH!3~5rQBt@Y_eBlHaQ2%4G8=vv@Gu9lWqmUaCwVZ zi*|7m(67kP=Dgd#jM{&Y+IkveSUXdMiZztvfj)sZYjV~P`EiDU7OcTNI*PWRcQeL@?Z-*v6p5V;bdYvlMvP zq6kuAyHcb}6KmC3^p@;TwAX$WoeYkSs}n(ce#S5m@ut)<)=kGK7Ll>H!m}b(t&cE7 zrm$mh^br6cqRCci=rxzvC+*7{ef(BFA|g_kBNU_!c%VdGY9@qB%n?m4+S5VN-eEDq zf)Y2byxm!D!V(y%)2AYZdI2Y_9yv9y<_tmnd;aKiP*OrrUOvHRqpa9$S+RqF6mV5C zahn?j-_#m7ha@cZUwKS4?Eee^#~Xl74BezUPL7zC()9L*K+^meW~Y);)+XvLUhey!7rqyH3k5eGltgU&!?(oGj3!LsU_<|HSC>r(yJ_g${+aqL3wW)c( zMiZJEE6w{NHx_duH(_hZJ|~6RunPu@8_4`iOkE0`5$Up{V`Dt+H%AbvIHvo}elt-3 z4R)5*u5CM=80KaP)p3Js#-Uq45YV9x5G;)XK{q_o^<&CmN_i|dE=IrBzEDQB!uJ41 zrRu;aPakR;-@fO<0< zAwg)#+83QKM8gzo;54?tH0;6bMThntKn9cX$_D#8^Dh> zObr{lx`MAWIY>Pg>spZGe zG$S@i+5xd~GKCx~iubCmMg(mf!8brVkx(1Q^Eqo)I}wJKZA#*v!GqdSG6^+<;Q5FrrB6Far_p( z_u~cPhx!xE_J3~zMNNRzVQPN=l{#j~!FCP+s;O5nHs~Y3Yv<@*J4;I%tAj4ypU3-v ze*^?KWin`19@?Q|)mkBtFySfH5GVfGE(_kVmY7PhWeRUefz-K*On0n9OLHkVfdaW)LtBP7bT;T&+c=*rB;I@YQv6~=w%kUGG%YaNBcA4a`Dq(q6 zze&Q|ewUz-q$1ej-aR;aB~U!HQsipfB(ZM4nbPz@7Ga(=9R6lP4cNX_52e0At1swd5reNJ7#z&jK^LZnv|Ll{5g+yuCE791>GGI4(NM zi_~xJi#{S*>cbi^HxP9HX!6j_+gQxb-Yh<>VVMS?l7ZwWWeJP{-!z`4F%!JI-)J30 zP^s{Z3Db#Tn_{BzgGImgQ755_k7Trx#+1c6Lo`E*#L$vj*j7Nc#d#m?3^fz;t~S8U z{*(<-v6W%^we!@C5GCx0F3u7)BYH&G#*CLpvv%_2HcqoO>`C{T5^(Is{P7>n-*YqX zy{=PQrJwqhVYvrX^RGYi3Ot}-P39JrbMr^$Xa4EEXTFUJ9-W`dhUXsH4$92l@V-X{q$6^4VW?iuNh8QI+!0kp z8_{gk?VJxWZ!#r$DmDA@SsU)bpKI=NL1cMhLIy#J2dFTHe`q4xue-A zUFiM3dXOy-xf;`Rj9N6OQz_{U4Cf|c_iQ4!OjFLfeY<5gdo*j$A0dZM>KHk4gdS$Y z1k!OWjXR;K`0;-;fB*UmE}1;=xoz_^Z~L>~z4May{};;#LFpxet{_ET@T z@=8Hz=H$nJ>=bz~|{T}`MD{kkqkzRPsvloGg!1~rm3GK!)!uHULxvbTjSDiXO z@SnfLsEq)YCjwa1L)SiXWagXcd0(*CRP>MW4~-o^>ouRApVI)%xyr9Etc!7S%Z||3 zCjJdf%H;?y6G~u6KjPwfhm$T)p&ij&Cf<9mxx{!DEC%}MZIwXU&x#x8Cx7-cx54~O zIbgi^8}G*Gxeqxi3K;XV=g(1V>&SKJK(yD4Tu(pzjnr~gX^7svO~JQP6bxY$Ba-h1 zkvxBD-A#w#dlycONGL%d!rO*mWd%crl3-t#R}M%%gIej^*@y0xJcKOaFeZ6gwRihq ztQ8ou)aa5ll06a(jLnGUwa6qQVq#mj_eNLQYp8NWkYwTBEMexk=xbl`MMj3fv`!qE z`TH$j|EKLrbMefUcih){^VN>wps-NN|IKGHneA`piI0AI-~V>*+g~$3^W{B%_}lp- z4}BWE+4w(R`pdh&f03xzHYYX-79Sy9?UC-V85ue{i$jncJi^vXHQ&SxIPS!QRN&eoOUk}?VzO*Zy?`URx@CGdW zTz{9{u*S!V495@p3@1l+Sn>DVe2NU;Tt)G3uG%q?zxM`ZVFD=XC_ZxHda|6j{*sCO zgCpkHtS_FdL$_zY|Izv8dv%j_OhkqfS@7`JZJvT;&&VTCM1M@TG zUGvi;l_8{z_|~fS+Q~D#Dpfh7Z?Q8>4QK-lyLgsE7AEDIz@b@mXMp*Zhejq}Z*GXE z(iu*trOK(;G3IrUvPWGYP%i#c=7_q2VciYMw*eiHV>ym06UV0-{qpB}VPfADtv4MY z60e=-rIi7i8GRd{9mxUKYFMZ#6Ig9&8AN>>ktAySS>Cb)JA=1nVc^jMSc!-(T1XUymM=OHq!rB z;N2x2x9>{*QQDFIT?Y`YRWXa(_E+OX3VzjR{*&ydlJ^OXnoOpZ;S03j%+zUF#s>c; ztH^53F|YRN-VdL>HGW-j413g`cBA(ey8};b`-P4UA;Y*s%mqdoouePi0Y4)0W<#?> z`hdoB(8d!v?rFA51LI~G%Y&{N#uANB7)u5Z3s4wK)`lDhrb;&2*qM$3EfOkYd83D+ z6nS-63Bks}PIjNmWY;sch>Lz~wLHt8v9U$SlHw1*DLm%+T(DnE0RxltHNL@asdNbL~M_KkQreJ zqn5b|`FX!nE0`7s76L@ou)+#k5XcoscZ${LkMq*|axkLk%~&>9JVI-tAIu}S+;(AI zF+pO2G1sF6_fFmT=tW zAyf_lUP4o1e+(~ox@t7ATXQ$%Re8Y+7w|GPR{#@@khj3ntD9IZ&@St+f?o8o4Z27M z92Bn?3~}a#epr}s#~Q6Qsuey<5cB2%49mQKm@i>54M?o{w;+|hrG&g+`hAHYAM_i& zhciIZGmWC;K|eMCA;fNiCTbANpmBdP!K&i?@46HpMNquoWj2XYJP`YrMeHR{5Iu|L zb!MR%T_AH&Jh}e6QGAcw$cqMgnF7Lb{v}m~j(Wv>wxX=@I%N3bDT;ofvqIzo)WhKM z6&A|Sz1F$5wVGHTA|ZzA>nUmwX)tUNjl?;TSeH_ zQ@@$gVZMAGUIv|KwxeGRI3|R)STKum4SeKQZb>Byudv-!Zk6q%a;c7Biga+34+W5K z0rSL!BQb-zzr!ue&N;`1S$eYJHzt!m`IrTQ#~aRSZJ*`{80PPAa0{+%=h4c^cuHYd zB1IKZP+(MO=sC1*XfvY@F(I_F8fq_=l7_D$3xB6ULuIi(YJR1aj2^u3Ru`Rtqc-6% z&mb)E3SGuH-h@k=(@nUvKpZX&5Qj^Jt&3dP>YYr>`a72>+`yrjJvT<)(lfzKliUaU z&d?IWzd2xlbjInx?n~`(hnO*CLz5_ol{)rOD*0%Po{Orp<-5eFIVQ&GPM(%4?QW3C za+Tf59b???n3upi<?162?@K_$Q zrmAo}HtdnJYg(O-Bem7ZNJR-qCQgWHbzZ`wRiJ}YTAlSgTIJb@9@z!$Kb*Do_%a@? zQQ0y*zMMyl);S|$9p@=(I>d>%^py_$y-ey`!d!%ydMb++;7;n&b3QbXu%U0=_6^speJW2Lj5 zNBcxp)#Gb<^l+@`afU|^oldtAAAB{Gc)A{1Je&_Po~DNe4_l$f zwR*r6*PSPl)I$U#;zS2`6;$6T5~OA^7~(|mc09@g@(jn6tg!0fSaCR+U}wk2eA`4Gd*p$afRozg-I`T~~5Eb8r;E>`v=lox>(6XL=n`=QxhQ5WRm{{*9Oy2 zViKcEv{!mFPeO&5D*>^HEnp$S8nRqqxJ>D8?qrR^a#1|LT+gd^=xLk{v#^o9$PcBy%Cv^oVFbQ5|!l-{<_zNo{JYX}8+U<7C|8~-ruCktg z(RQoW^WSAEp{m6|bw+(Z_AZb3ynSM$^M=cnE1O$vPLdhbL{Iyy!L z>`Y>sp34;#=S=Og$!oe7;Z*(S4nS-bcDI#VZUT~e!5mapl}MW9F7;&ABoh!kiRM2fCb)Ku|dFR2p=HHvw{7H7dyBjGp}%-Gi>`!4;H zD(OnYfJi{B#Ok0nW+cr#<-$m*yCkIr-UP^jQbMh~zMJsBtZi<3hbX#HixaAesw@TV zWTRY83@(wA!_}nBedx0+k*?wng#&_e{>jH7Ii_AQrZz12dINAOxTg#qaA#Q68b;Lc zhA|XjoEJT=BI0c?o*oJ1=nbho6iEd7L~IVe!1utqr{ng+072XZYaF&^-L<6Px>U4~ zKb%PM^4|X9mAhf^+kTi}iih#@NH_qp5T?JS7-DAa#Ta4{lbLp6 zhg+>*^AS`H$P1HFmTLY^-S&6*8o|)oa)&WHI!L*S2ih0>5}7BAA=e8xEE08cRr};OYd}P+_a%ukX?O$eNBdaM=Kl9X2a4R`jwp6Ugupjx`5UXDo zxSjXDsTqyKKx7n_?U%~{Uw$UM3 z7y0OVY1q>Io4@)2-;mn&gICfBoY(x31*&2Cif?oVrsw#;E8qH-HE;gZ@mJ4fb-&DK zfpesriXs4Ip>0EmXWsYN@4j>Mo1Vg~71_V3*UlAppP9>wC~9S6aSrWmERVk=V%1DR zpm6@l>Ipic%<9cKL29!js9|$~aO|BL{52U8QN4xMJ@M-KZ14#73NziD9ND`kZ(lMr zq*;+J{{TS1Wn^KOzb5-eS-fADpLq40x-0{=m{bESFW~hxjG|@XNBS0i#0uNA%+%dm zc;HyK@bSKdN!6FJFl#i^{E=_`X@OH9(yaCcsb795Z&_IT>YkxI(RV0G_5HHCpZnF{ z!(tDFtiqVS-rB8j^TAvG+o)Cexx;tf`_se!b5Vt5>USPDw56*rZY)9yJ$ghANKyCJ zUYTW1MkP@l+IB_Q#-T%zis7;T+VF&)EgGIORs9|Qj?%(+puctPw1F#j`zumf-Gh!N z7WLNyl2rA#^&Rc+zcB4fK%lRP4mP$fK9a?BLNp9-V@~YPdwN)^@t$AztgwRm-pZUqjsWc=i}~@ZWZ1>U zR{d280O?Dp3f1|W7rU3<{l0f^ndf!AsG>t|KV;peqvkx~29F3OQDl4aFPc+d+#Ga* zN2t!4)8z!S;shEU{X75rt!1{CdST0`P1X0dj8FU8WSfXwm?#SluZH`Ufqnl*TgIB_ z-_#&#rLMi<&7U7Z{7Mg4EL+5{f%TD1f41qWA>2jmMe#7j#+@Cw1rvh@6L90qbP{zj zPi>slxireXBz8J7;a8I+iX{&YKT5_StmMIOEB+w0}KeDLK;q7ze(ioI+p% zv-x+N9PN2PO(nf)tLBg3jkCh7(z`ZNOxv7|$QrwN{wU_Vk$Ek4=8qyJd?ZWed0kNV ziEYs*CcF(a{fogxvCnan*NCWbxgUI-0FI;zp0+ zyMzvb4;;GbLqJoVKosGNGvk|P{9Hnk zB^VI+xo(2RSz@Et$lyF^P8dfC92!r*m)oA_`zU`ASg?R%%Z4~!4K~4-#&F9 zYuUXl%ho?`+5e`mhF{jvXW^5n>L zc?0&0f+pa|TPJjV%f!sxAJ)I$*miX0LvK6u)@#1-WrTR|tM}X6+D}x#&XKY>g?N0+ z#C#C=Kf8^yY(|b^4`UTXzG9T$&Oosy!Dp8wjyF8{_qlmxk??T|`qFe(5albbaEo|i z+x&;y&!rgHVv!IrYat;v)UDLh2p681_hd1Hs*1%0R0Y|L%^LyD&0(yAyn0`*&`S(w z^GD_|=*0mqCG4lFSmyC%ZtZ+lp9lL#-D-UQic{{QXAAd8oCTAQ35(w{;noD${NuKH z%)Q$2NLW}=8Dxqzf1YItR6IY2O_3PEqQT{O25R4*QU3_8fpb_G34}bCC29inqQ0S^ z>1kX|Zxnfis+X(kSXIZyAh0X5)c2pI{hDHV$M!8gdj$9`*O#DM7)z|IdSpihA3g$D z6+Hmd7UE!L6wY><=`@2UClt2q6@+L`4P8QHle!3T5L)5?w<5&BE+I;Kcp+4%nmrYY z_KXB4Wd|)u5JwV7pJwzYK{F%E{eL0-seq@yRc<9>t4Pq!!O|oHe8))>Jwj-)TNNIl z!Zqa^+<#WN)!_|fI~LxQ#Ha8?IJjstRH9K0W2Yfvf~ob4>X=3qYi>EJHgarkv&Ac@ z8b)vjP$>!-^>=bS+LP~|#1UHt0 zlZ2vjH9RUzb&?|c_>?r50OhA%Elkb#=y+vnyfkTC^3D<7-8K_ zaOA5?A0nnNR;lqL^RD`kTYKav_=Ef~Zn1)i0{qsA2Q(#7{)5yWZ9CiqF6b%L2z#zi#F)H0vraV^w99AC>IsYiSMJZ5)}*U20fNTsvt_Q z^Pk!Qw6F?KYfe5RnaUOnYhoZ7KSCogUfQQ0QnvH6Dg(|KRvuy~kHQda)cl*C%*7bO z!D@<$=+cKlqUytNPDA46#HZ=ZAPiY|5;iGcG)#1B|^ncG(7P&gZ*IN>Alk;_Lfop3GN z=BMMg+Q5{{GNzptH`4Sxj!ma;1H|*4L^P&>x@a4nZ95%iGa+8FOjeji z@Xt~dFkEhRH%^!R-55;7-?e3-w71yB3D&hkcEllENck>Q8z3@5YZ%v-H06>+Y0n_Q z(e~VBZa81hwp{I!W37t{#G=ngV36di3Vv6Z^wZ(!r6{f5f>EXEIg&pK(voL~ACqM`B z?{8z-8Z3fO0(j6$mghSp8WC)j1#Iz}*E8b1$G*g?krRwAN&xUpiGlemv|LE?m+M0s z2L#WvqL*%sH&PfolCrEfw5)RH3^(ARe3wa$vC?ORC>T#RfI>R-^o-r5TeK>RH*Ssb zN6%;3_LvGmE4lOGr!Zq5XSae`1R+eJg4u5p4z{#83m0UU0|)F1!|(N>l7G5E@5To@s*`zWMVtAb)u55z1+Ou zdLR^fM}1^e7&8j7M5ZR$#MHoSkkd_KOYkku5D^|EA^%hy`ZDM{kw07{G?fqrM}0SV zM6r}TYM&o*dEkW+-&poaNETWF;`h(JsZZ`x+k2q+if)T+Oaw)d z?U>EsgEqQ91nI;MV9JIfAVfm@mSgn&(Bk4M)Y4F>sXU4Ao8M=X=~f6MiNM!(b!A%e zT4X=W9?ip9(<70;Tr-ieAKczvGvTN}jZd^vxi9Q($Ka@;;7(?32u*Mzo8&=R?oOQCX3anN+QVwhwhvnO$l^P3?Zk7jwn6FfFMzn;LYVuS8FF4mUqJV&Hkc0^8d?pO6w9dI^)8c3%-&xI9S?(Rz(i4q^EN8gi(^Vkjp$I1(m2*!#v}+O-xv{a)ar zS+|=?>&n!>87`xIHr4|lAKj*FLhreo_S|dnujjABRie$OF(lr|Py7m|+^F~-&-Z*L zG$FSAHFBF!I43r+ocQAeLO@zLPq#px;5W-$ZDaJ+KThN=#Jbm!?aO+)C~NK=YU7WD zM7AmV${(|5mpc(UQ3ouCYvCpuziR^DWrVe7u4DrUasfMThz-xlP_}2|#2@2i$7U?t zL9UcSM|wm#&ruWezH4Lb#*r3%G0kv|P0^S{FIwZ!R<{+y^in1j?#C%SIHY($+A=hN zSZGUwXRh>B!)mHjgSd@qW?1Xi=Ee8}$(Ej6I<%5j6W>897WN7ec7#T`VcVaA{H3N7 zKrUnYRdv2XH@q8j6+DtKY)@ZFr-mg8wvGu(LtgO9mR|rc>lYxA)^Yq^u4p^Nq2Y)W z-Lc_|EpfW5sI2rbq1Qvigf6>I6pnsfS9ei484MIy!w#Yp3@O^}DA8{ahP)evbrg{W zu+~BkeT^>_%*h_2Tr$3 zs*FZKutFtmp7QV5%~8C|Z|yLf=oQ`e`(ILxi|v46Fr`}apg}3R2q88uMhK>`0vj+W zek)7>)P@P#3}pbqL$U`2h8CazBexI*h5`y8ksAttLMYBbBaa4+{M~Z$^2jipR0g3& ziz{E1tuxkMqKeS2(!Y<*Q;)nKcQiXqS#3{^=#0O0PXXhsd+cHB>D~(;f8Q(Nc1@kq z8t6hWw-=+~RlGkiN_2z~q3DKz>&mkf(B=pjQ)9+G0DcMQY^*l9hW zhvl7u>O`Ia$)0BbdPz^ArwC~YO9u#kcUS)I98QUMBt45RlCvEs&N7%)qAmO&-U6ke zViX)8Hd_hyc}f>fGYvm59xe+qJz+XwRNIjC}W2x zzaS-pxQ~5H&X6X9T38-0j?7lH*~u2AvkA9?MF{q3h-Q4{zYfQ*&}#MWSi7S->cM&N zUEND)yT>Q9H32XDjBQ>DnHA+f?~@(3uYtCdEE~a`PwsF#jUiUa5_0B!a>gwO?Pg7- zOU(SJPk#xwD3r1xrL(O)|Cmo-&n*!fvJs`@aUh3x-M*At7H8QqJ&f}3OFsQ&+J(p+EnmPv5|;ln<+w&OWaESAF^! z+-m3Xgwoj!pjDM_&*T6;uQbyj>=oV`NVsdqqjKHY`b9g$8+YN$Ls|gfCx`x*V1C z%a){K19UH4k~)IfYWB!^CS(U2`T zUEKQ;4<*8(@#mPV1@#+8JLFgewTGXlUVu+_7Q=hzW49UL^NJ}QiKC3Pw z{1Xo)Lz|WATI4G>_Ff)J-gO%fCBu3@4<#ZT;-N$Y&YM5IYSE}?<768pVSFW4h86P6XC)gn4o@q|Wjpb&x; z8yRUYt14b36XZ86S3|B?_G%-S_T8zzbT;p%R7ekFxAQcvCvMJ2W_V(%)l1bAZHkV? zoEcoyVqIZH9rlq*Tw&Q|lFe>R#G4{y6YV*}c_GLlmebirv;@FOe|<44T`9x;h7ME~ z{y;$1V6shC}!PX906X+yRA($mne*hNE?3)XaEf_Y*ER)3> zgD68Qr~w$;Oi3gMKNO_1k8Rm&fNXNB0GUklCV-Mipfue!Y-F^t040gm6M77g;ZI${*LvX<$W%3j^Bhtwd{AN--jR19kuE|ob0ZRE z_C+wyHWU_D>w8)zbyyMku}iVE-J>N71VCUb6y{n1N>u0Jk?-0OI%i$C({NPqnQ!*6@LR?K_!wEfsfpJD7mP3p~hC;S9^^gfn&x24b4;|@F zF3(~a4NF;wR)vLHh`*t%FAXeZR!xg_rP|QX?Mg`1C;d<0sCe!&S>C}uXB>A~{ZAoE z`EMvbk!RYN%M?X?Kruijxu7e+^o*|CSOA+yFM~4@*&-jah*kq)B{~LzU|IbX#qbX- z;K zhdi#tQuBJtEmt$x3Wp`mw%;p1?O|FZgFmV#meu444+F9qk$@fFzeVY8cVHoCNB0Si zUI#MPGDRvvN6v)kP0MD{)INWdTh_c$3o_LMXL%Vb#7&Mm8wj}-99hervPev3utW}z zD#wHl9?9U)sP_7iId$V`qJh-uenwXO!eMB2wnF_g(&87uDs82uL0j}@m8gpxL{alc z=MI+Rw#p9)qq@@H;YLAYZNG`Up{ejiezN_7KZzzaD$s|v;xr=+0=cYfK(uVD^}kG@ z$u^!oL4wf0_UQa*2DTu$?#1(_!7-dI9o@<(j_==h|7((I#3>QgfV>pFaa%~J0-kXp z)Xqp92&)ut!G<>z@BwUS=I3kL#aRdbG9dmUE(8nbr=T^upxAYhc2k!)&=5(ZgKeN1 zCd3OY7&^A9xDu=kq_WRJa5`y#`~9#_blDcNY!K0%|AZSXdd&qQ~^@OawcBa>0P+S>A?pk~^}Zkf{LNSF4- zOx{5MB1#m)6aiZ1h`cG9(SC4)ZO#TTtH>NyU(AIWu z#dPFbwzb?!Tmn_wh#R!k!0MeuROwh4D^^yjbgT>6u_cg=S;Ww^GS>vBWi}DJbZ^9@_Luv#;HU61e zG~0i_Cy%KqS5TN5Ayi|!kP#VDW^f|f4(?~-YEUsI48k9}+KmdyIOv-83IS!0V=Fzc zhU`@XQm<(~8U**V+KuS^^@50|2dNqJIo3JqL@CnJMMqt7slu+fV3P+bQL`iBeXIcN71`57PX<0)jOEb&H21N{2ITz%5FKS8mTDR>{`*@i>`IV2uoB zDm#E{!;3OweyQvZt_6e6mT6u}W&N=4QZa1Tsx&_sf;}{{Q8D^dlCoRoZ_)pH5hHb@ z=caS4fcPq3+#27*y=2|1NJ1QupUlX4(G4Vil`^fOa%I0K-Wu)YJu>-W)qo^?hpx=g zx9dv$J5~yq)j6|8S4>^Ax+2ODvRE6BZsvl)Xg`<1^P&&oR08-FUXFe%9^EkpII<|q zgc6Fq3gC7{?0_9t8R$Vq70Wj$raM;6T0S`f@*-Uj_lRAKyS0(YPID)lH1W&% z#jrhvyr{4;8-Ss~F}odE)KI{nhSI(L$_psboKaRv9$z>0~%`rZwsvBd#h;-jz>0A7}YeK#mH^+0MpH^VSHH%#q=^E_)!y zU&UO^qZlR3%{aj^=td-fOh-ww$i=1{o6by--rb4lVj|x2%=>>wkWgRH$FLmrAu98y zNY@ci^ufP4u-972hvI!Eb2}iV3>IKM$!C4EM7g!p?A!LaRu&>zjpdxf!l7$0QCsa- z&C}bj=r#UERaoXF5||@W3=0P+lK!zur_(N#rj-6^(IJYLOM?7#+n}7{#z+XLGW%-= zqggl^Xk(eRVl7I5{HY(4g;GT&2N9VmACq4U&AN~vm$t+}d1DfmH3qQJ#?Qa+cOv_t zTz)`ZSo@tHl)@^wJ2kf{zQG;bye zS_S~vq8c=g&OjjZ(N6>qDmFaUJ19pZ21Js*6cj$4a*SXM%ATL_qfIM|f!7Hs9t&)} zW#eu?v=v0j3>bz(3A;D81$LXrUJJmIn)u}{Fj*2rS5O!LE3O%%41>+;*eM`Ww# zC=Oo*{G~(pgo2TfCnl%;Tsq;W6qgVs(;6s!3)l{vAu$*TRAh*r2Ha;f3fwoE3Aj%% zd2pYX{cxY;KDbX2xX_EneQU+@<9_A;G^D{3(yvx#w10$&c{Oq+4a*v(G;Jx%S#? zt-bczYrhWMr>#TWua&r8`&x0Ia{JjB+&7So$9<;tCX8g%0x?4+F{EFpTRaMg)A*6f zce5Ii!6uVGl4#u&2H_Hk|66Ci2bce_+cS_(hB`jIjNODeoHEmYn}8)bkyfMlE2xCL zsX@V6D`ZVgOh^>UP0`j5o^rUSiybFJMHWO_#I7Ny&>EXb!7e1_g@HA5wxm`A1p z-{pXF*O|PA9X{d|XQI%5iN;Z(gs!w&i_UXE>%eLiENa9<8#3t6!<;rM1t2|@a!qT2 zW&j!hBZtsVWwi&lhYF1LL&cH_t(b_rMazi=C3$7HmZ%q$bMQf&em$ zfxzj^h?eG^mNz1fB7Fu5Bt~YJZ?835O`tM8#2pyX*EV@Ooj>g+Q@DHbr$m}4E$NHE z*42{O4$;}ea7pSzR-S%}(o zJ9c{(LSD^Q&YWUlqebLZdut6_h#ZJ?`?Z9_Jh8i{CnQ8pvhqb&K{5Uk>;&zU?zrDn zlEc{=wsEj1>B1P1+5x)Eb=ph{Wk4~DhEeKC%+l;Sd)?GPLl9jzHbnWXA-V(`0eE-` zc1>k*9SF#>vho~$9qquMI-BIZZ_JtG;7Y#oe00k0Ya$jS@jFeVIf;S)&*~y2B3GWh zZz=zqqjyS+h|RO484jo2j_Y9_%Q>mEr-td|ME>Y2y6UxNPr8uWU7*^tpcFReB9?Mu zrBcCy#kqx1!*V}1DB>`DWAnv`fNMzgDF9t$m=Mt4$hf>{Kph>IM1b`p{6@ybvVSe( z0@X4dl~Bi{icZKCGUnGXP>jnPfxGrom?IiuJv!bmJu6$3S*WHd)ut+Er2QPcgZ4v~ zbbSC$2>u$833>?u?Xt}AHrZSOr?Kvb;SOo68!0PQl)CaA& zvXt}ryr!VFZ?UrNeKsjK-4Qlf}vf#|RL@+D1m!nh&Ow*USJh5aYC(ky;g{ zsn*s&pH_#x@`mUn4fI~f(<+?=YGuCQ9Ug8(i>aF(qS!+w$=fQ><1Ec%UwLH|YcL9)qsPXC{5}AKV;(F|} zDGsjVGi6QjhOWmOxn>e|V=F>d6sUP;Wqk`-h1A>iE>r2EcnzAIDR>?wu@cXkpodqurZ=j^HUBSx5;pV4xzAcP`cS^p_JtB5deiQ@ z7LNH)zF^C@_(j~Cxd#tn;hj(}Z(OQ0P2jDT| z@7^hWGq>q51TeqFaNyP`5<5sAlN~miHc!MPv<*zxV62>l>UPjw?iA!qSX+|{EfCsc zp*cd%>un^uv8y_PsAxy412$>0AleG|(}N&F!m{6^nS^em4+*DKj5cr^%u;^Pa@Y>? zbv}sAY;H6_hf-&$@dMQG{r_G!nx7`bp0^h&8^_Y?lUs@T{GaQa+Cd3-@z4n?(|a}K z2KGK;p0y+&v`(;lE1jBp#$FQ}3l_w(@^Es}g6uY-dyCL|n0#uxiITFpgF&tz`pcq+ zbR{g733VZQ>`(%amY)E$#`+3L^fNB2y=DxnS1_#pDi~HDVwi3pg%PNKZk%-EZG7&lDKFVq;I8%A_f9B*QYbDir)S?1xFa9f z`F&kx{e!?Uulu{Ik}dldUYuM)JwNq1AEScuIH$VYD4&xUSorO`0RMz9}40%#z3S}eR-RzA#Ma1~wb zYer9uWl92wE&U}4Ag2EX0W=536EK~U0GgLjBzu@1s7Cv-K`97e|4A~OBNASd)&2G0V8fZI471B<1`HamxG(d!fH3!HAr(9gLpN z=oP(Yf=w zk_zI&$LthLki{M5dj~V1FH7Bh>B(d9-;o+Ham5`>__4DsLd6xAg_d!uhHBZt?*FzF z(KT^HjF=*{fyv)iMJiGH4|-4vg$8&}@b`|5p__+I9mGzbSE!2D9CloIngD)Mv>N;PuU5 zLQR|eXwFhb5VLh{*QAF@2OB8*k1-wCF?d>4pfDv0A?oHp@;oy)* zMM%9^rxa)#QBjb2NQ=HC^aFf`gVyk}W-G<98Q5FfoMGoBGCVjg!?sIg*f*wv?S9g_ zZDmV6{<`hM2(dZoXNRx`g@uPaT3JK;+32vKJCLwCk_nnb?!FUyWP4B~QDU2GUs};0t`%;)9eA15VTvyYPMg?^<#=X zN9;}?#FpFb@WC$-oD@!~+SB*w5P^-jaB|TXCz5WcQs9JeK;IAg?_dkxj|@>}?uHb4 zC=dNuu?f}h@%}!*4x&uE!_*!IUnGcdpql@L;FL{~7$i#Ge#!&l-w`d60Qs|sV~y+6 zlR`%b=i%sgr8g3V5?TF~R3_{1VnhN3WfcMV=tJ87ur1fw5YVn?!WOT&Dq-DeH2sA* zlRm)|%1S^g?$wPdQ%mbY+cqesR&_Sn&Jqkm?4gC=tWwc#N%rwAdq1y5Mzy@=@dPEa zHe11yTCxa#MajqtU&2l7v4uu~Ez&a@wxn211d~?QlJQ|i%ya`G#2!szak@<|=97n* zAkcrmm1;`fKn6T$`tKJpIG2QtPg@3ns`(f@)%^M2MAp+x{|M&pU*g4F7pSe{l7F=u zPo9C8{QL=DroT-&LLV$`2L@^4^z5>^G?obv@ zKfL&GN-6(@DI_^E$rGL`As>?4$^V&;H=UHdgpWN|ld(eyi^wmeO!B{{s|Gx3pnC;F zSf%Msw@#thv1K{?1b(RrXRxIv?Z7xaV$_2|2HRX=>O@r`lQMCn0+Ef_UXYT!UijV$(CqdmxvnKqQ<)S5)_{ z>dty<#-uSr$qD*lmbEe>1K8MMV>Yvd7Zo{!&|$}kJLfG1TFF|I5l7=!a71v`-G=Z12q3F#Rlm_KD^>X)~EC*##E0=0qlZVc*g!vs@fel!o z1G2wl4OblS;IgQC2P%ySaie-H>k{eLLdThDLj{;97}q1&G{G^O-&p`7)YevYa0LY$ z34qEL1g%Q^NRW$tSW6B`V~DMtyIY7g)U=#b%c}&?HGjAC?<;~TAt8miAPLri+RMP*Xd3g zWO&$>6}RExBw!O9difi~!)CxkwAC^CAt8rNU2Qcu*|x*uKph(e!#h!8SwrxDz{Dwm zC14`XMZiRzk2m9T*YlW&GOEBtme48=Ev_nS8YY_6r=<}lQUiB8Y7kHd*Hw{3d$t`) zb#PrKu4c?rAY+$dV$3n-E|3uiGGhnZn5dC`brkD#A){u4>k1w19Dry|QJXf>cx{*H z$bFwQCJ+X42_2PO!_f2{mQh)Wj6jNmTMg0icDQPsx5}1EH5~s(5>vebEBtOx)LChB2C=1c zgLoOL3qcJ@qYH3cj7MMQo;Pog%Fe1bs!t&nDBgCgp`rM`xiEI}vRO{Q+V#-j(J81?@bLnIfc@iA0 zWf0j9Pj!^;8S{&+(4FfSfS@(9c6)~HA$GZJ*~vSZ^+!96X}N7v%wssn>pooKR{X?!MM!Mk;x6Bqo$ z>rb3-<uaRKHqJHI*4Ee7v&K5v>+33VU8VZJ+$WFFg4HY{_XUq@AF08V0$$p$ zMvm=gGB`G$byO@SeRSJAMKLl;be~OIK7XG}Pd&YsHC8VS#NqJwrWQT`2Goy7_gn`Y z*^oQ_@YBz{Rb!{7tsS3J{3>}omJko7$Wgrg9e>AD*S%%^_~ak{A3w(!e%q)2{t+JE z**W|akAM2fs~Om}tj-8BdeO71AJ%xf)*5jte|?qmBW5~fUjVPR<7d?%T6-r`G0Hl&94h@(ZHu0(ItpE5*e4EYn2l4s5>EqvM z>iwHm`{{I~_)COG1{iwgC!>YnqFS5U~j6S(Odm_juNcsc?4az~uaPwBANB!8KKt zedVY|G;|ElZII_lzFJX8mliY-*^m0+=ONDzXB)?7BRGL?C`0nLcT+Ax&C!yg4lcw| zP%r{gJ}6)bGHnkN4>C)D<+p*zQu>Z-2_Q54p1pz(Zw!$DG?#EQbv<&901SCj4bu`w zrw}B)h;Jg=`d;*S2-X?`^xQT&jC)64r+60%@Nq8V3IxTq-IQ_^1MpuP6(9ko_oVE& zX(duYQ@#uZLva!rqA)vN_gI87hGU_EyS@$~h(`?Tdg!u-g)XZ-u+1<8?E7t=jxJ%+xN=%);b^ZxAooQkcWzO+-AOY+-ANw4l_UH!9tTA z2fUhi+=wT-@$gfKKZjz|Zlo2pb#{4hlS+VId%E15F<(zUNi$9!tw1*lU zzmT()9T#tE|BjU%YkOPQ+v+a=yOK1vqf*NeN>1l%NFv^9-mlo$H$htPn~bjR53u?& zXr;6~-hjx2R&(@@!iCG3b9oZS+(;Ekc8wvPzpzs7q5ZPiL%$>QIXi!+N+>{U zsn$0^5qt`9wF#95GU`;5t~(V-)Mmd`79D#KVd8~goWm+TjHask?+TKdUugHwc zq0z{&_aHY-V6M^5DL!W|+)#f0pCwba9;?JNT| z`hiuTA9}L0fZAE)S9dHA(4xnvRBctQ^OT%tX7s&Dj;uB@6}jH-H+bExZX6*uo}bHmQApwi700Qwm42L6K|-rcGTR zE5vGjl8{}mTBt=CZLJDSEh?Px18J%X2}7;r{$pu2c`W{ccZtNwYFH;mnD3IyZTt%b z287U5!=eWxL;s)g!2kb36BtRaoN<$!2fIb4YVBN}6gyw(rgC7BX!Bg!{u-O-(J^yX zFFf$s)xs_|v>6Vz*OnWsHEh#`f%6uewusPb$X>NU9&4~2Vk1U=m>)s9 zp`8lhq#M;m-Ws$)0*K?FkwX2AjHPd5=^DKqgyR#|`eux!A9eyDkzf;gbhZZ|-N^vA zwUjAM|4x?7gKj86$uK#PN?*Eq`a!GwBB`lXp}BLAZnXrVg-h~a6bUR9W)@1-&b02S zE(oR-j7-VC67`7Tb8t}iS5TOYM@8VJ%hYCr!tg4Tiil=HcH~T%qoIx;^sOMom=KXo zKZC%<^#<4vG)Rz5J(JCRC++6ut{*%WeT!(cosqz`!qol8YWE#$y<5HWw(g5KIqW~< zllMoH&?)B;JYYnias#_Q`VFJLTa{|Tchw#-)BCXZBAk^ zX3-Qtf}t0ipF}$w{-s<-Uol~*Mdj;GvGpy38Ocn=2>n-!j}B%uH?_7` zUH>8K|50lG;A{vmn$Z!O$y(%hv}*DWQG7t&P z^{80&O$TXd%psgX@Hj$YJPtBAbP?8!JO^#j&Tu~Wy|zUstA4X)&5(_6iaDg2&&Uw3 zZ%E_9OVvvsqvqNe0bHUk7xTM@9o#Ez4I!Gcp1 zl@PlOO8~`gDSFcP>c#(d@lmx{E(57U#~2{ln!q$Jh|pqHgKi0h!Q3!dScqVgqs`|; zGrnRZVpdOFmd16Z-6y%qYumX;vmM-ql@0Tqb2~zD{l!Phg3o>IyxaCDetM~U7T572 z(K^eAcYq~0Nl&)f{rm&kP0`Y(ho)^X3;Q#RbR9;B%DFlV*Kw1^W+tFjK_r|qPKo`l zK?o$(?o|e$%pQu)Ys<<&)+XACl;JG5!HH->kJ$Zw5(L3I)Et6U%jhA_H(XE0>4(LV zUp5iij74mR8HkNp$!xO|=S!|rSXr{Fp`bR|u$Pi8rM3{dda`jwk6%kiqEDakS3R%VcqEKOvf-pGIz=cdxUbcuvx~r(BZ5yE%i6vPTcCQ*n#V1yh3h zwA&)6bV|e-1luJ){6ff9wljP!Oz!ZIywebpd-Xs_{gz1k($RCS!0(L+x&2Wt1vND6 z2qA@Kz$M9LTTwf`JeaZ&$2yJ5cZ8$8Ww2FdQiDE8g>Kqd#d=UUV<0^>!6lA@sGNw7)QlC6wTnGr)wk7cE$W+8M2W9Wtx2hFnL@yS?Y#RAsRpZW=}uJ- z8i!FcT*ll9!06lpk4b1BkA#M|{bYjB+lH_;0@}0ruUKHdN6nka&TsqUVaffncbB*keyQ~M0{gQg}dZBjD*E`;A7=|Q0sF03xd)+L`K zWVvMTRrBR{@xA%5SzOlR%`;EQJtn5O+GSR)vH--DV%rdHI zNX|4`25J4M^QJcOKb94PRxqi6Yh$5vqSv-jX@+xk5cbeGEE8b;=y8@NuZ--UtdYk5 z3*W6Vz8|Uj1mb!wQJ0*gvn#R(qE|HAdZl?uuXc^}s@dJ8%`Q&=;UzH!+7c>|mV)6= z3p1eZT%f{25D^W7ue!-_G53Ifp}N>+fLtD6J3%AHrPmFz!}MFr^leTTTEjrvdjB7$ zSx=&2X1bjmV@A{BXyfLlY5m`rO)1cO$Oz5Pc23=M{ko&hc~6D`eOBj}>|p<$wN%pM4Z_ zE5-i-@lvnir!kTRYNZRby61IRSeIayA^{q0R$*FosoK6|wP`i3kez_W{i0SeR{#I` z;%9$?`lTDVWTXGcieb0xS{nVwUuNzQ&i}+>nQMyu1I3!D=-BoM)NM3w`7JE$Szq1E z1O3RAw)D@hvekZ`p)xVjXY`0U)!Q;P6J6m*M z9=I{#6o>^e0vT>DwUp+B=Ls&`YwCDEEp<((EMp2Yu*pgcg;onx9af+(N2Zl**!j{k zb3zo#f(9)QG__N|8KHNXrE4$w>h1*QN?NKgH;>{uSlyNQk?GzV)^@hb zkqG?kd4hNF1`8{SeiDW4ue^;Vx7|w;ePyjkG|nV&l-`a9U6FVG8P|OW)^P{H(lEke;T&1`)vU+loA@Swqq;pAc{F$T-4Fq7xL#?k#OUd+(Aj zf~LS^?#L$Rfzbo_4Ea9xZl~@bVV9)DV&!D9xP`r~r;am%>UG=oWp={7vG355ROoH@ z#c6%T1b z+7pAiIfV2SgEcq?G-<*%nHH<$T<|&P@(Uq7`aQ9N(T`uLd}IJdKYpq5aZ|A`3_ogj z3?3;`qO(cetU2A+IW?yF9grx2O_JZT3`CU@BE5{LV2AAbmQ>WAn;DpY5M7S`>LW1E6mYUu2_6p+jT7Vu=ZIvDzYp&kag`6gM^2`3c1 z!Wx!8`)M;u;e=B~{og~SdmvhrFHqSDV45r*0K?Ejuc=`Knj|xk(*z=Yp5XzH<(!T~ zgNT}3ydf^x4Wj#!TQ`mm7eBJXo+yqWXh?OD2lGjD3U9zQ8X2o_3DRPEJZ|NI{JCiC zOL)F0XrudOgWI|w-7hG32r+`k5m`f+?pJ7wibIA^6Jw#oTtuMt%XLf!z%Q{sU+5;d zXrVZSWB-)KlATu1R4)R~P61A+s~0w*m#44?OdK| zYCLuZb)XJo5CayUq^&Pug+M4+At5eGI^rVl%>%%B9E$3hk+8PP%e4z$smzbPij6e-Hc>Fr35A@nRt|xPC#3B zmzYMhkZB|&#NJywncPraoF-)K4lL!r4qYfo3e@lU>N{lax#~NP$}Uvjxr+WX)ptnL z#|=9AABgq1FCxR^;(w+SH%9bUNnkbAr)_>pj+ly*v{rBQn!VOUyVGR`CX4!5 z6P+<}7(`+&fqU|3(WA?zebQ&I_7V-yYDtOhtW7OLyVDad1`Iz7P+&4h0)88tBCNDT zrRii=$``-wF8XGQG<{Hw+NV^hky=vASci7Cs4t>P&(|Wc6)0k=e0wZkr9cRPeK6C2 zN`drP1#;Nb`Wi~~sjWn$Ps_-~U?D}(M)nKr3yxDp8`eHaVJHkIC7d@f29 z9L>2v1&-|s9JyCQa9mub*thq5{nkiCPHPI+E^cTfn=tl;ZL!ftPU!H~Mo9Y9RwVWb zmT?m#;fMBNBP8ukYdnaSO|VA#)K;SSoyG=_FdG_)=GMO8w`R1FO|&LL$05pD&Jm1c zIpz&MHe#f=niyiF?KcICv@=ry?^w}U{nkih9hA6#V;f}yIK-@|#K?xO?cNASpV$hN z5`37if{}0o`>+v?bvtR{Q9=S5uYgel zW+YQ$04F!GLNTws1|0t43^al^OO2ed?-RixK7b4lDUcMkv2U_@6U$-xrWfm5dXc`R z;|lbNt-$1B1;T*G0?XF(Y$E>bW#a4L0jfY%^r;A>%PTYV^`{NP+?1w^cR`J;u?jTSs#~%pZHLnOh za$1|_e)U=Quc$gN^ed2f^_<_K)OXtFFjFaD0xvBROWdzaRjQ;P@PSMsoCB zzsNz59Q*EmFs4g*_@pUa?P|C~3g&3@?+ypV~HiskrIOuUbVsM2K4qMM@r9uo!BJCZL zYk@RfVo*Ha-fI>*m*UCVoT~*+8?8f+$?7A#;GYrIZg|nL{#Nm#gEkYziw+o|ul5B< zDMvs3OCaz>VYp&ZKxyvGr;k6lvU1b<5kOJkZ@O^&8SwxMksB6agbeM2Nm zu1cztPuW!5FBj8lw*3=#TpPXEuG1 zgAy))-~0i&k=n<6;0QjA81n&nlD2IAKyx-kF4D$?jk1x}93rx{G4ddhm_?1I+)pGv z;6@|&63GI6G;$A-a%(eEkpmv^e$b;bAOeyc&S3F2GQgy&!V>mKl4^|DD)+~dZbK(k z;uoyM%^yg;p;0$m!5bnuvx^_Hgh|74#3r=nAaM_A(>vfZ5xi(OYDK|>D{$SUZj#8? z|9iFpS*-NeW!4zpVtb1^Ki);gICwuL;}J*VzyX3>=%}E)!-B(^E=n43lehfmD0nSF zmPHC83z++_L@$g|j@KOpuOrCnM?tZF=1kVs%bR(5$;ZEiAijGPE7|2Gl63R}0_1<` z3 zw`JYLHa@(0E#pP3ikIuwvYnPn6laH z=&K3dY&Kqe$gbh-f_=#LGj#462Gi}gCPT8^K6f=k<@Pang#4H{-BoTcL*uSuun76s zhP%RD$xyf}7#u=Aw(c%>djP$=oWUUEV{2~UGC=JH0H2VL<#r-~1+W1d(q4#-Wa2u6 z+jG7Xf*Zto2)NJtcmWRTK7`!!K3>zMM;NjCta1`*M zh}nc*1iLT#c*yqE$>QJ}^msNN+=B7ujqV1)lAjx$p9t*#x+Cs-!IGaN&Lcil+#PnD z=HIHH!_Ff*d(Q5Vdy8Pn&mrd#8>OFnv%5~Pjm`809 zjj?ARag}{Y0bgMsoqse1Zy3NEg#FBxs}m^NmFu>~-~|E*ClKMAUmunFZQ2HYBJ?Pk zh}cDixdeWq8HWIs850q@2Ic}aEcl6#sbnJJD1o^c=kRzX6f2pC*hOG2tYHg&0_qK! zh}cD7E@BITpNRdHOaww(Fc)Zl!B4~qOC|!_D42__plbu>mH3JAh^|PI7Shl(Eu@)S zT1Z2Xw2+31K_9MN)xu|W&GU$X+que=f75z4;IR_~g-#BJ%Ofp@l~$bM3U}EmKL^$` zRuo{~oYL;xoL2l|kK4Y=&;Ip{RTOh=o6=skIjy*cbGuggxn@0MZ461|VC``$?k8m+CCE*-Q$+(Y@D=;M?5lqRr57<&LB~fCSl5roV9SHTjMIT?PN!;ofxIgrpsu!51CqF@^_x)Le+_GF1D0 z)V2`Sfe&8eqqc^qHtgo;Zul3+p#7Nw4kGo=(Nd@NV;|^pSPMHuOt=C@g>xo=cl z6}+8OfV5tJ$FEP@ga+&ux`KH`0t4`Nn*yZudN_W4+6MFt;(3iQk4S(6-fmTZv|a

      7*%=nh0~pD<6_OuNjquK;OFt(#9P!3@H+R}@I9 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 diff --git a/utils/wasm/tiff.wasm b/utils/wasm/tiff.wasm index 5e91acc8fed64e28a47a1e9670b781a5a43603f0..3c04a444bfe464fc77da6a173ce3cd97237ee172 100644 GIT binary patch literal 185773 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 *0)}bFg{U0HprdPzd4>EQ|!pfxP8D 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 literal 190349 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≪yFe|AA_W6W+u2jqh+X+ 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 URu{l^8$#g30Fk~RwyyL41Hf*_F8}}l From 95dd45e94979da07a8bed49a5a59ed08eac97e68 Mon Sep 17 00:00:00 2001 From: evanwashere Date: Wed, 6 Oct 2021 15:14:51 -0400 Subject: [PATCH 090/120] update font --- utils/wasm/font.wasm | Bin 197663 -> 202127 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/utils/wasm/font.wasm b/utils/wasm/font.wasm index 3130367a82738427d5e1e5bda7c6559dcd66a79e..772a724bd16e05f3cf3991e98b7a9da5cef5f088 100644 GIT binary patch literal 202127 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
    1. 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 peMW$$RPx_62;|_J)q`~n@?t< Date: Mon, 25 Oct 2021 16:17:01 -0400 Subject: [PATCH 091/120] fix path --- utils/wasm/font.js | 6 +++--- utils/wasm/font.wasm | Bin 202127 -> 0 bytes utils/wasm/gif.js | 26 +++++++++++++------------- utils/wasm/gif.wasm | Bin 54150 -> 0 bytes utils/wasm/jpeg.js | 12 ++++++------ utils/wasm/jpeg.wasm | Bin 91769 -> 0 bytes utils/wasm/svg.js | 2 +- utils/wasm/svg.wasm | Bin 1053659 -> 0 bytes utils/wasm/tiff.js | 2 +- utils/wasm/tiff.wasm | Bin 185773 -> 0 bytes 10 files changed, 24 insertions(+), 24 deletions(-) delete mode 100644 utils/wasm/font.wasm delete mode 100644 utils/wasm/gif.wasm delete mode 100644 utils/wasm/jpeg.wasm delete mode 100644 utils/wasm/svg.wasm delete mode 100644 utils/wasm/tiff.wasm diff --git a/utils/wasm/font.js b/utils/wasm/font.js index 398644c..8c0813e 100644 --- a/utils/wasm/font.js +++ b/utils/wasm/font.js @@ -1,13 +1,13 @@ -const {version} = require('../../package.json'); +const { version } = require('../../package.json'); let mod = null; module.exports = { async init() { if (!mod) { const streaming = 'compileStreaming' in WebAssembly; - mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer())); + mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer())); } - + return this.new(); }, diff --git a/utils/wasm/font.wasm b/utils/wasm/font.wasm deleted file mode 100644 index 772a724bd16e05f3cf3991e98b7a9da5cef5f088..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202127 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 cMu4Vd{NEG^ streaming ? x : x.arrayBuffer())); + mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer())); }; return this.new(); @@ -42,46 +42,46 @@ module.exports = { streams.set(0, this); this.ptr = wasm.encoder_new(0, width, height, loops); } - + cb(buffer) { this.slices.push(buffer); } - + free() { this.ptr = wasm.encoder_free(this.ptr); streams.delete(0); } - + u8() { this.free(); let offset = 0; const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0)); - + for (const x of this.slices) { u8.set(x, offset); offset += x.length; } - + return u8; } - + add(x, y, delay, width, height, buffer, dispose, quality) { const ptr = mem.alloc(buffer.length); mem.u8(ptr, buffer.length).set(buffer); wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality); } - + set comment(comment) { const buffer = utf8encoder.encode(comment); - + const ptr = mem.alloc(buffer.length); mem.u8(ptr, buffer.length).set(buffer); wasm.encoder_add_comment(this.ptr, ptr, buffer.length); } - + set application(application) { const buffer = utf8encoder.encode(application); - + const ptr = mem.alloc(buffer.length); mem.u8(ptr, buffer.length).set(buffer); wasm.encoder_add_application(this.ptr, ptr, buffer.length); diff --git a/utils/wasm/gif.wasm b/utils/wasm/gif.wasm deleted file mode 100644 index 748e86bdc40efca56ddfc2c2806e569a34479d5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54150 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 streaming ? x : x.arrayBuffer())); + mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer())); }; return this.new(); @@ -32,22 +32,22 @@ module.exports = { mem.u8(ptr, buffer.length).set(buffer); return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length()); } - + function decode(buffer, width, height) { const bptr = mem.alloc(buffer.length); mem.u8(bptr, buffer.length).set(buffer); const ptr = wasm.decode(bptr, buffer.length, width, height); - + if (0 === ptr) throw new Error('jpg: failed to decode'); if (1 === ptr) throw new Error('jpg: failed to scale decoder'); - + const framebuffer = { width: wasm.decode_width(ptr), height: wasm.decode_height(ptr), format: wasm.decode_format(ptr), buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(), } - + return (wasm.decode_free(ptr), framebuffer); } diff --git a/utils/wasm/jpeg.wasm b/utils/wasm/jpeg.wasm deleted file mode 100644 index 68c8cbd22fb6a3d976252d2ffed334e2a3438869..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91769 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 Vrxt!Z1lKMK7BYR=+VuY7{{SUcU$p=L diff --git a/utils/wasm/svg.js b/utils/wasm/svg.js index c2dda2c..1694649 100644 --- a/utils/wasm/svg.js +++ b/utils/wasm/svg.js @@ -5,7 +5,7 @@ module.exports = { async init() { if (!mod) { const streaming = 'compileStreaming' in WebAssembly; - mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer())); + mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer())); }; return this.new(); diff --git a/utils/wasm/svg.wasm b/utils/wasm/svg.wasm deleted file mode 100644 index 6deebfd286291871029c6548e12366149a5507a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1053659 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

      TPDM)F>T{bxV5UG*Zj0&w2c&E1aS<|N zIN|52mA)VJq3jT?Y$?-CWNb`0Rd$0izXoC%8!-sRl7+<;n|m|zk~6-QZZ&_BXwNC& zp%$Z?js9yl=x((_wg2I+hUH<_LRi~GKp=Q-GgAh0i6qeq38@1?p&{Fip;+Zt`300s zu8!JcW%O47!{C;QRmh|CaBA;6grZSXE(14&eZjOx@8F zQIQ87)Uq%^m*hmQjI8KE)MQ2FsD$Nlv4syv#i{9UAk4RAS=}xX=9`rI{yJfXva766fIhbjo`#Y*+t;D& zrY}X9cTNA;?S?Sl)>Lc#JDTb<8)3f92s3Mi2=it)xSttfj97*tc3BddT-d^Jaw8K7 zlyFn@c(%-e9jY2N?!}ti6ly$;6$;dN%xxCst%~w$ocM?~P>WNP#x$^ZMj62orxl#h zG(>YN0;OyV)C5!p(P!QEcS}K*T^I6w&+bm+bf78zqZY{e-wc(7E?zzIkt{+p*^x7@0uRq-x6fDZJzvMaAmk>?pk}05R zvn9j$Udaw@Ls`pwtaHe}U@NC^yT%3keO(!*uf3@`b&go8WVYGsG$m=qAHgZIU<%`A zv#I;1uW)_RAI3`0>^l-zT(=>5K`s*B3bbDPHM>$IWfX0TE7kAIwsJH3tpIle?CA4( zPNEd%jzFh2V$-&nz5jaKOctIQ8%)-$**2H9r_|=scA0*2soj`1kbaYSOSZ|pU8I7Y z^v&!hna8)Yo70}p_G{YMu~lRPNmv9&+f1m)j%@Skx0mcsn?BIo-l+^X8WCdexwHQD zEZfBTm#V$7y=14Tt*yKHO>Zwz>SQv9jiuIDkiq6!bwBDtc-d7B*iNrS5#D&ZmFm*2(;MiwBbX* zRrU9FUaVjojgdQ}8|NBKhQrz@m04}G+bHZFylSpl{h)-|=&w;`>UF%d(dyo(?NzJ0 zOZ%!;cgMzpIDAw`c*eussnd#9S%culmwdxx()N;%D}(5N$%g>cfS$n_Q)KXMx=iEx z?}MsdlzUO)u+#Z5PY_#W|IV`~@R`slQW*w@;Nsk$E9ZYBnL_{@pt&|Iuzs+&?e2Ua za2dVd6nEOF(-ZD9%+^Oct(h$WsoU(b=yq;GMaU&^zaAw$TRXckqym)WA?{=ZrggVx zBJ?!c-r42aC7G?;HqmVrnyuSZU2M98uw6Mj$qAUUoO(U6U9ij|RKXgS5gf#>!YCww zJz$RB8(^85Bi_3W<`^C9dF@oRk^_bI#&YQ)-s z&6s<@dynD$i1+>$UZ+XXF6*lNdV@IrYh6*?q9I*_d26z`4|A~qt0ALhZ&ybqc1}hc zqvvEvq=k<;L8?BofD53#ih%$c)Z} zJ`0DisJ9hpb|BJf*Oi@)E^OMQYs8i$E%=7bSJ@8Bn|NzJ@YFoSQ=*ZT8mN>2d5SI_ z7}LR38y=H6nURXNbc-2}U;@NsmvN1XYtax7X?G@7M_(y?M`j!c11BAt8Ckf9Ek_y zkdh-GQq&@|`k@B`&e+~@PI>}c#%qAO1M0}%3mm-(>RrwW z9X8+y>dtLQpKpS?>fv#bsZd82_}WlsT`{QNEpQ*#eP_U}5x|rnzdth-(4Pa)HoKnm zAa!JU%6m89#jLOZy@(lQbbvs@iyF*b5eP!{s~*_MmvTl1&KyrZi9!LDI?(H>8YYyD zbr6qHpq#^k6+e8g;iIaJ3S&@7%I+pRZw2)(H`aU7;3EkQiO^r zq~u6`H2=l)$k~5V$qZhkx6*{se`hy~SQrsRgMgcO)?;~Vcp-Q4-j5eVl=pya zj~&g&f+`>*s-1gc)($ht(IRBAe}_EL@n*7^^n-QklCM*js>Bx=b!l<=?Ti_^bv0;) zQJ1QxF4(3Qb*VD(AS*546I+%75@bSE(m*FZ7Om-2mRg*bC6`<}&m=)cc3QOF_nB=Y zjX<9c?^>X7QWS==_i0sbA+jDuoTitO>tPU3FA8U20^TG*!R(*VG(YiZs-JkiE(wt7 zt~V7%3wpeX7@p}`bR|ta|H}Jf>Dapc_2Jl)w15Kpn{;zuk(lTQKlr=N52K?SH*RqW z%I;h;8*ZMr)wN0#Z?V}xpWW<>YgYAbF7BqzNW)J7LDTm@9Yg$w2b$W^q$Aw;;QnbJ z-2ZwXG_G{|8t!iTpt)&58@W+ahOxPv|8Tkz@{A8M#Lqssr>Q3OrMdHA=0xul0G;SR zI1LKOBwS{F%`{TsGcYfcv)jsRa~r|eXf4YSd?V*GP`JW=#ueFSQJl>& zP^h^)>BCW6B`NSqm)MpfRY#s}$!l05*cQHp669UM&!z&8p^I%H8O(~(GvEA%)Dl1< zxJ0tUd=;_zx_?u&4d$6z*#JkX1J3~LlI(11KB3p4V#+-up1%N^migxvGY%vz7T1{D~EH_FT!?zzSr_2@Z*!wTab#9?p$5RPnC zT%7wk64GC=_1GT76YJIEx-QC{&=>FJ#+=-%xiKeq4PpVgW&8G*@upwlTPSU|K=-gt ziAC#i8@N|0mzDAB%J_mQ{1{kH)xC%VqvuH-{kT^m;dKYsQ~h3EV#5u>A7?)hdPWG# zR{N8lv~U#&(F4{Dk$$z(*VvDih&(HNp`G=d1M=B;b4EX%-Dm(sZs2g9cM?21dP)x; z@V+17@>vTy3r3~=jNB0f=SO}AcIX9Y{9i06%swh-lwB7ETE%6iMaX{_9RD0G z8vNYxpGgLuNEUo`)YDmhbD#KHmi5r>P;I*NM6&SJGH7zcCw|rqQP8VpN+Oq4pUdrW zL!o^9`|nE%7v;84#6UgLMf7w%JzcM>9ANjt&(hR|Pq+mkOZDUv$6viN(1y2u>!qm+ z1~fU82(fA;?y+r>o>a^GRxAwPo&MSr^)~PYFM<8ETlllb8>#I)ItE@wTY%-@Yjj;( z_(6MO7{*1ff)4H_W+3J(|M2i&yg(2PP*|{uvrB-HRo)(B&rYldkBG{V{e@!SF}7qb z^btjHcv$*3<{~Zj^2P-d#T0~fgLQbA&BrWwcJu9;WkqegA;ZPD!&qo-XQmYnApSLs zBbg0H5w!D`$yA3^KUSlb8=IT^*ED7by>5oFh!8?bN zg4drY1OXSKp%Uh%*u#{0Y+D>%3LZaiN|$L5wC4ux45z0u8cSv{Q`bwOW0Rk(nN)0g))9XpAQF9qc7&`5lxP zU`oCkw21PpJ)OQ4oxFi;y|W|8diN-aQ-W*Y4@<878fZ$%VfDFyHjAmmfdCjG)r*-K zrSS(;0`LGJ@lQR8YcONRHJ~>D?tri*COKoxn7=Gqq8U}*=M{>m!oMoMdpa6ffeTE?Fk}pcmra!uT>sK zf=~_dgk@BWbhlU+0bLqh2lGBHJ<(il9lH)KAT!8-x(At}bU}@p>8B;R65pd5)+zQ9 ze8uFEs%3h0!Cy}O#~y{AF^bZCLMK_~j|?pUf~?-4nH5@>^r=_<4u|(1BH=O;72&dB zZIwPqm57guNjCuutY%}@N>21cQ6&QBUAL|ia%>)Sv5^((=z}ASZHi~wG119-HMpS= zvcWcbW-GdFc1Wy$!Mz#qbsG*sBIdFv2AG;~b;4#P@;TnL@pITH2Bc`7pQ-aQQZ&z# zB0ZKPSv%Fv#YioWw8f}TME)f*Xf$j5b=1TAcbfJE`bNvI(L^XQ5ts@*q3fptV6mw{ zoPmah&7~`1KHveYU4g7*O`1Z&ppNYSw8GTsR^G@K0Bv=4hqNe9LQj#@aW|q)9|B?E z>_vP_tFLiO{Rf@d8CRrsBPC+6ZJ-n#>riIzRM-7n;%Y(w1)P`p9 z{v688>)k4pNyYq8XV}ri%kkN+C0^kl>E)3yJ=wcNP9vTd^C<{|;N%;+W<$+WtbKq;f9)T!L2X6RZY{#R(>E(GxDN z^X-)_Pq0WiMJ*2OnW6@Gh@2?iI@doHpnZ;8%w`Mswjp@#A(tr2pmr0K=T^#D5kAm1 zY>EE%4&g50gC%Y$|5VUY;&6#u>Xz|Od6yA~OWZQBO83clGXyA;}I{>q|a+o96KdE041CQlC5(%t*D-JC|n3KEu6#cMd)HA3v=G}0(KbcqzdXx>rVzp}&+?!tW)EHKFODbG z8LzQo$j6mP>6s;^>UwwU9!-y%V{Y{;JU08eWUfXFgBO4OoA8WzR}WsrE`-cq;SJ^2 z%T$oMoL&azjnRUHRG2Ujo3@l&Gx8NUt#QS*xfaPh3Y_Tp*BV=Ro-n&ir59QC3CEK> z?I_=ROM9iDnbTqq4*-q(FyEmhuV+hea&3bjsNgw=N;Y%?>28P#~a~zcltN9 z-Mo#_0zO9|^Dzl=*|=Ya!&2MN{G*L*sSf9(EiT7qeQnO(y5Q_-MDm{&R~?a={T4MJ z`H#Ktjr=D^_ZVxI(iRD&`9)Gu{g1Y|ALqHc&8&V}=%38|dbL;|M0{#mH!&Y|!swI2*f zwRuRyOQJ?3m-C6!A8wx&hiA4UKg&b8Am@zsBC2Y{ z&2yDr9KLEYsd63p2XAxU0oTm)yFUE8wOL>;iGTYtd>QiE_#8PG^U-Cmq zjuETpLQI4XWZr5sRHn9WUz>M?*$V$I=q-oZ48YW8yCa{=YU`d+Ta?unav{8>HZP2_ z7lr=?YRg&QdIBVULwsM}_8NUF2$HYaHwmp-PV2d}4H9pHvNCgp1G@*33X7-$ENu@Y zZP#i-S(rD7A4odk+my(P{6K;PU5V8Pm}KlgYs6{Sfb$^gB5AQ9JJuOsi;?vwCcv-{YfwMP#qBTRln zIIPq@!1kk^Pd)JRuALP@U^GCyWZgpXPcDFZQ7(W|cddH{rs^boXsdNkIK_ZwWf-`v zf6;VsLqunQTg2N%fw^l*1@6jBFcUQc%nZAAjT`JBjmVX4MqFs8Pzr33v`%lt=QfYO zVG>{j=QXEEo#50-K!e~I;eHdf6<>E!V$IHzw|Z?wCZ#6LUl++ zDObB!*h1J=L>R7MWI($kg-Y8*-|}>fzpLqFEw<>Z)!D1XLIz%wU7~i1WY62e!s0^q zoVJWi@2eGO*&&shImU>x(SbuVM${IOl3=S04u?r>Daa_WgsM3Oe`j;7_(hlV1`dp* zOq*ji=c=C&E@PP2ZqcjPa9CW;Ob>I1feTHkBZcauy$hSQ00#!J--mcSL_8OFzQuB( z&8m=OI)rF)#wx;eLABvFDL~C;H%31BcP8eVw$en6Yjgv{_f4#2tN< zv{Rgsaqfqx$H=nz3HLR^C@DwqgdtsInv*=*A_5N`6XmJ1ht)6Uqb>fQ8gN>xQ&%CEk06!4k=oXs z)pAh%7M)QWW#devAIcR9nRWrnd!dbavF$B-3OY2x){+*zZS5l@iF~c%^Z&%+b!25A zR_kA$(R$J8e?se3IBO}ttdm-tJ&PSUcQM*W3)5j50aJZp@xd&Kik=$GDzdaELpF8|{O4s3Dg;F; zZd+PuYO?C$ttzwAYwh*c_Os?Ln9*9-Wyh`3En)Bj`tqinZ&Y)0eNIW1{J)eVx!EKo zshjVIyS~A2(e(D=i9!S`ZA(Zh4#F3_R zzIwKf^>o=R@L1=g;mASUrA$*GepR#{wNjil2+MJXky7C-MJ+k6gTa~qpq{|4$nM5*Au%S?6*1tE3404|@yf!; zHv*gx9dCe2lB17P3N;rqSF*m}k#t25OG-Ead)qnbV0XGG z1&M3*3D@r3<3Igu`*_mfx^B_^BdS0>L{2dP2r-fgc~gk60my*$+5iggAP7LbgD@L_ zRD+<^09Apk|1$u}8E}gL$Us;DK$1zLY1)CbU6MyhcX>>VEhFGUHmV`iBAQ=?%=pJK zP-K0#!I}j*m~#!}X!~CtIn-QC4|G(g_nm2S0UIQo5in#HNc?5qAW;;}5vI+YCm>G) z6y|?zGziBk|621z%?)Uv+2^<`fW%syMZvWh|6u(TVndMrKla`QT+iyd?|d)cx!=BX zKhn`LHkPcw(i&9o3;zHNzw{aZ{y3I!x=(fBUlbT5GSh_S$RD_^_KH@8AsoHH>(|M?CibpAnDvhzD1Um>EVY&Dqstrz$du z{}NciHp$=c^}^|3h!YWXwW5QbSm7|r3`P?zmJ00>0xLvMv1g+onN+n#8W)x49;{Tn zHxHwNH*3ePYSioWJb&g)Akhwm=(tum!=AZCk6nFhc+v@l|q0l&eB6MY58k_yqS~ zB^yY3Ny_Ys1ScXDZMf8^HM)`-HQkBaeNE6+p{5G4pdjL?kZf-%BtaGv8d9^1RTeFS zLP#!wyJYZ3mqW3BHdDx4jgqV#VS;`j$yjAlBDK@Y`i%N2)BpG}4nGYY*NTl=$e&{5 zSizC5*AsJwqL?$>Ddr5m#|1S!&(=vcKoeCrX?758nnzpe$<2}076-YB18k8wc69#r zbCQgkoY1W$7V5mFgU7@|?YJZL^lO@Gu`sw;xb>hU!$=CqKY>ng&>q2Ovt|r|5Um#y zV(v^blqW2c(6YY0+oi)>E9sC$OEvNPw(w(N_m~%j)0a?BRnQ(|m2A2o$wVB1T3pFARBeL`aj72nFhj2rEi0&-w-^N=M#Hy93{PYJJad z$i|Oc^dSs*?7Af)!;O#Vc}EfSIGYx8dLB)SoyU$JM=i5`Dax@Eo#+^ulBnM0i*n}B z%Xz%KH(@@IYpj?WK z>t&N5&}g;v7;Igr$7pMp9?jNnJ!V=L>9NqdSdVqBOTdqv4$^R}xa>IF>>K@c?pSg8 zajuFAgsRX#ZOYA6n{vmFf8rC*6sb0ZzCrOMv0o+04=z3vif2N4&!Kx(e4PtB^=W6= z{0aXmR*{4a-qfaJ#m?jG)nDSTv&V|P>d2TvNR_P)02%FMaD zqH4S=8+vqQCahIg)`pFBSL8OZ;B8-Utho3%J`NZ8>-4eW3iXT&xAf05FM7n@7pksI zpSvrn#=Ek%M^~o9g1WL0Hq>1K4Q)FBYTI_Kxac^JP`ka=$z#Qp>e)8it+k!CtHbU` z?0u^0O1**GjVr3gyRy)uE0bYLU6~4N>#oQ_-nK%o4qJ~EyN?s$VwZPi{#bF9ddAg` z`sbOu9WB3tzQV~ZX(94-qJ>f_~Mji4qrL)TWb6@mKPK!GDUs!Y^932l~<;O}8VTd~8L zM^ZjxJhP}tx8@?POJSoNh7=Rk%CQ+|_lmn>%2!fL$5w1kO1DUJNK#2H7dzNzQFDgKqF69udvhktP(Q75O6zpZwSm`Yxg;B0OUhD~b!;a&GbP*%G zv>P@%YS`@QF-x<~TnGqL!vWMc912*s_w3ZFW9p%wqxewm{PhVWC&ko9m`~ z@v*5et){nhkO})-;iAwKm$)(%U3{x>zGci}3WhdC(|C>aYPzVK?!~v7VNy-6?H~)( zg|OT4`>L?9i%%iHh;JElkdKS_6wh8wYf(NopP~*my%5%P%ynPb6&6Kd-w|3}d{%&al>9vTM&Vm{dBO8V%4kVW;yZX@(@W(g%6*x9qj9*+1?-bac)K9m z-`Yb2j!h8#?D0=Xs2_taF9|dLG76z)j63g>D8u6C&enHA#QrOu&^G0(y7=4hIJ^=kUky6MoP>B#mr z7~Auv#e0nH&B69ysDzQ|6z5nR^lof#mc%SgBX;&`y3KLtdNdu`-X>#vRnr5`_GV#w zaNN0-Y!8kran9J@42jyo%}JpXq-~Bn+oS2o_U4T3RZaIh+na&y!Et9-ifeFOiEqaC zrb$dQYIC3KZo18JXL>Xp+1{+Ny{hRxXM5A(DskMImEsv3w`O~C_Y>RW*$d!pjyv6> z>B#nGjO|rTH=ONF!uH^}(<{X>IBw1MBruBY@$A)fo8wOQXgadJX=8g;(_G>ywl@#k zgX2#26u*q^NkA0acvCSZFwKfU$+#2jruc z-D_5x9P-c1-g%UgA)my_{^wk)79T=`ZUs1{>Cl(yc}KB$9BM-YfNR3UirHh294{nO zw&*=iL^-ig{6EFw3X)OJMiFi6+0wtGo-GC%_3WL>g&~@rEiE?c+2W;9&qjf5>)BG# zqn<6rJ?hygw{1Ne13;x`OL32SHi~as&z2S+^=v8bQO`yxZtL0N;8D-UvQX*SD9mj= zo5ezUHauN=Hky+3Y*qy6*(^NLvspK!XJZnOo{iccE{mWv6?0pq*tSg1z5obs?2>+G z!=l!8NH?x}-f?BKjL@>_%jjt^B(PY1I3{8GQ9a zy6sl_VXUaDACoRvPKMcD@MvqeQSXgq?W7f$!;M_avxRm&72Q+rZrtk_jhV4+@b56uk)cACZRJpS!so%VbT zF6xKG!t>~diG^MLi24t{$G!T|)@@;)-VcznLtQoPb;{e@V%qB@EJ;TjE<}>>{B^8O z^g||>E%bxu?TcOgn5u-pN+Vo>A8o}JPU`)T79Gt_8%%YbsEjL{qw2aL=-9=9?WD9}^r z&uUOi*BTVZL8L*Qnm~|4Rculgd2y9ZZmqMAwY|ZiiC+Z{;|)GeiNlrp42OVk)Y|h7 zx`SS5{KE9Z7UFEJF-y*kinOehmBvhu{1BE3DN2)hV*dyw^}j~9FC_@!NdsrlKSUUbuz^7dBqBhC5Zuw9z- z6^P$x&c?qSRK~i<*bZFYAphFYtKIGOgk0KgcMu+Vf$F_dD(rUWSKh9%Dl#sh-M7N8 zE~wkx-fnjQp14i*UL}zx@+WWCSQ89u8|}Uo{az6YHPCl(&2|i;yEtt1 zmr*F;qHw;yjDViI!+HKP49@IA`!d}+XCf~|AF`JW=dBW#LEZ~{ zot2)v*vX)gg2~v!v`{`=g64EdxFjx%ojO}BzU_tFC8@7alG`fu<&_*SCHXRG$1Uex zvo5YVI+&zp>`c~FG;>x1vzr)u>uk4XZ>?VKURt9=)Fg$5vd+OZ7oEL@UhGY5U#237 zXJ#tuYPS~8WDDvVZ=0<~ySG%=1Ci7QU zyKT0LC|&7Gvdh6%7o5GVaq-LBt=OB`s&qt&U#25=wOfl{+8*d?x6M{DqF3$8Ccm=Tg6IQwJVDpY<14r+k7wfCblZYRN|E> zrd{pU;?-QQcH3+zuvKxj5zHt=OB`D)9nMoZ{Joj%smgU9WcAY&9BX z)b5+shhO?!ny)`H{^7yA8tT02>N@7V&GS_CTJpNMBqRV3ECuX{%6PLv~t~8`$nDlNLTR z^6BN7S^z)`>UY((VU+t|aOTF5hru0r=B; za-`%*Jvrv^1TH7??a20fcnuCyb9Rf5x{sB+WpSvn(8Kb4Ato9 zUS3G?tmgT=4~|go3`BtpI5)$|6n@(ye1YK=4!s1()p=p_P14bsL3t!qzDb`wu;6%h zt1w{@L^J1_KA}SdzpzW8t)pj>g>OB>Y-wUN+-1($SrH~l)jOb8%#n4TIkLIZ9La;$ zXv$E6N|>VOsZT>~^(im|sHYZG!u}Hn#6m8@sYnWUkGHcPR`La^7^Q!FgZpvM zc0{pJkdhPcsk*6|qpWc6%X&hGFX*>?epS!25IDD6mm<4YZANJoTs6|iX?&=BnpSi= z2*0+$cxZ{%bbv@$Dtn&@z_N%3fVWsY`9uy-+6K08HyurJb}1#CO_NK?9Sn*EC7@)w z+nLW#r?lf?6yQF|S`M?OH-i>*j(C4zShumH+9PTS!9~>ao-DHwF#~a`vT?U!w)?-_ zY6j$e*HA<9&U@smIC{-BwAHr=zB6ZJLj&Nc99ju#Li7k894)1bYwPa=e8+!{W*}YX zvQV)+1gBIb@kkVBhTh52>%A)EIjH;Aaz0D98RQ0I{0c>9B~G+BJSp#j^&4gO3g0;TmtY=jd<=eqE=Y()0`_c ztUC>G)xvY|7Gn7*`E06#c!@xyHNpaag2<&>O36_}{oW9ZUu;0Mfz#2(L*TWe)9KjM zvsF{iNA?99WB#nEGj&s(L|evD)CR?c12&ZlHm2AV1wKFrSZ38CrxUFmh9ZU`G(Kb8 zM|f*z)+Qo{jyOqFALq~!A$fNWZRj{*sCw2Q@kB~9;OFycs|Egm^v%a}7Q|uPB+Cb0 zBnaj1=ASBL2n$h9o`L6NuY5l{rTH}ClEYs}<_qWKwc6m9LvR(6o_fOktJDXGr*E%IXOA>g89^|oOA6wo4kR6 zZ9K$gMTN#4#dzTd%A}Yo5XouPc`kA3rtX-dmXOv;>rX_{_*=s=k*6V^7@rV}#aMBZ zGy-dCJWmtF8=?;)2X{8s%G=Qm!%{oJ=DpqAS<)iK*Busj*bm33i0WC^m<}qi-&JiYk#|TKez<(~ zYhP4^f&=MyLGnkxZZ8ym&{GH-mb9?gR+fu#C=Ii1aaio(#z9}(8s!6)q(_bN)x6Gq zB|m6)oM}mJgaYcxt&vb1NbeWH(P3iua!^kK=}|i2Z7WX>~? zG|49#=55{30t*VZs0LvyBT7f4y7p6F&PWOcxS}jM{?lf8DH6^D)WwbW4gFs0FwOHp zt5%W7*?Kdtw65(g9 z?;%)^;IYlQdqAQo!}bR zjt%J(yyMG>c$KY(yj^84qGMk6tLgGnpMx*=Ay)xwab}kW22>wVW!)xtoANI;o+r=w zz0Um<0glj&H`~%ms78V%h8$i5n-xoH=`aF4wtny#*+$JNfFl%T!!8wF%E*f^TNCy) z|NOUptsnJ6zU>zBonvHlvlv!4GPk`};@|35GDbi`&5$5?a|3?{hw{rAM{OKxJH+-nM<(UbDhg2TP>lw`zQ7eo&^W=yCq>XY78GujWLXVULO^p z5z(-XE3otCH5!cmsZUQd3LG)$fT8kP>;XCVMVXA@tH-R#hA$W{J|h{JA3e=2#(F;4 z5PH+@={}nIin`e-e_!dB3}Q4P@wsYm(@K#cilLyRQSz$h?jlK3{l;_X6&-jeGE}@(z62PFsm=m10N;8 zNI>%?UHdSCh7-}pn=%OJ<$h#E^~ z`TWm6o0J2(*=<0I^l9Cb?za6TD-$gO1pMhtR_eF`RkMt(&y1AW3JbwZCpi!*|BFjl%GE-Dt=*u`Rg zWim_Vyb$ekb`bQ6Bmq!Hp|-Z3fn1%>iZzG{^k~Dy(YI2$VC0dARBH^v5=I)?Jm{q_oXmwp599BM9=WZpNR3+eeQ_TGBg%Qi?J^DNz2z?) zJ=(AkVdAOGcqNDsxf);%f-+%5h9z1!O`u&ppS9}-NSs2p5sY&Cp`w>;QCjOol!4B* zUS!pJVUbHBo9bFGPSF`#F9>y8uNTaz2I+GwJ1`xQvZN;y=d{C6>hYxK3u z7jem?G_qQvaTIGyGeutRKs->pk_3^jX@u?|ocXLFFlyF@qe!M$_`T)`VX86#`7_(U z`k!}3bXto-2#^vVg*qMcZuBn}L+8z8HXNone~;Fj0AP|lhh1EgdH}>-pf+IC0`=Dz z4iKn_Q1brws;o)Tl3MiAA@H|_^ETq><}jaAu(;ov90y1~GWuuNax#KiPz9ZdfoNnZ zL6z4fnX)=Zr(qcj0ILlTG(|RbK8i>*QP`Bw>X=heh0L<1xFgwNjUEphUB4A#pd87t zy^%*WPdCCwOCcl8@s!o;eXjvbSJkx2%?bkQMg zv%QH=_?I3`QG`#v63esnY-ow%8y5r?r(+DXw9eFbhKVDxUbrXAfvhj}eR6 zw;a>4zy;()htq@B*KknX_lLACf^En&<0E062F+YyBxNSKgn)hOL2Vf-s3?%LfI&!( z>nu1e9f1yMvEK3|=MlJf}8p{gBhb}jcf6o^Z>*2 zPV&Ss^-;5;rf5)h$6AbtE`n31dfR0Mn-xrf9vEAI=qk!F^y{FUHbqJyghQ!!np-_{ z^^Tu*&<^L@Q}n&a0%UUVI|`Ui3)N2lfYSsYdIlk3=TDClR%&8_Xb~`e{*olqxCA^p7xo5b>n5598A;7z@hcf0R!Vvjskv=t4Yp zcy}HK55|{NL=Q4BM@G<`YtLNT5HboQ>vzOY(O-OT%RYvtrotA3H-eZV;JU5O>KTp; zOs?>HY3sX|3wprF;}3P;?_kjf41}y^&OtJxvjU~?$%HXfB(npV%@xCJ+vX~>DYXqt zG8-2A_v!_<@o0}W=(~Ite`!*HtKwG9&1zO|9BD+&#`2CRR-T)+4z?y)Uf_hlHH_$T z2C%z5Eo4qEIk>Cg1t6d-krcSb>*SIaI1U#WgAK&W7Y_xLhWrEAi>Q{e(by+*zpQ*M z!x^lRVw$pwnodBxZqo@|tY!f4X^g%xVl@m4xvk`vHvdl}k_U+fN+L>j zO6|V+FprPSDA8B69iD`F=gL}7T7@Z# zS*u0YW(as}Fk7eq$=g>1l-7Z-e(7KS&SMY#tIxfXd=!Xz-v9MSAOGslKlkO&zo@)3 z$}0~1@r#dq_4mH=ub%me@=kl+fBMot|9ijxnLqseSCx0le(Tz-?DVFT0nCCuS^D{L z!T1}fWG`d!B#8~8w0q%M{?78#%d(dm2ljsKf#N*tc;ll4M&Q%w#{HZo(-PSzT6&%$ zqoCiq>b-S8r(9bHCY21Eb*cNNk5am@d)bR{9=F18u8M|Dx)r|A_bq()Tj7h&3O1<% zE3nxsIQOsVLdP$4D}0Ok{pSTe(Y^33ZiU}WUud;ewQ9esi}LBC6sG%hGCas24y<{Q zdm<9u)b|mBsj@eW`yQ@B!=azMBka=l^d8WWVAaX03*nQ%jjbVV!PRmxMxi1spOpZ- zL~!6z)%t39uE~|fKH*AIu7;msg~hVZUXd=JAFx(NdbeUaFbqvLNv@iw1}64}<}_70av7e1=USu>vi4 z;vu{DUPSm(rqx$mPr{bAjambuB6h>D+852u3CpNEdvGiKDC>1DF;kb8*p>855X%53 zrNSJ|lmp9je31A-WZxH3m+~p8!Q|ANX};(~MjsfmeugDi3#a;yh?sat9rEq2AN`P# zv{HVfTj|v{kTDrS)0l=td_b_|m%L-sAuO*HirBw?-*Ff~)GW^Lr0mwVaQ=Y~s%~At z{*XnhDYkZUiq`h9^*{%gXzjovg_kngm#d@a<60D-#U3 z4rq?{1a2Xkcuv!J&ICYd64S^zj(`THH@D@thUR72ZISKpew|2`=Uy=#p8Me|Ja+$A z%W@toxU`MUeV?ak(SAiy=0OAb!Ba9O!bmU!v_^s`F=2ca2`(bRju7LVlVyv>6Cgs$ z7!f)N>h7lw0&KwpsD23%G+nxfvRphh0s-V<8qdRW4HPPKma&QPLu3lOm1VTSdy$HO zrNmol78lJuOr1&DP;@2q z_E~)$1u4d=yRv+dD7U3terRvf^yXL~)kv_7dNqi8jHD=@2NZc4bv+6p?XIZgw&X2mJgc7#nD^a^OA|3|lS^!DPPi^{@Tqz}-kaR7wF=-AYDH zvP|u*P{&g7D=}b+TdisILBw)wz&AIJ;1e@QvT^;Q)(ww670}$%@(Ax-a0@MiOqOS)OKMLi*Z>&zSnF zQ>gf4>G*_0Wkw8kqy-{~r|n$9)6Ne&SMap0HBY;61y9=+E?mLWE-+pO7>h+Aea5UU zvJ#jID}eekB?5t^eHNDJEO0#JpKa}c0RjyGsO6Yp3}|z1QJ0CM+-hp1|42B}991M2 z6K107_`q6h<2@wsRMYO$%V~N?f*l9K$HMjpF2{T(4qUL|uQpH}^c|^R+GvAow)h0I zEdTDc0-`#2Xltqew!;}vYI)BF=qusjzp3GeK-iR1E4f!%qrWXu*pNy zq0d;t+b_1u&ZXuFMmkfmUCWZ2NW~V#47GMw%n`#?=C*>0n>3M@xQ9y; z)r%R|AlNqR*{nb?V^21zRs#2btmHhDDX`MVWm4XtOQaQvNV_*V&&Ne4Dml;ZK3FB= ziBY0lNT%bSK=yKBK2#Vc>k;-J;+^(9tLm$b6Qr#KR3UAc7b&4P*Qw@`95ET8TKGx^ zXF{!lM$fGRqQ%?R)G3t1lh|iW+5VzbBaU^ME4mDV<-rHwoVoa}ywMfFz|9i|?~vin;JU5-G)pIxP_sW%8D zHWM)ML?FqQ{#OLjf6(sF8-Wr6+X^V*5#2dXb>m)#(p>@)ATG1g3}0Z_K=b$0a#MLV z=aERPFBdHVki@NUrPfBvK%2D)31q)$GoJ)j0wN5w*^`hKbQow8zA(3tJYN&O(6@kT zuOj@jTqF3faJXirVtte9#+YGyu|+n+N%aCWfiQ~Ao&mU!XwPphmBG!8c zh6d_TP|Anz(13eXgSN^Zr7{+a)?+$9RxNb^U)b|_hH+SlCmZ6$hS*Ou5cJ8y)5`Y8 zWNx-qvwX3gG(#cdstlAb;0%m+2mhV=j9>60>{*r75VgNXC-kdRdUpQATtqrEY+pNI z0#>)rasoy-IejE;ehxI+p5M{h9U426J6muI3(Ksp+v3MtTNml$ZE$g83i@gDm$?}m zu9cR>)c1p@v=iSeVmr@jh;LCyL2FZgx+@o_*O?9vAJ)0*~GMaMw@uizc%OqrxA> z#9iMWoN3p1fJ%_=Y;o=4W!3P{eNs>)oSKcWgJ8_CNij z--s^l0@#1TGN8V37+UO7JVcv?;vv=kO$g1OOU0BnsL~hs(m*K?2iGm?OcnMty^(yj zoqRe!2(*D1{Ur(ID)~6c%RC9^{<64AUv*jHZmdu5$7x2|W z8b^jlYv9xw-PC%6xPm=gEKYX>jP1B+yS5plQOx1 zR*<1I-{fN`!%GI8t09=JLuM8c6@3s=~jSB5}j#V*; zkZTvFo3?80Q~wZiX!WytybpS3P2xd-rH(B~)CN8HF2%*h zHl7Wq5SH*&>M1G=bxX6+!D;C^)i6K-&fggdpaM>{Ca6glsDkj#zh|12X-csKLYu+B zV0RNZWPNA2vcNSD3~1FG(Af>^hmb7g#PPC;?}SAWT(w`2QnQ*QrMifOo_HrYhLe5G*<0(8(4Gg#5S#jd(%^s!QalrsG__W74Nb7<-n3_LxzEl zg^kzJF)sL%v^RD=&OoH^MNCHOH?JfP$RYomSJLQeucSWJpdF%y2yV5rH$HPF;Ea`{ zwc{QmQ@uX0=#}(h?jDz{u_l(C%}pPo)zJ^MHgW?DzYh}<-R+79yM~oMIgP33IBBw2 zV2IH*(mjuJgPlF^7hobebuNnK$&p$V3_~MXX~3Tf6}96gBCSymZH+TO+MBk@?3)CP%SWtn(nj06{ z0R=s1o;SG@0Z`26=Ga5QMvE}XV(QX;s7qu!i4dM?;VC(0NE@6*$8D&D6zCeBCN1zQ z-ybmPs{?qb6#eQ20gHK?K|SFOy@%*N9j)`G)^WeK*69WOz%6iEQexAbg^sqpe$5?d z1M{;p<&Y@Ij=>L{SDsD`)28|hIxUAuab9+KvE;~|nRXx%Mbp5c7oY}trJ0-B9)k@T7rqj7IVh7t|QIKNNd67wGXIHsCuFnmz!}y z3uCPu7|8=_76|1wnK@t_22vxMO7pTaO^YszSkz;sI9HhE;%HB^N~2xV z2iqp_1>I0yo+O#_S-Fyyz*4!TA)48W7DgkcqIybTm3Sr+pb;IHW6|kX@A?6az%+y% zD-8IBV74g7bVr9l(W;~4bw>y3s9;W2&>rgyZ-lQIb}kUh7sdsQ2uO95}qnKcspF;m(op7BC|4n35SXtHj7*=vF5DV%G}C=j{2(@q!FJt9-Sc&t42sGVWjw4C zmBnrd{Tr-)q5{pACO}Y;LqM@s2X`?}X*I@MSPqnHBh?H9N;Hb~ys~Fx$TzCv`e|6p zk&3WhVL8_8=kk*pH19VSCmHTJ;e4I)@lQufq38`@px$tmV@VNTAV`J%0s&1+l74}V zpZSA(sfpwyg3>-N&=yxx9AaXy(5ljN%pM6?pZ?6SJl^SF;{r~F}zljt12u#$k1Mh}iaHi&2yA6Uhf;CWG6vT*XcORHMivUzK+$&3dE2{9~uFdBOIe^Vr~^`9ca4$MY;rWP=bx8AYjPWfw#%aIFBu zO=D{vwu2S~%eMX!VRYv|L7<7;JwBAASwrWm69i~7kET#3&%;QfSTaaG7<2eCAWliv ztzPCjGSm|;YL8_eRvE+|vi5tKy=2g7GMW=Pqz;#Bin8Vi#WI5nO`7QX2~*KeS5fZbRmVXdtA~ znPBT?sG(d4MZOcm;8hUB)2uk{X%Yatd>%47S?f z^AKy=`NQ~%1v6lz)J2DHX3v1=jM-N9j5r3ZRY)Z(@di{I8AW1rGan_m?A=R{ z=3a9Mo7zZosV^9E#>}FQa&GKU1~jKd0OxuoT91)s%N(aJ6+4ArgV1RhW^dOB+>Xzf z`pfYdaZPb`ZgNFULL$M4U~$V3@xn%Z*%%kf2}%fZhN!Be=3ObZ8=j=i|5?k`H!Fp8 z`3{Pi?ZT^*Y*kxjZyJ;ELxr_fR(P-VwQf--n5@Navn&$4QIV-EiSV9ljJ-Ceq6GL< zcu64z{75RDQopRQ(T#{;cdGHI2C6oB3UMFXimD#xr=XB9(1I(|M-CUO0W+lWW4U;m z#Hio!Lq$cQ_r|HcHtCict5wK6dyQ@OxXLV{rh2hQGGT(O_BDGX1$(rdianBbtLH@a zNCxcD%2e!;to@!7*&`XSM=MjYN3srkj?%9Ct$4AX9V4>%6z49zFSuatteC~fGP!Ta16fvayGB3>+h$UCP{2bYG zJyG_9|2$^<0WC!_^n+xEc?z8b=oEeE&BS|ySkYaKXo284HSy{3=) z!|VesUVKK-4^8uz$i=WFCwrtdy&xo45!&PnQ@hh8+SHB_+H}tEXbzUb5ZD^%g^Pfv zr@Hfn#q`5cU;lA>a91ji;-vf}yk}W2-^t4r@FAsPX5}X{D{~7;g8V8M>ebae#ZT(x zR$jQRqF-r|?=O1s?;`n|UR>1tOBDZrioA=Lw{aDl(!=`T#lM^6DK9S7<^;umN=4qy z3jzH`l|~9FPk8a~A^A_dIPA4NN%6Z>Q+`%2ayI`}FaLuiPkVVRapmKbzeh!G zS3czz^df`%<6izfB){b4Wrq7SGMFaKVW|BIIoB>w^B?^BTgg$xl{R+zd$eB z^~KBo1j*m?@;gXAMfty@A_tXE`JH;XP+z?K5=qViB)if_)8g;S1Vr-bbh*mRiu;#} zUCP|Mtm7O9IUSlGDhKboGTlp<^c^a9aH-g7KUi8Sc7zL8mrKG0VVla`xm0YkazC+D zToAT*mpeb4r*iLKD$cWVKfY9)AGUUv+Z;Bj-20Y_O;+y5mN;azrMp}!1eN=dr6O3l zA6+V1q3ABR0aF#_?pP|;Te@GKo-GFlMUMfbc-1opI!dQ1X0$HluyD-&Rx$h>jd>HO7rv;aCx3Z;d z<-UuZfiTcrPMhPD`%dgGR_+#Ln9%4hmy~}1sy2kGVvK*__$;QU%P7Z`FBZjp8%m1% z{1N$cdJ(JmBhMEXI7|LU<%?v`dcLUf-;%#o`68Wv>-nOJ7s=nP{EPJB`4^M?cjRB9 zd@lDW|DESwMpAdd?NR>adhz_dB>z46`;>o$UOfLwl3yYJD&>ENUOfM8B>$BBtChcB zFP>kL#GSM_p!~P%#q-}m^3Tb?M)}w3#q-}uQdhHIr~K>n;`uj-dT(pps0R|{O?>&! z6uUXxOu?{YS?^Xd?ChS3>mc6im&3MjL-)69!ujFa<#1kjXZN=QVRLxpwlgrmVU*vL> z<)S8+qrO6jTz;DTnp}R`^F=NXkYAI_1D-E(`55^%xqQs?MJ^ALUy}r~RzR2Yv@@sN=$n!-mKSzE|EQym*eEuo zm>*w;cHZCp?QcObKei0*ys!J)eNfDgE<-y%(*5m&P|SOmp`AOrzugPP{4l%Y;fK1v z-2=tEhp;8#_U>K6a$T_jZ5#DJbT9mZ6<@ zcYpf;6!YE7(9XNMzx^Z>^Icpv5N_@MCW^Ub8QS^I?r+#0!u`w8&fi`A?a?&c$lTqu z%q-r#`ePEl&G-K1@VyU-?|pdn937T{!<;%?1!mJS8Bw0LS~I^q7Qt0^4ztw5L3MZR zKU$y7A8F{KoF@pQ)W>PMK3O6`2YWsopAW|8(fB;_!5<6$!0$~ZG3B^P)E-Z>L8;d#;`8zNJQ1Id#^=NF$?*Xze>6T{js1Q( zK3|H@v+?;te4dHV)A4yKKA(=yC*t$*_&gDxc$ivyXX5j8e4dKWr{nX9_7rz*^6ET=Vot5E$2&dGJPi+Yma><6-beng(SoJ6l8OSJIyP``9_gR-f- z;OG^0YYdhPOReD&Pc&*}8(2PM+FEY)zaxqNwTM5aFnbt%)_KE;jy?o7HngitH+VaF z0(CgoHgW>nCDGYPpU(Qwh5X)wVV(M>7O*F3`&({9-j(6k~H=6N`xA!{y6&+MgR1%TG+;=2reAPJ|AZzj4=f#pGgZD)#v0BQbH7%aj)D zVZ_88d6=v+@%4h8v{2KxvrC)k_~+^*R@I-Rhc^(NXidbJyHa(rWho7()$RQ6pqo zZ}?Hl{{&>mSHut9q&K3QK_-emu|_85x)(=IwtIBsB$x*ZtP4$9;)lbc&J;Kvi!m8ay;%UTrvYeHWdxN008`kyF!uRRX?E@3 zkubyH`rGJYK5?kI(;tN3xI+tSn!eX;?INr(JP630|DX*QkaheL0x#!3I0D;9aZ3q9 zxWi>~6M}`bi0>CiboT1^W6EShm+Jdz+OZ4bcUMX(Y0U{u23ms#q!ceA&}9%FF-I~{ z!#IS5Ikq*}vH_M1lxb67Zdlu_&Ds7i1J0S{cr8~Hq}b&a+YK;89~?h%FWc_m3liNY{OeY1{BAV451cU6E*GDNS2B=1 zLLz}%bhBXy>953wiA+?nVNgRsJ>~GjqJT1jo2u38ae~cGKEV#M=Og)FQJ5#4F(4;DI_K4TP!jRVs z1GDcmB?d`;2W>|{-BrH7qsOb+rWyP@n4wJm>pyKi1X|J!0S+?1btjzFW|mPi#4J$a z(?V+^Xv;~l;f)oB)qge)I)2PZSSga%+Fp`TrMoi2k693=)E33&eob2|`$fA$E~ z$27D%;ApXygkb{De>Q+@6HDA7?nNF*pg$1_s;?dlYe0g5{I1)fjIiX_|qBHbn@|_IndBRq{!eR z;9*w&i`EzVw&y1Rvn`1x@Bk|bI+`?%H`jQp&WSI(GbQoT+B&SLGce=m13}8)}|NOJtH$seZ`%=5CV)P6njY z3BYB&S_C}%@+J>HKA!H&1tWd?WcKS(xi z`uZtb_It7!9(V#YdEov7mW1reR8Faxos%4{@bRzj=@$);`iaBt@L1aKfaE6 za;so57>|-4ef8?g^AG|2^3|=hP6{g8z!gSF*31nza118%iclhjR?8YFd{ zr2?sUD76P{MK9ZvU8V66vh*6x6T*6~#h)w*jhl68m58)2B)8xNV@E!cor%2giRyK5 zXOgfxEG07}yyVdIptcJR{BNJOe}4`XfRF-Xz$@{y#~Vq+mfpL>>{q{nmr2&396JF) zo{0L+T3F?GR(A(5#$<3CrT5}!1)CTw*#K$&DrhPfphTx_pj?e6yJbwf!r&7gGq;$l z4Z0@{+(MjXmM3H%rJHeFbd04@!;pSm^^P$Ov|n_HsmB1-aeQ)?=(!Z*q522yu?Ys$ z%fJ{HV`YRK(QGrK)UX+zKuQG5j}pL8;ce95&@!-Dph9V`PrnUst3 zylTuk*RWK8!3E#Mz!jm9hCAve+EAjLm7xOM&Y$ z5x6yWrkgEzmP9rKNiS4zz`=xjQ+d%GQB4f>d$HZ4aD8@kX5@O>NOv%Y37O)JiZSxKmGs>HBjO8}fTgDVafr)06 zw~WEVp$hs|*pamf<*f%ws304dGKw{owb9{#G!NhqO+?tEVOS6B5vX2D4ddMoXoieL zCfdC2WvKj4UL(=}dtRZ^3X^d^WI{2^3>$S|Il(bE)>1Tu5qI%<7)^vwTY=bEQ;tg3 zOhqV%sc$dz0~rVo)vz_TVpwmZ+;=NVn5c$&GcoIJm@ONo23asUAj9x7KZyWQ_9id4 zxh}WGfiY^sWpbq=IY>~_1PGuQLBdY421DOh0IpsJdV{8#<_H?PNem_#n+(nXg?$CV zzGL*Li$X5oBm8lo8AQMjgGkhm@pmC^Y80uAdRkJ?BdQFF;fZP{mKE;CIQ}hT=b7#c zLBJT!H&lXQ3<*kPY^7UZ3H9DGwoUl8?9Al?VY0A?{Ot}ft>lr4#yaRgh$J966%D&t z(O7>ptZq5Uyo&4dGC_#h`@ zs=AyviT3E^65#4YH=!0MxgADvO_5auToMNw1&S=XcG#cQAL~!rO5jHDUQSW*(&wyc zu$aX4K@07OpcqjOgm~qi|whbspU}P2MRY148it&o!VQ@mtBIYd766t=`4Vx&)J2E^0WkPt$AuT}y zYp-idlFIPE6AeN*h&1k}t@G6EZ_DW~`D_07_op9bpXp&pr?Ht8xi#uC zIJod9LSQY&<5`-4IxHzN9}t6nq(e@ZqahwCR#Im(v+a44Gk?g%TZ^?P`M6uMa#2~$ z6O8>&74y%y72?ouzCB5f9(j*W;IEA`HYL~xrkVwQPuZy+WvL$&w|dpY{v{-! z>G89UPO#s+PPNbWC`Q|yU#H&Frh*r1)W#W4cT{nLpHKGq`I?S_tPP7NPiQcM6rS!b z3_Z>Y1XtfK5oF$z+)@)JNhZndVcMT}7yWk=D6(-kWIYu>%~YTI%t#OS>R;pvbkk6P zes3tp`REPS2-K&FUcifB?hUdER=puoLGS-95R9091BbgTOLQg9dgAOq#yL9F*~fq) z@dY?Fa1BJ;%Gf&S18e)Z9tYtBJwx#Y`VEL&hg2pbkSE3gBye#|v8H%&yPt_IU$9Km zIB+i>gGk_=+5Hg(FkxjFYlKhf$)dvWm#=;wTM#vtbYT9EYHMQc2-`qn7Z|BC4yHg_ z9NNpuNlPIip?)f_Y4dM?gki~3#T+k3uMYlr&my5@l}wWNEOJbB?)JsjT*goXfvNT* zkf1-ZleQ?dqPglyB*E%dfu;{&wTAdX`%0ucgEZyxxU>j59pC9HyTi$gH+78veml5#q?Hv{$z%ljV*=v9 z`M$;1^8b;-N8bKOl}qXOEqXmj6yx!$XW)E2u_A-Oug#7O78o6$(AJfFH9*;pb^>{R~(r~KjisTL+(|eJR z8ew)X5;xbS?!_d~2$Op;1T@0T-s~nG^Lw-F!s1hSC$D{qO~W-$u_C5VaXSe|z$4>c z2jTmyW8IklS%Gxl566v`!SRfp7R*u{?!^9MA*48P+`dU`JqkZKY-d)mj;4pe6q{83 z!VR0h%aOpX*_~R&(vj>#VIj;OLqM87u5-}G5Emwof1-4iTUNa}=P?qRwsEavToU zprAaFChqa0exQ;mGBv`kjuW7B1dUhJSqnLV7@Dav(rL#4;rg_&{)+20u(<1#IpU73Slr)Vd^*%_FTnVR-*!7 zoi^Sw)y-QV;$uIns`iPKpy(JeiZ#3n3xIevL~M0cP9gxq!eCGp7!X((mBK;G6SKIEZ{=6iq{yo=x_5HV;G8o z(aCF`sCfqX-R2o6q>*o+dH6>AP`s(HUnkoL_Kk2+gN~I-p(5gXXl?{jVv-cTqrEdp zakh^uql;b;@KTteu5`mTfek2z>7ezy>y$W#nM_eh<$nX^2oQ(Y1+I0Ac^fj56*<^|5cjX=Q z2LBOHD}rE{7~U`m-QQ|wO@;l#rAPC|cOf2~Yg{jDb9t!&3WZ%8O2~KG|3g#XLC^Z{ zB~A!_;Uvh^>4`)5h3vmalBE2fGt)rm+||tBH^(d^O(RranLdORDl&L5J|EB%GB_&f zRCW_-;LXR_0p6PJRk%BzSG8bEKC~h)&j*>B6NzcT4Etw$I(@WX^U=Cy$ z=k%q3Uv$g`HU)tlZkJc!2Kc(P&Y(U3)bV52opiIdSG;xQaCfwT!Pac6{5Uv!{)V9@ z8+s?$4ihp+72UrAY$JeapuYy&^IR!AHN*t2_^%U;TYw@V9Xg3Z{F z`!C_P)t-=?>wx6wn}_6|==z&c#WC(Pp4|xo-Cqp^?i485D>YCORHQ~gb_xsud9FY} zm~RbAMnx6ZNh0QX6E#NSLc_Fw!Ldr-kOmhV!B$`uCcubQTi%I*uEHfYG9rE%H5*nD zY)!$WGGUcat02fzq;Pa2!zvH_4L<4joy44V5;K&Y#Ijbvr zJ&5&A!iCAju53Yx*?|3*5kbW>(ti6dRTx^8dwphSON>f& zVx^c}Ahv8u>_t(i*41kM1(0_;KyDR<=ABH2)u40e6^oW*hp#?#TQ7E0z0kr}vuN9j zjx1U}+HaCY6J;+YfPs2#l0(Oe^gi$P9qM(~*=zK@UcDBr*1c{M{)%2tbii6%;!XB? zM7`#I4SFrfrW4k;d#`U(uhY(68;j{)4&^Ue_gXJKU_IW^YnMLW)N=T|G4Y0VTl?Le z-B#2e52Awbmj8SzgW5mhmHCGyijk?w7AT2Y#hf%va zb~Q~kO2h?=*=8w-sVAr~Vb;Wi2>1FE{Dz1L&A$^+GY+U`7cH$~BQ-6-fU6l6n@Ae= zUqT3_o&&(gr5?aH#ZJEkzVI_9a5{zUUfJtQz1O?XO=bGr=@{{%pCmyp26UJb zS)+<%m-X!6ViwA3ww@V#Ed|DQ`z&11~W$L`zBX z3zgr*3mUbOo0TMgi(VAoAx3&QUrF-q2<9C^DeD9P2ID0b_a1b_U{;%ljr-#GHlAHvaDaXhO?5S)Lcfsn2~ zL6?N>Y;0Yi({($#zis8)`TDl4``Z@2ZPvH*y1x~CYw6pj?r$6Uwn5)Q_qTO?ThzDp z-QU*mZ9(7Gc7L1W+pNCLcYo8Rs#E$l)BQ~zmlOIn+5L^!YhhI1#=F1aAcLO+-$uH> zvDqB@^=+{G8(IMVW_;`G{)YXQ!}omaI%%%c(J}skD6Ec)AQFr54@6>EKH4-E;~$8| z6c?c;GAyA&G!Yr1Pn*hO`~y*$;v&>k7ULg?$`lu&rm`6SKvbr<2sM>qdsY3SGR$mk zDvR+CL}iMLP*Yiqe;_JTT!fm+V*G;^`HG8BQ`yUHDnpuRQ(26EASzQ_gqq4?`~y)L z7P}5ABMO31*==zqPPe(xy1MfA{WI)sL3V9KM=VnE<#N%G5&$b zMR5`8MJdKV5V{AiSZ9aE{cm#lS_<$phby=yiG1K{(;CvaS>{A ziSZ9aE{coLUX+M-VB~Vx$VIUcL@pi{A$*%$zJ*tp!^~rhQYLcwBvV@pa4{U2$mJKw zuO+w`cTD8+OXSz&a-vNxC&;g5xEM%GO1&iCjKM zeoZbh;FiecN%Gs|@@VGd@@Q)G@)RFMFCK8~+w_8z^DQflJ(@}o|0Y2v5WF!|R6!>) z1)ccU>$ABd6FR|jCc&Lwn@c;B=Wv3mY!QFeCk-GC(G}Zb;tg3x9qS|cswH)P6j{^y z@k&ZI(w3~b!`g~UOBSD z8oB7#F|)zLK{Q2w zw7d3jzGl1X$&8J~Ff3nhkzd(&w|Rxb6CTQ_RC%2JoQXAZ{PyK9GPQfdfG#%N!S~1i z?6=9-N(#3nXukP%Y5RkCK<`NsQt1^5J35+eLU#{dZh12@57`ENEF)xDWc%9?nyqLd zjJYmp3)(L0qpOc+oM~WBnNu8glLR^}zthkt`Xu01X9Egv^OyXhr2>F@OWP82t;*%f zBnQO$eO~YL_D;{(Ua~J7)Z3ZtsP;Z8%u(kwfsHKBQ$U)8+{P9M)~CVJAs+aQS9cs& z;~k)ttx3XoN7t*%%mNrll{JLoZ;4Aj?ob&$Se_DatqK5I{Wx*Z2&VFNNk-SHLg4(6 zP>xzx%q)i=E%HFuuNH(>vZ1{Q_ChFteL@dB4z3w%LPS}cjo2+HoTuO#rzZ3;-q&Cs zD4%zv&+X`nNH^j>w1SJlHJs#26^qq-#AQHZureNV?C-O4K8RaCcnr#H&3-W}s0;sr zs!8EEkWR8Zh3^mnMhC)T`F`$q$DveS2Hanxa0vV|qr=+1Y9SPB++5Wa9SR$O!v6Eab&I`=~8qb|Ytl4L0)u(PL{BoL8%js?~UQpxrnPsn-5T_2Lh+vFp}-Z%VXjYXK2O;`uiGbo{EGx`NQXHZ~-wN zSpl+-3K^|d7sy&~)-{e{tZJdIdek;32g}2-vuilvAz~>S*NjauH3BP@$+ZwRfyG(% zuos{w6s()i$ZwY!iDgWd=qN)Abv>i8jLvv;)}!be zRa;}RjGgi7sE5Nsb(!&4#&D~n3@420G83^(|EjjQd$BHK{@q}@ozSi8(e@B9;vNbn zn`;8VveK}u9Z`%3UJq9UGpUSJh4`e?jeCXHoQ0s~2`UB+4|S3&|; zdYuB&-HP%sb24uF%;w@BI-;&=&trOmQ7~vDL+WaeB6hNKDr}hbD5@T=B$X8-^&YMq z0te>XJ@j4}oC!)kSbo^xEdGbQ#F4iO&Ki^$1-Q}fVeG)l9x{Zghu-?i?g9LE>r`fJ zPHqY{PdAJxY?Tro7US}>HqxfAV_dOxPccS7HKmEt#TjLN;Zzt$zV0bTzH^aZa{Jm%i^fiM&1$u9&z7dyG4B*zG^NX8gY92YVn*YatE$Y?Xwz{9Lo zZSxq^Mtn%T1*U@GNaACU%VOsb6Omtn%r7o9hK`Kg-~S;y@Ad?%UjOE#k}9(OJPy}2EjLr z8Nw;Zrwh~t9cG*TWuic5Pje`T*Jd&Q%cv9St~4ME6~f)JdGFmw)Pwi26h?>f=`iuh zlhidCnmn6fvNfe!kNEzL{1A9XXfi?v9V(9=MMmSySeP!ResrvXdd1}xJ+BM^ovhUR zq%Kn32)@;`Vd~_k=nVHxT51NTYj1Zdwma3DZbPa{sT--u3xh~wXpsXc4nWN?6SZcv z+7qp&E-Nj?$UJi=(hYfqP zJN0`NDfn{#N7M3|=Z$2D8c75n*f_dG&Ura1fp}CL zxT(0^Wiy~`38*6tO8Lj57U~GbhSfvOQOQlnlmi9ihiQN+^{Z6d<8-Ld3ENUJc*x`q z6YJslc!qM0gKijC7vVk#+KBj|syre5G9K&jUfSHNTd9%D=>?oy(4vd#g_uQWCv=WC zb|IxT?m<6y7e>ajLGOY^+EP8%1+Z8CEmaqc8+#Xo;>LgW>Lf0QulDPoUyj__3!+a} zz4)eppcfGk){Aoif?hCQ1IR-HP(tuF?%#$1>|P#ghsJ5mMw(8N)?7O|ACrX9Suj^v z>t5CU&Wnt)MwW?r_sb=ZMbZc9Fo6d2=R&RyH^4KeW z5^G@{sD2Y`Vc)mP(Qi556l=L7)^eNIvR`JZSj*P>C$WVOOfvBUI9WBDhFIr<2%R0&bPH*=zxXQj~^FnRJs zF^lzUfkK>OE*4mcMj49fxLSt<8y%q$*#gv<)B}L(aYuVd)j(gqdW0%jB@JhnWX#*o zNXKNT%0$objq9;FktQsS3gYgLuLx2+|KGUy*#o;jToiUjmD_yNP&{UL&)Jn*Mwut< zMoe@VE{qh?;y-*sPa*4`>{lSLer+`(oRM3y3#2Q3VK>K9EN48~5#htu>|rb?I}<8 zuF#&43f&Sy#I%ucqMfW(XbMzIIwV{R0-8a>FZdOWd6q-EkP9ewhwP)<^V=leh$2C* z?fG>s5$)I9L!Yf_u`^P4df_{~@NHiBRxf;=7v4`{W{tx8z3^TyyxR+J^}@jmFSNJ{ z78H`xI0SOiL>i9Xcdz$MlZay~%qk2(_rjkF@AdnpzIRIiMDf!1S^wTG3g8Ds4G`CS zn1TGBDnggEpeiW94J$^mPZg~mMQRZO*+C*i%SDI~MTos7WguQi=EzKxSS3GzvB3q5 z(DLWqMRqsqCWjbv6F4M;L|KG<#9-DSV5lI*we0cNB6c9tU_4?_eNDs(2_Pnl=&&kF zwbo{nUL^U8bnG1|L{fkCE;3v&VZHfl(6P2fCH7bMv6-w?K6m!F{hGF9)rb0`wx3y> z?ouR+=qQ+y#8EKFRVX7J9R+2t#!;}P>^{=J>CQgde#TMIc4-GlpYrTMk~j)(Qfci( z{}az1RuUhM&B~W{7aavhl_cLbb*2AAM?v`*%2DtJPof+J zcc}a#FVA~<1-_J{;7;YsLGkxIUz^)<61-6P++t;}gRpk1dR^bP zNl8NY#D%Zx+g3QpwC+ou?*4W@3+p722JqhN`rUalKwzWBy|3%r7Aytq6zIC6u5X)J z5(qcNpYCs)&;!^6;ZOIs0xBcy8-KdLwagr@Ki%J0z5;ti{OSJYu6{-hBADm`D0-2r zpOJ$oCb|HMVC3p&^dORnE`XvK1Ush((ac%L8f6BqLWpqX!X9bO98} z$kos2K|~W>07Wu#^)q@9(Y)mKi)7^LXY?SVi7tR58M*oyJ&0(&;^jp$a`iKM5Ya>z zK#`1G{fr(&G;Dec)kQLL^)q@9(L@(Ok&ImZj2=WZY>P*d(G^ILi(P>PrPvinc2i$~ zNP;q~XpxI(?7FZ{qDdf{a}&nS*CC7@uR|EyUxzR*cpbvn_Bw>I^>qm2{MR9j^InHA zw!98uY@I zL~|73&K407%~AI-64A)vuO^!42q>bF!(UA_4|sVIjU4`JqKS@xBAN%uuZbo)0*Ywl z@K+N}bOaR9AjYTm2x&w-6_qo(V+0PiRMI`Xyo=+6HRmn6w%1-uO=Gyti`ECG;;f^i6*)OifC{kX%kI!2NcoB z?XM=9=ng2N`3(8>N)z1yMKp5ztBEGM1Bz&nZ`(u@-2p{3a{H@^Cb|QPXz){M6HRmn zG@?PzHLAfAP*fuiz!g;Eu7KaBnr~UEc@&vU7Ep<1=2Fw^@+n9N3&RRO!2e^-8&QRj z-)mJ!LS9sbM0%AfBpENNLZZA%71C-IRUy-gSlw(DlZY2pA=8S;H-eOi7gZtCipV#D zl!zBqA=8S;H-eOi_bsIg!5(y|N~+Lgr3ww)S8|1IPfe)))U610d|Issb$nW_26cQ| ztp#;_TCD_id|Isob$mJ>+acyL-SBFvOvfj}*5ab0KV6@;u)m657=OAxZC1EbA~h2R zcy)!FFk4_9;7`}5!nS1fr|VM-QJQdY{OS6%TKDPb{2NexL?Kc25rNdIkLf`!@{2-h z)kicERUeT^t@@ZA>G-r->*@HkTIuQdq>Eb5K?&!dn-b1DHzjO2 zHzjO7HzjO3HzgG3ri9hXPRF=(2S%r%rvCJXR2>mXRCPoowW?!!k0Yyyq*irABvI87 zk<_Y=={+u;iAZWy$Mhc07m?Jej_Ey~FCwW`9n*U}UqtdPpz5q3lBnu@n@D`|Ov2xE zA~Ds*@l7TuX*qVtNJ3lGW@LhrmNP4ED3vE_GcrL*%b8cc=qPG43rdo2hmS;5QJawo zN?OjM%8S0DHX{?1w4C+I7qLZcMs{0iId&*XbQiT5F=J^trj3aRqc&40Nxo@aqQ|Js zY*v!|TDywc%z5NX%Q2x%bQ-mptxA$_+LDMiYBLuoNxo@CqTi^^>`;>Y|A)Odfzs=$ z?tJfezpv&&pXQQE!}+eJ(omLc%Th_UrMi-=!LpDU3;m`%C95S zKnr>|kmqYlFjdOJt@pO(%wfyis!V*cZ)wgPvdqoO#B2RnbLOCBZc-+W#Wyx*4p`;} zW#UbIeRF2NWv){uw+Cd+nSGX7Q)cf}u_P8<>9x$Y%IulKoSi`2Dr6s6{amfg?kO$+ zZ_4bpOm45lFlP!|_NL4(%Uq#Mi~~lRGb@(4T$$x5x2!p{Y?(`ync_0NIWx7)#mX#k zfkbm=$uhZdtfUJju4v9&K<4)<=={ve(i_hJ5FGUEC~zq3EC_9ci!W2UaPhbNS|qgL z0O-mBRRW3%JA|Sql`a&0+7}mgAPrrmWMM?WT&+;T+?$ntHIX1Z2?>yrb}Ctb9}rrw zE`)x$(yt+M-q)^$O9x52l&*y%u;m?o4iY7+>6wjo3SUa9mw zD&)(XvkJ=ZRl4>h0$~v05n*_h(yt{Fq%&<#e3A0kDP2@35DaZkh+y2J^y^i~*Kf`( zD8EnX+N%hJLwPb5flI#bdC)}+$c5D5fE+ZQ4*uTgrgLcV?xDjjScP zAUq;eB0RS${h$i@^6Lod!0V9GMYRG!+MpoiU#s*RRLGYX0n(5(t$Dm7r(VfNfQf@~>C=F%|OVMc8z3cB9hAiFnE-+Gg7|w<-O&3ib^@%9pj-DY>hN{mfqhjGZ!R>vW?(cNGrHcVxQAaiXc4!Cvhpq0p`Q17U$Hc*H+?6)MiZ5g~DfCPtsmuhm#`@0Rgr7q(s_vs=;5@Q!BUDW4UpDuzU zG1fR8QJKH+=^`u=V@Fh8)Z{szE&?Jk);JnbjlcBiA{08oTch%#4&U(UA_zLcGtNa+ z;IDkT5ML*Fwhbk0zv$D2;5xxG4nhF@)YHJ7;qrwy~(@{rox z7Bcw-k31@dgmk*F0(d7eP@DRFuko1Ty;p|T6@*&bAx`eYkq06JBM|25i zcS4u5q(^iKXLmxES<)lAgtI%XZ$C%6G44VZFTK`S$8@Im20b{_d!xI}9fydCkToq# zuXo2fCBM!c>6H9hcSEP-TiwA<$**yFr{q_={hg9;ao2ZBewDknQ}Qd_o=(ZHaJxGt zzuaBZDfwo1b*JQ$XccxCs+Y0J-yu11H?=3jPLBirkSlQpZTRsLo%)ADr%t#xoOU<4 zH@40ZdkWvnxlbVu1yN@Q2>D^K(?p=MBA!~nQFij7cO}VD1nO4A7nd~D!MEO3Bu5db zPZ3{S(hw3;zgBM1$sp?NBsfQ7OavNK#21$|gv2zY;v%0x(%D7u9K}rnYLJXf7=j{4 z|1Lq&nV|efDQ^-`gJfjF5apxammulvrTi~Y-Xx#~$;gBu%13`NLDIR7@=sCTB%lV# z=z7v6F-1QyLDJbr`Y%%6B%lV#$b=!vNB=QF(wU_E$0=_TP=jQYlP-xV`jrWi&H>VY znerw9)fDl=d61waCOc3UnGcfAA%dTzyh%U}l935Rl((%N6Nmf?cbM`~0&0+qOch34Vq;N(<-tB&U5=-}s6VkxrFJbWEook}c1 z7Mh2ZMA z+4{=@W{P!Lf4ChZQ3-tJY&bQJFA7Ybr-rXCB?kM+#X|%9y;NMlo>!|MFY|To7JQ^6Pfb`>jin#NXcB)h z++vWh-T9}#`Agk)Q5NN^{}q=7lrh1ikB$_*k=YfS!Dih36f75B)juR#MBjT_w*T&Y z94A2~EdJ6o!H&<@A;(?w)Y0WiEI;My|6Y>WU%$VXPA6i>skH_2X6O3H(ve`xj=7}d zSG*R{`$XlP5^BS_UC@S6q)*6(Phcq8tD6)OE`Mf0tPOJM5-cQFTjLvVAnUFTl`;FS z4HRw9dTww-cuza5A*m&TD zq)fjq(EzLNkUDy)f)(xeV@=2`l&gnaQhl@RH7^MimE5k4VrMEeJxmf!e!yB;lKU}Y z57xR=p*b*P9ugU~rgAdCw3w3tHIXjPS{I9{Ru$X0S0Y?3;V+nI`dcn3FR3K_t5jro z?%SLK$XSmNDO_!?wk)EjM&z3OUtv8C`bLLXOqbPTCUf{kwU?#2pVVSDsjsx#d25yFy zs?ffhZ&RJZGpn_Z_~r<2zG}T@qt^WyfJABi@K(B#1BTI!Ps1k1v)Kp)b5m@&AMH;MfqU$H_Eky&!c^) z&u?L!(2P~HK9wi5q$cnLFqOU4vb8EGtCtG`<=IhJni3u4vxFF7PoaQuro5Dw0#37M>L+&G<2_qzmeGEX#zN3-PG(p|0#-vg=Rfg>ONe49&vM~L?A#)l7H zKxG_mWhR=->`)VTr4RVWeLNte@8VJ2lito_;hywX9*g&+H}hDuCq2r;V`2Ir6>}Cz zQ>yRYo3Oe7M{0&b<|V;G9OL+53g*lBh}xU{3_W!CYy2Qjz4Ar%n4P!cb*_R9!2=J` zo2ncxc+%2U{gw@Eec^!irmS{yCdfL;0EcGNkQ*ng)g&y zLa6Xa!aFB$)!37-7ds*3hEx~^FFv-MCX$wy_0{&C+Yg- zFZv+fj>6@tIF>ABT#GoC&XsTx6Y14m9wpz!O6}>Dx{>*{r?C%D6<$x6Y1~3ZQiYE% zuKsNxRYH4RhSdW@5NVa%96(WS7e8Rj+9j&)5#n>6sjBO=iaV&aVt_tit`^6}T0l5p z8PbUZiRyRpX5Bz0&do)NfjcJH_rkqHk~C#41V{{j50qX}nXFIK5?kIi&RN5ow8oEk zhVPM;#Qc%|mDZ_lKY=s|!=T-A4A zMN>_4HM{^eteWD|GcgX017w_*)<={mY>++-0n>tNo#pkoTDQKbr5bx#95>(|3&#zs z=Ju4I5gM*$OUL{@kV+b8ta3|LZrM2!&MRTD5|;af&nRJu8#%}J(IS;FCT}tBASkg? z3AB>088N18U?+Yi_51|Ku72`cTllEn@$F~HsYqcu5ad*gfCrl%mZO-;0Evx_7l9k$ zeh$KIon2LQFmwtBDAt$dd&<^@k)q|+VEJ^mGDuWifWOQMY_?Ko@mIiev?<5v<>l4p^dJo+pJo&vo z<$-;nZVnHZ;%0LBHfT}@4&Ue-`Bh0TNzP^C@TlI;FigkZq&m3X7HLub^u*90Z!XkT zu*i=|*6Ym8W8OD4d~a{>0RP&4NJ@QTsi%LS+*dEa6@LR6sUZ@qDeUjxkz8Qec^{*u8OZ~NTFWcbt_cr2*?3VZ!y=?*Vd z`ud6y5-+>MWEOw-u!atUqcF^&YS9f>-kk2#DxMfKv4h~Cn4cfgSE;(gSDn7Pw&|-G zUPFV~-VdU;YsE7Zpas$jMpF5f2jGkm0NN6@4ZwyZ z06E(e(S`R@!)4qHQ(Yy$ULKYz`JZqHBX!p*^4rA#w0|U%N9l@9P;1A3AG!B?o@U^$ zXgnTt)%Y%nyb+wT3c#Rs&~=}z;D8=}&vl&yn-IpsCXe;O-SOt(r#P-$P@VSEp;Cf?Ljb4>wVUZk{)aU?eDA4U`<<}MN5p2kZ^t3 zeP%H!`n-ge(&uW84W}2=XMM}}S-tnTC4L6auRo~%f>f>j#UXhGkWY1`KtTFBZNz00lM4rN&H<>{mkhI&Qp^;B~ zAJW?GLjX&k4>4Bk4*6abm@&AfiB=TJjKcR%7pdCN1VHyl52w!#qxjeaMa$3q=5Kcs zYZ+RW>#%I$u00Gc3`e&uOQJRXc*;e_U=L%=##cgkF~r;a5RcWm1zD_h!XIJNm>*%* zi58MX9s^V#VPv|*kBKq!tnu)J8niAZy;qlI;Ehs_hGCee6vD-;I2C^Tj*VK1cJFZ2 zre(b>syK8CSNNg|CK_#4qZtCC0d9knb?@XYOHUy!xnA4FQkl}Jfh;{aw31Ck*LQdb z+0^x&99qGn|I{{y@v~=c92yy1!7Q@A+wwo1UR#m|ZBM9c(lC=ZeI|F=o%R7dDmg6AH!xH=RCeIU+y=l`|ivCx9RDMcBvV@RD*0D zK;Z?U?oj)h2rI1-u(--eyz2`p*!{5jE57!VLqqALF)0D((tP_7Ekrrm=aqc%30zO& z=stk*=K({uX7YX&DVBKF>@o{=1PX(O0Ih{sNX&t2;C;4*cU>X%yewvWj|<|_B)@0)gv)S^M$ z)%l^)hz$GEy4lf>@0KH^wf6Ne*D+jfUj;+rq!v1QSiND8I}_TdfUaW@AIT7Q6Gk{eqaPVx?hGXS{Vyv@x19l=Fs?GaWyvT(vk->JGz(8iYi}PB^aD-9PFjY+a!SZ6bwblV zl-e6gflE}LHMKC8(i$KgLbJLO?4k*1y3jp@*?mxP>0r-M#!RhpA~KjV^}Iese4&1V zQWrGs!UIHPC1qxnbh)sG8YCzkLDMOeqMUs4nTqw0BEBZ+AWAXN6bTOziQ0YALS*wp zZIT`~+pAuC@CG9PmYSkcc2EJ7Qnpk8O=a*f5$W+o4eg-!=SY{{pXmuoxlYP^QC&MI z`$<1R%6_ICC`~)rI7QuU_R!R(jij@0>oo$85s_h2ROD_jV3Jy&sR7~1|KV?DF7Lw!H9}QDl1q(`9=50GA;Yelv<}Z$)Z$nK|fF z_|7P@y{YIDy$yCPDg0*?+1?)13^(`dx`p6FqsaC~pNsVNzNu_ciw{9pSa#~d;F7>d zlp!eHi5AEPsiJft{ntF?2T8EgEXOZ=_!B9r=yxI z8zeN5%?3%D$Ff1X-d#^YMXXrijwMW#0oVjOcYB*5Z;xeM<2HG7wmP=#vW%%#FIO&2MbBH`bwF*J3j5agl5LS}mfTy|I$b z(~bzn%^s~*$=;~D-wn37_Qb`eaE@Jj*J7&d4XY(8G&}s{3M0KC*|5ca*&8==s|6~8 zO+#`mZxl*&5&ZwgPouzJHboKqzvI&d{<0~G;2&&?1pdEW_kB}b0KiCur{69c?1pi=DB=G+r=@I;cO_9L=L!?LW z4>m;t|3^uW;2&&?1pa49kKi9{iUj^_;?}`G*c2J~Kj6V1+aZDf&rvLbzc(>@3H-go zgTHt1e}MUEuq$b>8430v!h<;v%3=wFg}c^+V7xAb2zKdW`+~{27KUI=F3bpq;^Omy zrGr+8VBReh36|U9mIXW|Y6t zGH!+5w0L?rW*M(>16V#c5s9Og@oGed7AFozEaMg^RI{gJci1vs#kohbn`3u_WxNuq z*5bI~kY&6An%3<6*d4Ttmm}7+cyl;l88@>5((Dr1<(6?0D%e6dCoSV;2uCe+bH8Pr zfO59b&3%?3ZRlqA$?i5XI7BuhC)h+UWi>drTbQT!*>*I$8g3!`5Rz*WSJfrAKf9uI zLSjh}Mb;8TLP@oV3e*BD?jslk5l0aDB+}skq7q4d*OTNLL8Oyt{TU#4lH~Kggor2H zQ?I@va0~#Q6a1Vnu}(qAdL-Wg&<~LQd0%9`f)t5XqX7X9k{+ZFu_cm9hV>y)_<$HD zi1=DWuO*X23#foFH;^7Ak4*|v#KbmPX9q+&OfbkDV+vBlBr@4Q1q3q@#D8crsgg#b zDO5l_6F_{CEfkR~675t2LLMVMNE}*5B#9W8HcBKQstF&ymTja;4v98V0fCQ`9;A&m z3Q}ZT<6@$Rrzkgh!Q(Tsjr8cAotVljIMIZK0Nez6@W$UGdbIK|2B@ptHdTY@v8{#u zu^v+QAK-f0j$Hncb^w`@q6-bVCT-{P;_viqI6uR-)!*W$9= zvU^>ow-G(E7O&-&&2|2(f=39l5j|Xs?{drLIs|1SdaT9y0l~AZv(tHTgjZvW5)1 zoBSXISwn{1l0hQE1X)8H3X(zM9zu{c#LP(siEtlejqRjM2H7EeFu}v4l8iDXgIuk2 z6FhvntSlvi>{7Z39zK17bjcully02YS4*Dty45%@FL*?m!z7UARm|pL4^}=cg2#kq z>~dRM1&?bi<7z~e7Qy2x%h=&Iw+bHHEo0n`wF(}qEkm|FEsOL@%aCDDi{P=`GGx`W zp$VGY63dWDPs_5t&@yDt)3RaUIWHOWw0L#$f`=@5S{MN@c*v_kv*Y(5c%ahPa#aHR z=aNVylguZ0_-PdQ%O`mR{~&7!{G0q51X)Ai-{jXI$QlBF$siH@gRCL&mkbj98U$HG z;4c{@E;K>b5co?5vAsOG0SU5(z+W;*1pgpw2>d03MDP!?hQMDkNCf{NYY6-$gGBHT zvWCE4GDrmfAZrNxC4)rp53+{9UouD?{E;|J@P42{@F?6Gcmez+@HbCufA8Rr;9)C1 zyY$Vdd;+8qb7?!&Q7Zok(;U&`UlQpO$&>6cMcuw-2CKc&^K~9yV zu~Pj#JJ5rP+RquT9Sen^PV;pBDWTgsQzJXSz^R>9i*4LFFLl(Ux>YZoA4UlP3jq!` zrC_F$CCNMC4bl>Du)+GOQ*{^n2ni(s*#;C{9=<$!lQc{@F*{Cc*y?G`NVr~UP8 zxI=Okz!~PZ`o>W`ZyRO27VxWk?H0d*tM1%l(iR^~__06i!Y#A_nFPrkZpd8Z78RKU zZ{rH!wr}DZvO`*XlkqOup&YGxlTILMu{{_6wp;MqPk1%j3(r6Q*Z&%weUx<%(OgB3 z+@Waox83li3Yl%k0vbPkWHwuHkZWOI=KSLg^g{73`}mjNs5tfi!R^woN4&Pew1(hQ z9P;T(+2?z>Qg(X!0arq!o(YSkMoB>j!@j10)7OUm*ZhO8S>VggKlqvrFkegc317;- zHr)2LwD?*mHOd`i16=2M2Jp}v{*U-tVqdGi$ggpk{U!QV8AaD5Wh7(YD)cR7aK$ol zuj>6M#BeZ81XGOrvwjYhDX%yR-uGvN9K$Mt0nz;#H=Zi9dOtWeh@lf{hrykGCv&|d zKXb3Vrwa$GA4zrIOg*?bElSXcWU9zEYE&x?FvQ)ekmF!ocwIV5hcFqrpH_2)YVie} zl-?t24Wag9E3B!g;QFI@&aZc+A6Wsp;W+;>JuzteC{K|ME^y?KISC5K<@~?Wz*CRrLa|L+8;`BPR73=eq;K(*sm4V;C#UFIrTWiIp%;Z_-y3U9@-opqYmFHfT~=$% z+NIu_;xn|0!NK9)3p9zQK#pjNSKL6Ug`wk`y8E*pJez7TG;~bQJ$aZ}CAQ@hgV z^kkTx)staTXVp0yqv|YE)oYy-I5C$+74@-BTgMvX!M3qB1&p+5tU1qb9b=MO$CxR% zj&+AdFu?5n^|96#zyzQO8y9^D1WERvy=>$+QuBhyA4yF_kUFVZ_+mfzz0w+w{R`Zp znHT#-Gq`=h4r1xlLIJu)Q3J~X71WJ9*>Ma1M}3$x)ouVZOR=IvUkfVZN=IFKuZ${b z5{<=B%4ee|2gB#{+_5IfhDxVrcpq zid8=0l206P?|<0SlV%h%SbiTme0EV}7q(>7%7^lblwN@ShaT?Tl_a?%2RkYZr^HpQ z;sGBu;$usA7?0KKc`S?dk_g9zYOqRzZ}3@A^YvT-sAxqRLcFBVDy}i`MaE7Yc$l>o zz0a~Rlo#>TDc#TYu6*F9$&tp?Dw62i2vr&}1yBE1D5j^2x*jv@s(vg5G2zB0{kmR| zM82+a)($v2?S=Q~^J;@kS}l%_X$3{o7>7Dn-~dBhv^hPr+Y@)Fmk5sM1*@MZrIY?w zpT3~QXtoo-oMy5Z}#a+I~- z>=U%0&0lxv`>R{ZQ5sdX``fMU7ES)%+pU^eGx^IDY7NefjSg(NnCVB$twWhIlzQ(u zZ}b5bwNZR_FvGBquI5X)__xHX?~!^|V>w_6`(Z1mK~_0F=`RQ-=dl&4!3uq3MUh1X zPp!~A1PH>aHxy%soSzaJi@p-fGvDKSsm&u%V%mB+grk#4Gy8?_nU= z1(H~!(->p}1+`1BtJ}89^tl6_6 zrAwQH4Fd(Y5M(z^LG7n%H*HuEwx%S`vAHGTj&mxBdhCa7L4lrqfGwEha`Lhz9nr0= zThdjvrD8}qblQ^Mo~@aw?TXP0rK~o?rtBJ5o6Yv{pa@rh&$yaG)1_?P%q)BB+1Z(= zYXFK{=XTAaAhCP)tl0MFwTvgkm!EZO-Zc6&p>?zD)UP}Hv@6|vH~)Y4tjHApnEV%4 z&t&UnU1-hDnQZUuS?u0+&Suy0SUTf&x-EQ9_02q;l^Q;=)Gei?KC#qo@g?jN_5nuB zZT25nHIr?bbxVBY>Y401KCsGNJfhBGUCG~+NZnG~@{{Z0O z#(bTlGuh@@FHY=tSIuPm_`s;UYBt-?WATi;%8l^>)zWJyZu1B>05FH!#h)8sb! z53HQY#%4{BWWuhT$tL;0N_XXKmh)IN%Z@_`Nh10yrp z##v`F(0;dlCOgCjM%?z<>;@jy864qk-~+0y;d*N4X0i>l zZkhku6*JjkKH%IHv)K_I%VzL4wU!U4ww4bpbIT~H4=i(QeTn)9DlWjk%c!F!_@66f z)!0;n|J`octlQpzlgTh==QEIkQ{eg6h5QI=5t&1D0_n zB_iE8RbK+>##@n29N#{-c$PDnZPXR8Gk;ulP$L+qI47-uVWMO4~KU6(+m zt*xj8KkE*-g|lvx%cv`2O-5apz?!TTYvASFAz;RB1Rl@2h#-RBOCSjFs}gni75jHs z;JLvqr>=+#%c<)UxUjqdXbX~U+5)y+D46}c2Ot5b&i@UT1+-uE>4Hw3=o>H#YQN;u z1)e&iH)s~vKI78`pE`9na2DKt#ivWt5qozJ&jMU*wFS7+UeHmh0kkv*zUI?8TiKFM z>e}%w>G@J^f}OF|!0gUhTXu$^`CB0V78!&-Z-!7?WB^(^22r(0KXh*s1kfUV(5Q_N zD~qJilMN6Si|D4RT`ZGCZig1_W|WCfFw~+Owq#B))HPQV*-0A~ug3Lp!k2g&S?O*Y zYNY=H)vlqgxDZ}LU2EK$*18%I@ETvDUYAfNpdV;kM?YaU+xo3_HLiIevr079)m@;U zP&uNXPD16QntD00POkpovO zL=IfB7~#kji$xAxv2Z$Y#bSgbSG?;EKfvN3QrP zB7rLw(g&_sjBwV&Q+_inW+Uu6U=YKt&6vxMEm+amBFn;)-F}#TCPriz|lp z7FQgYQo^^33vS|y;gWZ|np-2T*m!{iR@n2$aK)mj4P5bZamDNA<%-uqDmrq-bw(Jj zxXvPrE8gi=iz^mGY^?DmxZ*7=*2Xv2fk<3&oe_pBuCvJEim!I7#1)GnHrDtO3pDq4 zwl2`(ifv!r7-6{LI*Tl>_$oIlu2>AQvBsBJwZ~ZMZC$VT09a^XgyD+oEV8)bE8R+Q z#bSt!HNM1BzKQkU7W?`K0Q?3<7_PX^B8w~D;Z}$%7DH^T@g>%G)Sp_{cX7paMi{QR z&LWE|-tI=k6^kJ@*7y>O{swWE&5ORc;yNP?SG@LMB1sPxSzPfI&WS4)Lu{<^B{+e# zun%?i)s`o5#RmTlR@lQoT=6pC-}5ImXcTK9EX*!mZj=h^TyeFj+74W?SmD4Gi(D04 zvAB)E6^ld_TyaJ?aK$1^1y?LyBXGqcMFm$ZRwHo5B0mLJEKVbE#YU^+kET@USyiJT9(y36mnE8^0{18*fKC&lPVISG<_IgkRe( z3%|CtDtjR75YqEB%@m%p*am5H)EX&&k zzmgpbsB2nE>&x=mb_DTUF|67KfhWuI6=KySCSC#;aI({i3kgsm9a`gx1)PB^7R*Mj zSkM``VgYUBiUpp5D;Cs7u2}FHxMG2A1PHvK>#h%#}sUYSXm@x z3^zbnERsMScCkznx!owigeZXo5YdeZkqj-CFUS>7XnjF@EQBw} z6<;F+REc_Bo+}1z>*xoHYdh!?T=9CLUni~@RIZ~RsH~lzOK`>GLcdO2F{oTeKTuhl zJeS~#w+a0^amAo=9sNLM?dM#AE8Z&f>%LdI0J$Ny?xfKsJAaXy=(k0x0VAr)Cbx`@*j zMMTVkcD#t3wBrj?E$PL5h5^PRmzy-CK+T`$F&KKjbZk_L@Y~qk8^?q|S^TMI$!q@t zx0O{`S^R0t8iR;!X8T)N{AtY6P4Ju8JXaQf8nf1O_Pl|ucV+RXF)PDZW*s7mvZS>V zTbQsqpgzmCzq0t#n6-xE?6n*kD2qRhSvuicEnN(<_|urR61jYoT@7XNr!i}UohdXS zx|PMB#;j#*G%aWEL|Oc4%)+;wTdKoBviQ@OwTNw?#q7{1i$9H7IyhS>T?(>vB-7Ak zufcAHEJBDDE82(=EHIjWVT7z`qX9?IY!^yMgFWKJ1z%n`AuHO56JPh~!U+ka5hoB- zRljgT8tf4#f@ZsLLego(38Yq)7fwinJ>o>rY!^;QRE;=+2&?kK32CrLoCuoj!U@T( z5hsvmRbDtD4fco=-}LFi2??=VR7g01aH}9VAuC#zcC(_@QvTm8M*+&~f|*k_FhkSO zHWyn!5U`+AmTrLu3p!=W#QvjSkNg8oyB>v0OAB`YJcliCQdr; z5kXq)Y$JlOFChRBf=I_bB1q7E7lKF)D zYOm7se5rPep10Q~X#g^bUU)S@mKOzILl8t#P>UVs)ppkQS`}s?GcB3d5kWdpnb#9! zp;7QQf}oUwZy?C#UBAL_RAJt%aDRo1VK0jPZMO9 zu&VGoRG2pxD)LSuVT*DL`B+bqbPhN>hggES1`i>Csz*yz4OK$MvYz zenO8WwV%{ur1qd5t7`8-xbWP(4u`Xoidenbezu^c)~NHb>t?f~vL?Y^*j+oD9g~3x zeu>=P+3ZHyoL~v;_RMC-Wrl*sA&ytGo1`^aayiE<*$F99mN-k?HJiOmnnjcDRR=%( z_~ZL#-761X-@kl6`%bqU{N*Eme*Ns(S@#MRTjQhd<%+Bhg>P15G`w+k2A!)Cd%mmA zX6!<-n?v9VnDaFXY$vcCbC2zAI~E=6y0{wFBK+PqI>GsH?(Pe9-d{A}`q+SdYID(m z_b5^{;N6OJY5=E7z5zSff3pT$N#IHvaHYF4G$5-t;5x?WU7-PY7Y+E)*noRAfJFly zRHSIYJ&JT{0NPu=0qkP?2FOp(RW#r#cU5S>x_Sd9n6RnPfYU_-PQ?biQ?pq#;3pL+ z8t@K9IyGPedqp+{8`*%e5xAPb)imI0cXepMhI#{b0zGdF4fv6w0dI{Bc)LKWXuwY> zQZ(Q$MLIQL6Psw(fH8LFtN}X-?4$uZ-OkW}P4x!s0F>Vx8t|5)0k_8n+$lIO8t~(a z6b-mTkxmWRtSwo=-WGO5tO3^$xP}IB5D^-%x!!HGq5

      JTzcyy#ZtHq?@04=`21S5XkK06;v5@C*e7L;@4QNd<4F zAk)W0`l;j@3Tm=7olLt5-b6u$nF04h&NCF$q-fZg9u+)FK^vAZGz?WJsKL|lFpMgA zh=PzW2$?5kJVQYdJCQTUo(fJ<@Jc^#E(;U7BTOh8{11|SRmff!ve(zMvG;OUhwKd@ zdt*KOKC*X)>`ftite*WYvabo*n?v@NdiH6u$3ynkkiD&*eHYoQL-yK`?dsWglD$1- z*FyFc_3Ycpmh};TVZR(6Umo*8HnVgwlqFA2?Mfe2Fq=rfrsuke^s9Pqm`J~(=cbAD z89g^oq+il=>qPoRJ=ad8pVzZC0T)L7l5bcIO_1*5d7gN8^;gLLH{n&NZy^P51 zx{kzMf6xx!^O@}WS+~zecAJi{os}&HQGe8@9+=6F%({DhWMU>eI(ycNEQH#f@~H=B zvSYLEoj$T>Cc7~dS-{cNTYc)Gne6zid%KV9oyl$rMTQ^+xBJu^X0j8r?oJ=Mb|!mS zC^7(Xc)d?OJd<%i^Clm;ZYJYo&)U)l5qh;xJvo!Dnsu-9k^M6n=Y3WrfkxfpQzvJ# z)v#PXvTG*eOpzj!s8es{#QXkP_il$)h`qH45_rVjJ?rjqMZc?1zhmz7tb2zm`Z)|m zJ??&F*4^cbehorQPq??tx;tFakA4XBTK9%o_ePyaTJ^oq=2h<2S@&9u%OrCrJ)LYaQ*nZ`Qphv`hLj8SQ%4ta~uDYlNg4?V6f(KN;G^nX3c;j=Q(bx}OLQ zLs)kp=Lz@bS@+|iWo!_*X>i}&HtQY;O=DBSouO&3nRP!Fn#Mke`zf0Cs#zFR-?T(> zBFbMW9CW+#S6V24m3cGG<(9gcz$-UThrkV&f{r#uD%A z^vC2yiOWG=Jb_M>mlv;fhi0?GUS8bm4w@V(d2x?BU~;77#R-?294UEmx0^IMQu5-s zcuV9+Rt6Lj_L&@+pwaq@u>8L~EdL0OzZ~SnUG8L^H{Asy!?gyXa+kYVoT@L`A}<<) zEZ)jE)=S8X``v?~0rwVl-xC`!4n2y@@i;`Y-hgq>tG6{k@}f0BystIj67u4t`^nIN zcNPtJM{K}us9$WrZb)>!0lVFgb{ql8i`D?~)YgDY$cwrAiO_(z7Y(>8Hedo;8yhge zf>3Y3gge!-0g@N30piuI0hf>$54ax>4Y;#tz#Xvxdm!ww0ee_}>J8ZA-rBJNk{7K3 zk^!s%myj0^x(7l7-c&T;jj;iHSw&(4_OjU38?e{i-mw9a7p(!3Evx~TkQWcR9}5k5 zUD1Ho#s*x=k`)_pElX>?0oS_McWi*|$k>4ES;*@RxZb_GV*}uKd;=s8Sp(J(ScAZdDo~JhBt3?08`#=^TJoX|cNp>) zlouHe2F4FfU6ghVjE0Awe@gP=S`Sig9(l3Yl5hbOR|impJ-ibD`FoQW3yJJ9<;C|% z)Il^dxe?LG5?*#jbKd)Af>^#54|iN-1ws9#X?N$C@&&_T3bwRq%9^l z(iW2&X^P2>w8Z2_8e(!I4MA?aYiH(MECN}ByoeNe1HzFnf~bXZw-u>^%Ryd5ibSNm%NIce zEkvu~y1a-KiAZ^eFMDAT&(^;~AQUy!c}c^5Rc_Aa|?Z9;OA$|H<1t}j7{h#sa z8R?QC*Qxw^B0)8BgMy?-?U%3k@?)e+a@?%)TZjbJ$gK*J-a$38$!nn3irnhPTT-!V z2h5wj=gBAMMqs$v5uQ@l0iezPLzU_Psb=?dO69Dp#lfFaSE4Z7>GVsLF}h_8s*FoXm+%}FT@b2O9ui`zjL|=1P-Pq?T|#(NXhAqvd4aQ38RLx$L6xya zx`g?t*@cj=@&ae6GHy_0qar?i6G3eXL7mf~Rq=b(5faQ-0a5uAhKp}<*+hY_5E;-SF#QPLwg2gO5yvlI^_I0wZ; zf%7cs5u9hezLkOV10I~eZR%Ba!H2*(C?LKB&hHkQ{BXee0mfNsf{{A6s0l{u9Ml9w zouwuisdG>h6m`}yTE9q?sPmkkUQuVM2}bH1)C5JHKT3K8=b$DiaF&{21m~b8C~$s? z^a##DO;F%0HNgnZK}}HL{BhDFI0rRBfwR;EBRB^&L4orpNsr(h)C2|2QWK2e9Ml8_ z&YvPZg7c>u!1*zqw?Up!6BK#=H01=(L0#}Ac>W>6^JAs&O{wpF%hRO~_MS;6Q;yv8 z9^E0EY%M1laJ{wcaFxQNDr4ojC+0FC!Ne(L3%o}xgjB(4iqe)naVW8$-pO-wdapO@ ze=pvUpj5~r7)5}^R+Sn0Y6mh$p_ zu5v2xcBQH6KQFVN2aK)GyN=_FZMDzKYFw~hhO^AM;gz#^PNuTVXC06;Sbn~}-wM#z z5_SNg%8^sGRr#5kbE|8mvW9~_iEI=XhrDTHaDy^c}UJhAj^ooY@*GfLFa^sDw*7OeO4H)iPD%(pxI$)d3X5xDeR6ReA4} z4ykpMEpstZV=A|n$7+Z&w4laxGI5fdnEsld{u<&BvsOcD(pUQia@>dUpJ6J7pted7 zq_|rx56n^>t(Dv=4GdzxT4~{xZ`ODFYXhio^ug1toC`2>VgI?TCxnxPQY+mc^mND- zi5K@PF_gHt-}O8JICh_-OgG>HVD+D45C-ZXcrIJumH>!7uIC(p)ZLiV?Uq>%FLKY| zxjAZqXF7*X%VN^I-BSK8cSGmq25P#fVE75RVXC0UGQNDDsI8!fdg2Qp=ecarxw*MHx;7-tTIzVC&rxo%vy6dSuLiZi&v)&+BTpEg1q}(K zLt2*8C)|oVhRX1~baO82xr5ZAyRJIQyJP*tk~R1ekTvqL2u{5^%8e!8Q+zj7N_3}cg3S3P7Pz8n%wH6`Qy^OVvcX6 zlI3r0@6NBUe!MJJrTN$OjHS0`=I)!&ZTavK*vhW_r~lm-l6<)O&GJwZdUkPtZ2_p( z5KCDI#f0|Px>Tnzsk;5W)9l{3~*^YS)Z5W`M-pIm28s|LiT3XeGCSp3l%6O!?GU3!!_<=rfM{HEZv5wdiQ;& zYTXjOyYH(d#)O(rVK)9xQK%bYeym)K>-gWW0Zzk1WE4!ZY zD ztW^fPfG*~%k6G%?x?s~Q0|J3={22d*So6dURG(EK%oz<0^H?LX$1T`XewRx%&3v8y zXaLyHxAuyKr;X#uB%8?wAJ$a-V_Q>c`h`+#6m9OJZ&@$wJDu)DZcqoX?Ek}}3$-d~ zWBwC=RD5F0e_{s{dl{eT)hGJ&37G0pzW7J6@`Y56pKP^%Uugb_uiIU+?%qk7-&Xg& zF!Z>E(6tFx^>v}@USD66FDWj2XGxdm`3-^?# z^{nnGKj6o>n9*X6t525YDnCV#*j&C)I#7BA_4Y_(&Sa*R59HISr8l%=s03)_>E48E zA5(eF?veVO1T{#i)pzer zXp6w^lj;PWdn$BhPER`b7$nYK9jK{ffYzdK`M*g#$)SV7fyDf9`*0=i7NIHS|JNTt zXu2UZ-U0X@{c(ueFq|))68qhwi!;tktR+aAu55V_O!r-=OvX{t>~AeUf|uNwbZ0}h zG9N8v3+tIf=}Ms>=_msLm0RheAGo=auk5kXfWRkzhB4_^FHTo~i{6i+YR@2YcSvf9 zHLejDL*2gCOaBsN!Ms$%(M;XAqjJ(JuzzsiIY=Bh+{B@n)9r1BYUHRD}Oht>0#$_vt|$LwdGEw!*f@=bF$jUP_Apg=sCXPF>LUBVUcP+N>rbV#S5DJ1Csacw}>dZ8x_Jana0>ncwIbG?U$Al+goHCI--UrmVV z^E8~RP`DoQ1jw)-HPFQhDd8Co=-|ee1|v%&&Tw;?U+^O*kZuw*_|_TR5{(X|TQVwOaM(g*1t@w;y@X0UXx ziglgJC#E>4WK&TWTBK9?#5<3T))@1yjHbai9!kPbt-e6=aq8wB8_kKStc#h`WQgI) z$ELJW>NIADLTogvWd@Gtq3;59AoKHf-H&dYpm}rUQ@UuyUhjNA#AEPpoi2!=XPq;W zfqY5lJ0<3pmwV3)c#+_fKw#H;Cc5}#B&vp-0K^Fml+8J#V<-#)mIMZk2yDP<7ta(3 zoEnA-fyGz~${0$&r0~8g`I|U|5!s*ss#kD7ax-7+)dukbJ*u@~1Blbi4}!>otjbb4 zoGq#?E?UZLvQY@Y_yjldF~EB`Ev1Yi*K`@XGE8F^66^IG&K-PWL2aRyPp(t6ee(si z>HurTVwQ9_Tw5%#8g`4wf(frJQpxZ(az#<=5<+%D!6tS$mUNnKwoReS3M~hYy0OS0 zya%>{*mC38xFBAu65f2oa(B5Ud&+n57}`_5od-+Rtvp!GZUzA!1+KfKo>RTbb%}ql zV-1cr?&PLErEn&*NKZJAA(}gi3I?&cQnrNtE_6#sS%}zK)qld(0UIP^3T;TLPh>+8 zvfrEy0Fy(%lZ_lmUP)-=K;^*$eXp}Ue>VU#sF$^a+w@Y0S6($_++st`yquSegLM5z zB)m%KwVvTaOf0p4pdTO*;RffmR>cv}R&ffw|76N5s9M?GWeD^w#Q_^2!54i8C3mRW z=~DGS3RGD_b~3d_eu@QxE0#8wckBj$RBiPS%hW7lU8aRX>>ic2S}r6_wOA_z59Cj@ z)rN#!oyvLUu@WCE*6BB|ezhrH znw*~FLy&IQb6@`NbPEonJeDrWdbGJs#~BG@VHsY-Dn=(`-ar~MPHGvG2;XZWd~fj$ z$?e5AxIB~eUf`z(I;&Re4kCJ*UmGXsP}a>GUEn0}z~_&W_v^^`W9fRyH1${Z@`{pq zLENZKcX(rOcw;9S1`YC@SGs$sTZ^hhWX{I4QbDw8BXmVnyI%30#)|ob;3!nQhl+EZ ztoix?YG9L%odM5K(hzna#c4Sna98@_I1x^=`#`@qNqB#8l2&G-xeSY64wnP}W`#Zy zo(PT>f0(CgevoKn_8uTD-JRatT+>ma4?XFWH?mEwCpM{O2Qo2*s;V9R1iCF}CcF`$KmacD%5ZFiwoFCcl<|)<++BmSq9PiXs zWMqw{6IlVHYL|!63~oYsJGd=#5^-{JO5on7H$aW+T#xeERnQ}qswUa4n{!@GF9vpf z^R#h?@5xaf+(>qa2low5veSo@!AC%4k*_M!Z}sK~DehD*5TslIgw0)wK={M&QrJiH z!wz9|yJ4kla^~$)X`U_#_~-4Cz~4arA7q!fcCc}l#_#|mIwgG7q#1bH_GdvT^Q{nd z^=FV7<^hAw9e;N5r@#v)Q|zHgon&4lOZZsv-rARhe|M?mb&vT$AU4czk`FIahSYNQ zD6)_wMuIncfw4f^Mkx`Fg3iEQ7{)=tBtV&KAJC*KlI9Z-X-F8UC(Ic`g7RA|f&@fW z(+w$+X`%A5dO=>IAc9nUm6w`pN3v@EKBY&9;44BaaU2 z@SyI3ez@d!wkuKu88(sz(|Il%jGP@iiZD=8|Ih|7+tHR^=g%xZWicaNnlTjZor9}Q zA$Up}wxndvz&N}QBP`-cHha$DUA=+?HUJyUJ*Z^yJ*p#Awb0zpXUorJO{+%E7jxQ_-?=2{iRwNaWOvwM#40eVVX>$ z5_72@h=C&AUzR+e8tdN)H7cQ@#(`fF4e<31)EZ7YJdpSb8`(K_73~^N4A_x>)BF9Z zVvX%b5c-5Gf8wXI)d$=oAEWuJKb8r?xab5if zJ(vBq7-(aosE$36A_#64LGZQ+g40D1gfD`S1i!0jiz4u^B~rU@eL|qFf)^3fxsxdR zw`?v-GqX#It-?J8AvHOOt>8xp+JKc+T+_*>sp{B4311t1e1w&&$Q&UPZ8J$4%Rim1XuDn=>xEBe zD?22!S;D55)po>S)OjiM0!Ebl@sYj<#XhJFyZ=*+w#(VZiNqy?oGa}JT{cY z?dBKKQ@YHQW$}|xL~&H4ZcaZ1Ln(#~aic5$lHK{E+0xQO!spXst1^gKPZtRyUVxn- zUt2PweLoHDJHkd4M+%};o%*Uw6Vp5OxStRHFniqp{q=YdDXoc&mt7Op<~m>I@1izUWDIRd8F%QJ)MWG?3N%?$Isk?}khv-DppYU62o- zgSw;J#&eLJl7YcKQB65%t(6%~NNvyE`Sf%}C#4J6ju}8LYp`1sh()o}_7qDnqnr%( zsEobAlA}WxMQccL+M^ga_XOu7gY0N1w7?C7h75#;a9HA{<;K5i7qTr|KD~){NxOSW zG?rF}r30O~x!NEf)+gp_Lzbr$otV1fEXPU>NwRBAYp)6hj_RqRt*my9{8vP+eW>ky zIy>;`Y_tvcQaAkRY*mNk!A?NUmCT*MS;!X!RiSp&b zC(&@8lWwk#e1N9{Xel}epR_2#x+T=f1-T7Hxv#N)IC;(ua%3h>%h&5p#RF%)xctd% z7&VrL_6>w`Q0%I>!2-MZBK`7punn`=4a~U_G+zOJDY!BauCbp=7|RCcV$JA?`j;n8 zsULIfS@QCry*wOMZPl;VSN!7gOH$lmT0a0%B83#&=WK;{yhi!cOG?|%us=76RR$Yl zQZOG&%|y=j102VFJE3s8Xxp#u+66B{y+z0pJPpzt+p-i`;^a_uWfkOsuG6lEQ!C`W zu4AK)OWt7zIa8o!idQ)-DAm&PBr8MDVc@+xf7f9|3>b8dAt1?G{W+gFML8TG*%=9C zbVS4g3iT*yrzDL{Ok)#MMj|v;4+s3GxnncXnzz@x;%B?hJn!_$nxvmFCauwSmCe;? zO(Nsf1uCSYOSVC>y2UDyXhZ@xnJrZ@8LG-4H5#hQr%|*Wk?HBEipf6p86wd>RYs=W z%8^to%Tlwu?I9v_(z0?mm)TxQO4^P()A#ApG zf)KleLayJ9WXb7Qq*=OdA`&e`&N|h4h)ASb4-<)0tI3iR*|bizWV0Em)(441swL~p zNVO1R>r_j2n2~D9__Cl{+e;6K&YPv>yzuZ6#ppFdwHHS*%5CK00qC`i0ZVN;Bzf!0 zNJ-c-s8bTzSw>324nm!h$f7b*5(NG_C6Vo9q$E!fi3XFhl8lsuO^CWv2H8VKO2VE& zos!7%F;WtlJ4Q+(o5pz|=Os$wA?HO=67gliNjup*DGeB%$+9nZpRs=_P*k?fT%gI{ zEDV!1IptL`5@gixE-5X;ZwS0zEo~A$NkVyR499!?LF<^0IMs;)LQ+D)M9?r@1O!XT z9Gr{8sLHD(d|u6z4ikSYB?GvajPO__TM(T|kwMz2o7@Zr)g88tlq|j}xG3o&$TpW! zwOW172gOUVNmWqN-}k{jQorbfVgvuJ59-V8j;ZV*!7uxu)?4rD&b9U>==rM(a=^Os3P#XdSX( zM%`fNESOe1itX?g%q@rN9V^6F3)`?AvtX9l2kDpvQ_W6q$1KDrU5wVD75gN?cFeg> zy0jf~mcXYjMn-tPbZ@r!G?6m8WzVzAIQ?DjLGu^{r%MtSY*;DuMNT6xENU$`!5lVt z6%lV1sTMn!1*8Q>B7!t_Q42`>x(^D{*bY^yAnh-FP>}YV4+_%$(gy`;Y`zwd_E$bA zNMjdOsgg#%>4N~9G#!(8Uhp3jgL7b=+ug(Xx@U`e-Sa^${CQ`vl^krK z*VPJABC>Kz0=O+}%@hCsH-1V*;dBjI1h?<_bP=}i`k=s#U2*|{q}qpkP~gT1f>H%; z!D)xUE%@mWxP8DE5V!?z93pJN0f)d1_2>fJf}0J2Tkx!5;P&kj$6bKi0|stC$B9AV zSEDoFz$MNHZg7+Hfg4=seBcImIv=>f#m)zAaJ%z?8(i^x;0E_RAGpC~&j)UBE_B26sOnxFH4nAi)j(F>mn7@!>|EtkElnhXsM#oDT}zg1ZfY8(Q-PxCN&g0=M8t zL*Vv{zJS0jc*_vD1qT@dH?}Jaa0_lQ1a86eg@GF$FAUt!*wR)DT%!KkYn|Z@rgA=b zgZZ2f-e6MagEyGj`QQzvcRqN7Ii3&RV4~-PH<<1D;0>mHK6rz9pAX((^5=s$gn{|s z4WZ!&32%~0#EeQf@yuvtG67V?j+PqPQBJkcEr{&sZ!BrL(ieCz&oWLRqq+hoC?1j) zXEmjZTMTTW9B9xDiLfngMUF_iwoH}RB#dt6SC(f1x(M27<_ zIYN*L^Sz;SBt1xWI~8!cfX`nX zC(H`G=xTz%YqnMO3(fw$Ul-O81jM~BI^kU4Qsn~=tjOdh#u!=8otlm|_+(d=8iVmX zgDSCditTj*pK0YD#1)CZwaa@^_H6f?<+ z!Uu&6&-tL>|1W(|ApZ>?6qNs!4+^j^`k-L>n?5M;{gw~1WEhhx7PyhS?clb}{M)g0 z+X?W*+YWVbEN4FS*x2m^Y~pMOTqiISW82@sA)R^lV`HxqXo;=ub)A4pTy2l*1WsaV zxg58{T#BbfslG#wSX%Cm?vNvnw(L3qju={mrw;ER`#4ERZP3KV`NEde20m6m^c_Ee z0;2Ewpnxc_t^%UKx(bK_>nb1$tgC=1u&x54z`6>E0_!Ru3aqPuD6p;qqQJTehyv?s zKm_Y5AZp}UI|9)x%U@?8I!jJxAbOOX&Or1baykRi2g&ISL?0lhGY~yOPG=x`KRKO& z=wWg?1JOg|bOxenaykQ%_|(ooBsR4(5FycAHV`#%rvjqDkP3)`XE*^-U`Pc-fgu$T z1%^~W6c|zgQD8^~M1dg{5Cw)*Kol5K0a0K`1w?@%6%Yl6)PM+vwCb)PF*sjqUj)ZH z0?)RNfU~tD&}``lFq=C9%UDN1+0+q8Hg*J%4IP1FeMi7p*AXbPjsQ{X2n;%(y*z4C zu#FN4TG_^h1>1-e0Z(7BjSILUXW%o7)8R9wJ37fpDhJ+WDX_z8R{u}7gj{)Za;1)m z%WNW1ZIbLtHWj;@t~{RXKryHvJqe}3p4yl7wzv8^i8dDz*>7~694eW87=F{nlO*3F zO)tG*=h*PE(jE$5{uNeqax&~alN#wdaUarShwYDA!43^9TG!MrDP$JylI@xX&V}!5 zDo+u#!C{Z9#|wR>Yk;A?toE=CUFHHFO@cZ-WZEqa?G7ELo9eJBYI)EwQ{DgtX0erZ zpG3bvaG-N~RmjP=w@ugF!1t@CdFh^PFz-19+g-`hx>Jt=-Ws1^i-DC~1vaItcH9Q~ z*<6rkQ^P~$Qj#QP{-<53;A{cLmMqYB=l#ckNqw0S2If3~9T_SQVu6XXn}$hfE`Zgc zzJf889zga2-x%4Ip{s#WsE4Uq4;maK93JXU73eV#>udNt%0l_?aT2hR*737&-k*?P zv?~)}QDc|XJ?hQ1WcyUNP_Ks)d{suO)(|`qDyh#9FpNQ;{N(x07L}R~$>7jHy&@_( z+3@NW!rhj4=J_5oaoOLaD9uI{QD39_@ZyFeq{ZnN#MU!R+3y>68ci6axqeb`{bmrL zihBICq-wi`Fy9& ztO4e5N8`OLUM9-hKt$Y=bqT&IWvuD2HW46I4*Q23X>mvby?l-`kmTbD$?!?I!+ zpVx|ICF^fO;1~XQ{OA#=sF5jecyG$l22WzAL7z0NvjQHSI}iN%%DTHQjB5Mf-TI=&UtiSt z>yw^eZ$z);@u-mMeTTW^kY8MqXp2f_Gs8%QOL1%il`P zA}*bDML}PAnUBZs=?i8&e_5Z@Xz2^8KkKzGq?5q96eMYOPhLK0MlXyK;rmW`B}dV6 zn!+hN+L5wks~C;niY`1Wm}fnb248AJvcfYOUJMw0;KOsYJDqdoxrVZQH9;ULf4Jy# z)7a$M_{c^wZ0Nye~SH!&Fc>m&FU$eHC&KMlKyo;-^3Q-FUL_CUCw$^V6H zH*RFy&0yIqIc^;4m$rB@Qx`uQ+i`J!mEsXLx8eeo4Pq9zLH=cxO@{8}-p(nDUM3USw zRKd)x{J2Yge(v$8Ogwk(9o|-9*bV=V?5OhcJM)?U=kLCfp8CWA_x{hSJ$#7<%*`o; z#Oeq>sdVD!01>%YBYBQyUtVqvhG6i+(tWH${+%eThaLnp5T-miSJR+_G7Fx_Qk)g# ztPC!Fyfz5T3_b39=fOowv<-QT0zPR+@aZOJsAG)Y9H{lWbCpUR?Mr+TD!*L0gRHo-a$xseVjq=88?-1NjV9C7^^WKk+2ZQY);; zba>&wnOi6~GJfb)e_Q+i_QzqqxPLCZET_%opI1v%N%4EA@4x@u(4SwQ?mu_vkzXs_ zf8no>?Vme$=-PjA*KdqH^wG}}yyeg%!?*n2zftOYe)PYT7yaQ^EcF)se1X(h(L-mi z_|-3b=GUp{wWXgKJ>C5mD)+??y!Ipic}p@$@c8%#R&Cl_K2I>QADZ^$xkEj-ExCH* zFZ}G&b8}CqZF5Xhy%$~id#9)W6Q+u#l|{kp^g+-~W9Was|1K02eNSDWHBT@pvC(q? zee9t!d~Y@UgAD)gm`&un-uGFwH$iZFn;DsVlFooZ#qamusZiCS@2OMg=4g`5hg{Q! zE+k3lWFG(uyp0Y-c!y$FXHvuH!AORHc@K{(CJP{JC|3@cpMv|3d(vOWcO1{PlYnwZ znuJFwH`pVWU%8;jqu^*eL`@#=M*LfGJ1_ zrkdZ_5KpOMly-F*z@w4sUm032mS4_)=(yM$f#sak&{JE_e= zF?h8)JE_46Z3*6ap^JW7z@gNQcQpYbJ_fUH$>0O?42&O^7co3>Jcf#OTI|^qhxYv8 z7v8axaUxuh?p&N$^aLtf%@=&|QyP zrGbC8s5Eq@fKQ3lvfU~L-^Ts6r|CD8SrEwW1!&pf)b#dSJnNDNps?vo88ZEZx>DgM z&lo6dh5!bD4qqx*EwK5LNpJM-+K^>qy#F#X`|`bbokAN1C1JcRq0Jx`2|nI71G{Uz zHb<`ixSRvYsS@6Efvu9Vxqp?rJ_ozS5ZU@Xpt zN-n)Gf8Y587XrZ$cPRg}MB6~!bTf>*C|4PmU9^yg_G5bLyGO`pa^~gwDQ}x3w8{0G zn4g{j3HZh-lizA-E+RpKnX};`xs>m}djKNQm#@8BR=qUtLPRWQL40k8sPzra7hEFsw-3c znb2M|rt5!Op2|Oj(X=Ad-z4%3drFGD_kt$s5Ae=tSzje~5qPzi&J&pnIiFP|guiR8 z_~3b_Oy!>Mp32|5C%i*=IMhY(qV{$u^6k=8{z&-zR|&86$^QzFQ}%h1mMcl~-y;AS zXata)wJV>l9>c9|Ue48JdUtHpSn&qH!B-ZVOv)`C<7$}hQv(LVT8*_O4+a9`f+zMR zIW`i@JgHw-alOZf5(Oj@flmTO9s)X9M%LkuGUni^EFYCB)2lN0lxQeJ^$1;v!L(Nh z!=|MAuU<$)v1i@oVZw|JED!`V(fGvZ?JH2&m zvDfd($`M=CH;4oYB?yY11+3G%m|1{)V_E_EjcE}98WX1j9yF$14Cv69R>y?K)PN9; zNf!+-8dCyFG$wg8sHe~udKd7;TrQXMKjVO@PFq7+Hll2BIp^A|sn8&hruPR8K`H}v zGMN^Db~(^~X&;?SUVxnfDkE;l+mo*7X~xvOlYJ36@r{Dcc1c zJs1gd{T$V@&asXf(gvW^UNf|u{f1t_CKnqRSa}*gB*^R%WP;phXp})_r4}Hw$3tdM z0cBkVnQ|-0X9FD{5@h!HDyX0hGKcDr*`wF%kXf=p?f{lxaJi8LQ>0FU%S|MhtU3wi zr8)^N=XGGS3hQK-as}BfH;~$LovubGGJ?|zMTSILMJhU`PFw|;kt0fnM<#zd8+MX8 zy*7V0wx?{q5o}M{7zI0`uAkj%cbW4}4kr92v`({I;{$)R*ejPx`#EZq{#IRMDQc8T z{ov`k`cl*=l{)J0`gEO@M~zacqn`KaT?C^>snk(F=hJo49yLm(j{13@-a{~Ilu8}- z_kFrlSE5F#)KS0a)7cuTYm|-<37V$;1fxc&)KS0W%WF)cMyb?MzwFZo2}X@lsiQvQ z(}xH~jZ&$j{(GO!#$jEfRO+Zf(^M+mQKNJXk)Uac)|J;R&DOr4VrjLbeje8G7~6Kz z&yzAKm!P$1q46!*+9PpxQUH|#>0n3wJgJUyF;$1!WGmI*Q9n=WqTFiI;TYoDF|DU~gfwJo=?>x`rzUtmvRkt3Js#LPI@3DZA zErCKDyZlI0M;5lgHaNs2?u3UO9EPRx%pfDYm=zlp;2}=p&T_Cw^KcSLX5xfE+M#K; zv#=YbF+J`y9h@1`?aX3zJcOi4LMMVG69P^=zyG)QIp^NGSGFaX?l6lgsm?k3?6V)= z{`R-O{k?WD{}hG>^G_jVF#i-D2J=s$UNHX@wgvM~Ay_c~1gFNEe~z;rmT%K|RFV1T zcvO*R(|A;o`R904k@@F%RFPZLcvO-3=Xg|+`R904k@@F%RFV1TcvO-3=XhL^`R90K zk@@F%Z1LuwW6%Zj&y8lb1LmJXqG0|hBnsxALZV>)DI^N!pF*Nw{wX91=AS~MVE!p2 z3g(|eqG0|hBnsxALZV>)DI^N!pF*Nw{%J@w&ir#663P5?JQB(Lb378s{Bt}K$^3IX z63P5?JQB(Lb378s{Bt}K$^3IX63P5?JQB(Lb378s{Bt}K$^3IX63P5?JQ8{H&*z6k z1LmJXqG0|hBnsxAw%B^VAzNSltu3kk)>ct}YYV5pwYAdU+VbdcZAJ9Awg~!LTlf5} zEp`6ZkZ7a%=O_a09*aD?#v;xIW0B_ku?VwsEV3+*MU)qfMUoeeMUWSaMUEX~5#zkE zNRf?2i2hh)aN`%BG1R0m|BM;>jpm=F*AUDZ!l=Uhb4KQ$-<-pUAoT(M*YT66?O=Ot z@{LmN#hx;ei+UQx1RRIww5W*qZmuLXX%o{cB7Sbn*nyCE#WT+wdDR>2_Sdwv8F&kG zUA*P?*R-Rq`H*jHfMutdEOpo)*A$%^-d4twH8KsoGA7l(>iF$RXzr?i%BKktmasud zFowzh>LZ_tc4AW%QFi{7@*(e%38N+e!woxsHt6{ue<8k%eD!_rLi6n|PS_`T9=b+E zt$irv*H2me%NmD(Rnf<+0}H;fJ6x?0nSS)7j4tTPyXeH_ye1Ikp6c~cz3%Z^oEKxl z9aa;3znolWVaI?u_tz6Cy|G>We33VDhZ_13T~!Y-ZI0))Ob z;i{c-!m$8^zKsceI~79TPCbwT9GS3Z$kH_zh_sAGkhr=CCW2nCSxw}@u(t>{T+_nd zf{_X;ogOeW6cWZlLMhvzDJ2qul+THT*3Oa9^@wNY=0ZZLd}!$NK&#I__34dh)f$gh z<0~%EDu#N-l6uwxcIvn@y6y4E4jAM>#DGg8Gk}opTafBCfuPACHZ<{Tisjbp=P?B` zWT4)HN6lKkO~gW2s=4mp?FjFdljY)tKG`EuuJHPi=6~M31)J=ClnMu^6SHZib)_@Dsu!0*HEWwk~Mf^u$rO+i$YhC zj%x~VUJz{`>A04|Hu_MME&7>>`D!H!u5@Kdy4$2Dy+eXwJwIJcp7Uxpj?%cORN zMd-`S>pWa8()b1u9Cysi(+rvdX{?l`dsL`OJ5n1{3wKOAinGsZVlAEk z2aC5if*5UBJ)00&-1`-Db_9hiu)RQZn`8rs&Jjc@fmWbP z7f+w|Y^SL6M3CwcFlc+>4n7d-;PN2r(;g!1EVPFp7^FFmYZDQ68QMe;7cwh+xWOUa zY8Qc&#`})9c?jNT+DAZPyzh9Ihv15)odl8~?>nx&MDRm*Uxk9k$0Ki z;hUbh*2ufQ-r;xNca4#EPVew3cdj<_&iwJ&32h%I_R|>N;5NGYOO%7?CsSlcwERc} zc_?GjAV~6I05waHH&uZv5ldxleWM8hA6|u25 zW0oqOwmKp0dZ0-QyK2#A&{L_h*nAp(M`3K3vTDnvl+RUrb>u?i6oqE(0h ze^Vg>BDo3?kldAspa?}GSa^G9FLny3`CWVf2HysJU`5`&0izJw*;>F#zTu6eI2N@f z7FA$-Y@u2#zOfczY11r*sFvPiJXkzPiS17CP)0ueFb`$q(_i7CjMog~T17tn2oGiC z(~t5{#%ul!9?E#laJW_E(~t8|Mn3%n4`t+2X|m37ir72`a}>LHl#(cR@hBxx?BY>M zqS(cwlti(MM=6P77mrdB#V#JDB#K=;N=amjIZ8l%WRT_52qF9oeLgS;=FSu&ih@LEZ$L5`0{l)jjb?%5!`CFbbj*YK3qZ$Z8;xd zPs%OpfNpEtLW^`;=azLtw+(KgUAk>@%Q~Z5VcO+(CuVMSO=*Fb)2%o;*fiaWlVjP^ zt@t>YG2M!fgU`~fxHwoS-HMB2!PKpII95pAiicxK)U7zU&;oIAp^5Ns=O-&1p~>Zj z{sM7oEA5-uJGsx7mtgn0;V>ST{CP;@K2);czjV&a#+Y!^O;>WiiXc#mt>$F*}BfnLW#5 zwhb3EbC$&{3>U*D>8wU-ez+LiyU(VWA*7i)i!%0v^EL{^TR4j{+=eoc@ttvBdK=1M z(|N{apw%0K2V3AXE~B-fjP_ZSQQJ_)7Au3L*jfio;1-&oM`(h-jH3x`cbA4KP7@Zm zMW4>JtfgW4(uBU8T`@!S1s&#D7BfU&nyj#A*P0>v(uBD`yJCjuOOuuT?1~wpFHJTT zXIIP+eQCl`oLwIm@_ZqEkkpGa7brS#*G`wz|8NA=fHIv${^gs z8JBU*hBB}^JmWGBY$&6B7G><;P{x+CC}S0#L;J&R!vu!om|WwGI~5TDaEO5+gwb3hX_m^0&{l73=x<*1m^6D86q$o z6@OO63=$Yloj;2*9*l=(Lmdip=KVRgv5?8LDCC}vg>=uNkh?b)g73l^&&Rtq7ScY8 zLhjsH$dHKLu=fgX(|do2UGn$K*7VHUIvIfB-o1octp8*@qfNb?=Y6OIuEwQ0sd=x-69%ah3h z0!`$9WgcO6Qb7LFD|6{^Wu<@ql~@2ItNINo>Dtsg<0y`!NdNfpf9=N7BKy%Bek@0E z$BQzly0f=~f68xsN&4$wha0O{+A%x9J=kT9h8&(xSb+zvV=7& zIyKZ#X=!OFEkw-Zo4rOU^3jv6h+M>)Ahb(+A3@2pJHk!;O4{EvHK9=5USs0n&jrUD z+58`LRG(Ra=vfi|_)|VRJ-g}|8Wq#M^1Z^u5wyHH zEPz;3(>ga@zPw=?hc8Nw0s*T}c?1JkM^(Tb!vEf5IyV~40S)V846~fvDJvqb>&OnR zsj@QIWsO(8x5@a9=3nUjNwK?_?#}B3R{S<8pp#7~<&mo_rw=Pmrx9=U^BlLP$|r1 zl*b4>v7ZAJMjS8H3Acd;xCnPb<_RwyA2Nr}WU9ykeqgGgU;1x7Rb)d|j0v|m7yfsj zD%dMlQw1-}@35&t^O-6&a3rtwYx(E?0QWk`?{oipLYUjySX*3-(#6I4B0r6${_>Md zrV)P@TUyC{(&9|GE-sQ1MG=qszqmMQf5-kQzey&eXrkTePKL}=k-eH;jC+fn{PAB> z%ey_OHU0S0-?JyINa{TO4a+6(raF0(r+c2Vr^!y<;^~|IUAL1@@briOhrMG_OL=ae1dtp+rPuL_`iI?zG?WHzv!RpKG#3>x#UO8H{b9zr#|P; z`FGe2tBsG_ILJg!?Z4OF$(=Sv_K)>zFC0mY(tem`LC2~Y@|{h!%yC)$Mf=o~&vw71 z&K-+oAJoFtPuj%4{`=1uqX^Z*a&rch>iqdk+?6J2Phl0l>XF$;Ho$mFVSS0z8R^c) z_JFWid`(O;l6(u%Ehvo$0{7zgs}KS}J=JQ60XdN&op>;XsL^d%Ok$NBVd>)-yEWn} z)d;h|l){_TrJ~IF-+bveKb>H_h*cK3I1U=#0{2la%CU~9_FdS<6WkG8IcK_&?+ZPrtrIj=68#o>-V z%sb0~&X|uJY}5p+K3tcz$#>Wj0+-S@;9~x>p8KIz%w6eQ14mdobVM5GE9tLz#-@QL zIMa%uOAdBegcCW_cIk^1krhD^y6^%P6k$wR^jT%WS1KX`dSw}5cVMf;ktq~HqYRGF zl~Zk_jIE$fSaU)VVi1aV%Gc-Q@*5udV!J)f-iCkNxG%~AiyF?! z73y!Oh;xc+PFfLpLRbRSeXX@?)l5fRKMNrQK5(z#EnOIT7&^@$BG;^5^Ta1Q$=$pf9ww)gWv6aCAO(caWq&gXbrxc3B_#3u-m3n*Blb+VP62vvZyNc zER}l)ZV0#ti0c&u@`cj&TQ-o06XiLAd`AYWbXxFc*Wr(dXUoJO00E<3fq001WmqS( zEGUQzW%pC2pu)}w&8;amd1F6$ZL8ad!7gU453Il^?0PiROcRUCpuo49wb-p|*0#B5 z=iCLYh4F1ozX?TL*ie$Is{tyhsrs3Pe%>hebE zvH9xhkmhTHS&Fahgr`5Lv$4^hlBO=3rLq$^ptGEWI_|HpI^wW_HgA%#KHRcMWo9rx;)-ISU)e5jv-EECm5`s zcakov=<=xIVEueP=~(Mj)`P+N`2x~q6}?sMkzg@cKkwoelb+J1u&{pKO}eb2&BPp2 zXm1CdIbBE1ptrl-?!_C-;!t6I*A&$b!<|BzvGV9z<5+9P#HJ9RCZ@>*BW&wox{xQ;V6^eusFEEHGxC`&(wzBEvi?~y zNFc}ue~i43eW3+6SS>f8zLLaOqD?BhKqL{q73OWJu60x)8z7k69NCPvR-M5r**2+t zaN?5XOUi?~RJoC9$jcZO)XJ0-a&KSz)o{MG3({5e9$Z#XdT`mJbB``am*MfaIP@f3 z7Wy;l-UaD_tO~k+Q`Us(?>?H%?~8tjyZL=jD-8KF&;0G)JN8ZdC{k$RG&J$-MkE?M z*c)iN^1J@SXZ)sYe5#;$XH0oq?+MrY?7B0(ZeQ|h-o(43i-82*g{DvnLO8!=s{RJB z!<`pnr;!?d|9C7Q9h^$o3>dCd?D2PRa-!VVOWo=RrP3~I425p0Dd3Zf4t_(9f| zMG^qpa=cyrSdV*8Dz1KmZAtGYrL-VbP2?kp0*42Q9ZMK@L3}y+ylo2XH`(Cc00o22|9`~Kl@ud z`h&U=u)9>D^e7>;8VM>`l*kuY63QNkTR>RV_VQL4vLnGP0=M?%Y*NP*$;FxhFRf!IR~mmgx^*ec|9S| zuF3fQ+;$eCuZb+3aJq z0rrib6px!1w6*eaq+?~x7$ZD#W;IhKq%(YU+A1xJw)ZvxA3;7P`4BC$i4%Zk-HLo4 z2B#PkiYZo1AaeOWJQ@0cxbR5|Tu#0aBdTMXUc{Xs>DnUyzDttusC7tQib|)Fxdgmw zYb4qT*usq5*scI>wTrCJ)h^4TjuOwn+C|9~medub5NRHR^o5wVrM;U(E)?leYm=u= zP(zc4(oi)F;i@MU8yki_m0_7iK*0&=S4Eb_!HfbwZ!m*~Uc@c+sg8ibp44id4WRXe z8k~v16|DuE1z!Y=Lg@0_p2&1FOT3Z6_=W0>Qa}5DB9+9BQVZZ0xHqX})XB%Df9t7! zsuqj{J=3JZmS}v*eo$C(nROxs#VP_RfEhx-)w?M-S)A4?m1HA@a*EIeHzGRjAaU+w zH33V3SH=T|g3w#t#Kppzqq8{F`Gg{yquhHULdOQ<#ZoE;P9jjhhJg&0#u!GNX?7=C zTJHKa(n*2`OEo8IS?p!t#!&H2BaA$mu|{!VL4SP^CBsOK!VxLzQt^e>$2tXMSy!NT6>!Z>$T>i#f!L{$qQ)}~UpBFJ^8cas)Q`|2jmv2A%G zeaWPzJC8g3W7i%%hm%UqOq~w;fGj|G#e4z|8mN|dWdil0BOsFoNrGuinWV;&j)ecH zL2KA0@n3gb#aN~oCeaVYi{c_AQ1Bh!)m5W73Pf^%z5of*tqF8aZO3j(MQfy`Jf+ze z_JIJQVbs8IsH?=q$!&e?r9$KVAc(r7dN3`BbeIxYD`YkbXtH2mkH*yN-C;PG06;dOP0E#D3)GQ8v2eJ zy8*D+PqB7-Aio0R%iA;?^#2utxOx;HAO@?zEW~Hnr2Bx#(^yI{X+5Esnfa^=#_+Ms zhhtBp?$*%d|q(+UPN@SZSa2E6bv)G(o7g29i-9$&WqvmyfBDzI7~g z&sq=E#4o^<{8?Mev{YDS#e}G?Mqj4d6AE*d*6NL>VKha&Jw#2B*DCFm#vs56&rzWR zXv2!LoV-~XrQKgZSD<)EclcSst94qc4->h`4i|ziX($9%YdLv~GB!gYD2XVf8M=F* zC<9UZP#G4#i*vOo-iL3~y}oROFIS2$?a1A#2g}KRz0rOJale(xG~+`>b<<8wZ?zM^ zq2JzWakv9i_3(d|Vm$+KO(v+v1fjjfrUWFl(7u3p>b60J;i{`Ro zFSFwnlB!MnwNw?&)#uDCo3^UNo@ihi8u+Uv*l|K1s6@@*9bE_Zq=)kKs+auC!Wn!*7OO{0D>#w)&jef|kP zA6O_ulE5>WXo9e63ur!QyOu9&DfYJ(%7>xxUl?D&1RqyeIAR1+u8~XvpbYEOG>?r% zn~FX!C$~$prj1sC%d)a9a2cX$K(F4ypp|cnnn+@6&$44GND4a5#PYaxI!OAr8(~>B zSZ%nk90e?qMuuHTF>c&HT7E@bf`P9zR#v1Jl>R_}UKm`7i=9G3KKT21_CC6nkBdZPh&iT}PBfs5>*% zKocCXQ&6b8CZX;YL#VsO2T(aHYgn1fvWq%&wIxHw=@@py^&s8Q0^Gm|f>O2k4+g+P zdgdAy0FRf2oP{Ht$8TW4z-sntD@lPtZdXw54&g96s<1DD^4eMP*3g<0#(Sk!7S#SL> zy&h{vKssH3GQ~88wG-B(AF0{C*oXH=`g!VqUcEn4%mG-r7A<`Eginv2+I!4SCOA?a zOG&Sa6Dp(V=B1}O6sIiX<|TDa<-j|A%jHBY|CF_%Ips;3&)pDVsfQO#y!HU#K^Rv! zT5R$eAPp-r108*t;%T6Oj0PS*Hjy9G;o*E0=yAH?^z87s;j~H)V&CFN-&!Vo!p_bt zArvz+(@1CHCSsy{K9tQpV)V6n=wDwEMe9diXG`J*Y3reEe#{#}6kL$@9(r%KY0OK) zARxKo<>oOj=iDYj(h|JcZMN&CPrA8J9TYTN~%%@U({8{7EHaYJC0-<$>MQL{5Q6BkdzrYtLM{) z@?>qQ6^V7bonL-qMRn)8sG8;9ADn}^)|IJAxsvI?z{ z{~KCIZX8+%YF3~%E)!$WdL+{(H+Qd__!sZXwv5asN^tY{x;8Ht#=KN`Z`6uMhJ=ob9l4zftXQIqkb%@r9m7HRlvZ1MT#6?B)=kbPdfHzeTVtKv{>iCMgS zK^8u44k{8wuXXeOdMmA15MkN-TK2bYi@#mMJXB?{O398gy)1sSfBHV=EoudAd3}YN z+6u|Z)JB(}UT_kin)?=;+Qgw@Q*;1^Pd%n#hRt3SX*NzE5l=0@IB|!t#4l6xGE*{k z4D2eh(58?@%c`tKujfSj?hD?fv?1+YphlVVMhRlQpZG*7h(nDFe{J|i zKMZtut~*z@LmPvx$yVgMcw-@U&jfG2b8Ux2cogU`*phu0AK2nC^51?sQrQk|gmGy* zR9VmqiO~e(ra*_4;Vci8wJZ;ni7XG5T`UikF)R=BDovr}6zH%r zd*xw4Zx(r@K!=rqD-YZB<{aKA(BXF}2_iXfCG>5;90^HcAbVQdp@j8FGGsA-h;bC? z@B_1H??~NgvzMFF(_R4p-E_tky^iw3QuKC#Ub==sCFNr>ZW=J1A zRTcN;>K0D2$V&W%;uc=7xJ6D`+~U&h`Q&=x-)X?xW@&Z5?VCx`%>3YQTciz z;$D|TQ(e}roXAnw==MHtQ4{O-n1nh07Ex@W^YfA8>-obZ8P{Hy9IeQRtlkHP2Ub;v zr>YEJsWN=M%0P@#dStaC$SXScSe1&VqDcKxm3pd5eVW2d)=-xcu(*Asy5(prA344b z1j?q%bBjGTyfmKY2?s(z{Imol9 z4`o}&Brm#62uPO3yxHou@MhbXH;Zn`_Ly7UHoGo;(k&tt zu|8^3DbWc#PxYzVV{ZGT+xncD>TcUg@&$o)X(f45*R3nb=XG6NQQ-cdFnxltGbu`f z++%liiTAS<%*XW|J&43WW4do|kU5QZ-`*f|8tuLmsEqw1Y7AGRsaWG4)Ro4b)Rj&= zrYoIz*siv1d9B;#uiAtvkW$!$F8W(-LLVo0PVe};AbD?HVds0lXY}cb#CMa_oxnsB z#jv)Xe};wNx={*EIh=mnB($|{ zBFC1Sc@;`CY9m-kz>h4mB0@TCa$HYP%Jn9@cvgWefbmbeC5>= z{ye<@b2qpEMd7?^=ciK(T;lWtq?>APTbLDcAF!Q`k!EGFc{uLHY)fD;5gaCK&Cl zmLVAqVM(P<25UzWOoD7C5=aLK|n?}M)@>NraWeF zV91EwECj}4O7wmz$r!q)6O;Qf=2hEZp!~YPGAcXN`VZC!VIkZ=*#b>WL=$yLjtT?0 z68@CW;8p_0glEW_-Pt^S8hrBcR3sSb-K_0=izNuRR^QH?93H8J;$T3Iy0H0`+U`tv@JK4~$dS015z-^&$L z{~6o|l}+#v^z6ZpGHYJ4>KJVPsvwDMkhyrw*R5%R(5wI`8=kd3AhM%2^p%&+6ehu7 zjn+`56AR)rUv#`$XlcHwGS{xVok((TGLlnHpKqW$aE0H>tlW7rlmf~ zoou>{zHffAVItu;LDIi}B?)b-d$ zF}Fd^L4Vk{g5;; zTDC#vI?maQbDfq=vQ}`t5^Sc=LZ8$^dI=D!-S>LJ_gY3{zRxyGF&$9{>sW5+N<<}T zZY?qZlvL{6I>iKdF_BrdHNAAInc|1AU}dR{w}_3P0W*IC+S2=DIea%W!n*hw1jf=T zWg&DD!%83~!zL}2ZUR#dQvDcBNXdgimJb+(m6U~J5&1*AF(n4c!jxI<0fR-e+#Ic( zH&m8IkgrvAM7lJtn3hJO6c{LL?z3u%8idKN;3afkQ?!<>Y9fMLVwOZXAl${rLU8~2 zwajxFNK>i^gDf+}WcmD6IzW}h2@q<0%(XtY&%Ni){uXedE0b3oH{2E-FUc(DR_TeZ<~FQ)hF>d_`pOy~KGviRA6LyC zNU%C(-Z%YjPTcd&?AnqeitE7`4}wwlK4Za1l!-F}qs*(H6O8CjN{E$!^pF#H1-$+Q z+oQZ{Ez$uSbXy*xq1J{9HRufDaBE?+v!odIc352ohaEHQjqNS+52UNTwtpso@yA%$ zJYE=JH#VEBe8}QFF&zvX1oz_ilXJBWOZXI)CbH2j7;uc$1@r-frH<|iuEX3(8+hQQw+ul1<^i#Ff{Xz&fc1QYio{f%9?d{K3 zx0|XAo3%HU=`yRCmT?xmxxe*4%X0< zvf2y~lQcyDM=6S|(alKiT!{gvdyy1JF*qg>f3 zXVp%5d)O&s5p^E7((CT<*ITpJtyvo+b8V>v?Nz^c)n3Y`QR_3smoT}wGgMAkiL|b0AYnmc9jo1NAFl7d&70>K|iude*CYXZ$SqQkI9R?wASzX|HwO3D9 z_QkJ;VH`rlYv5?=!i_~;G|pT!&RpaI=#ezJeH6)37Bzn3xWF5ZClIcouu^&F=yDy3 zR4xZRnyhLI$>VC@vaa~7dwkYqpVj%S3xKAQEsQ(|w(De-z1OAIwofSX-vF}I?~f3`62S?%_H6W52ZAm+me zYY@RsQro%Z?DU_VJMx)1OGwS`KRBnH!~TPF20j?{nN;%xwNOzbquL1vYLP`116_?WzUJS2%x~&jv?vv)gnm+XO!gw6_ofd&|vB z7{<)Sj-$1>SOF=F#%nkTz_Bxl?l+2@XDMH|TO&rn`um%IgO z?+kLX+5Tp6#|%NMBvsu(IyI@q+=v)NYAQVV6_Rlbi#zN#*oUQs_an90$Q%? zd@p8fTA~!z^cqF3#RjS%f>OAw~GhGN`IvPv(oFjgS4%uJtfbiIa^ z1!1WIS|4#OvwbG8Tkp@3Y*PE3$sv>HN%od4gBswyjfcr4jd7#Tiw<(!NowurKTYY+ zuz5gsBha@@!hod74~d3_acWt_HhHcQxs9;je&`PKkp#N1<0QKtrnYQl74Z(n<2JT* zTNp#IOa`6P2lG$=+NYzPQFJkVmbxc@WbpYD)q?;sDS%9KGo>4$B=cHUz5D(dYQ|Hh z3#cM)F{2r;!`fOmrRAIPVw$!#{Jc;kZSOqg+Vqi-&L%z>&`s_+XtRJ3UoP)ld1oS6 zCW8FPihQl&u1LVLOhLQ%9r4OEN(^_D815)B+)-k{|1nbZCvOI z;T5%4M>ruyPN+bS(a0lS1~Z)Pi`bZ2^g84cNXL|u@elcI#~>AQpNS@+Y%@QpGw1!@ z5o~AEf+D#F+OWZ3>pllkC2Nr2DLEnrT!4+ofzShd{$RhYmI@zSOHw6GVel9w2(JpL zH`IgKe1f=j!i@=O32a|ae~>D;h9b$^mzZ}U%}^OV^fNlAE1Xh98|+RkEAZB}Z)55RX|;uh!BVBJ2A|UA zLB(zou#6D+UV3FJJ`6!zUqDh|R6e9hk_SUL=ss6~t#RzYzU5oSlY?Tv3!Q6>BO_7A zq%utbv4NRzMtD_v#5gJiM@=a%n1BXfgFNM&VnQl_Cnnd9?I|!L1EaQf8<}NuKXEvZ zZw2Vgk2MOtZRsF02cjeN&_h-PiFu*4Z!Z@P7 zD{M5YEhLW!@CpK>D3KR^^(!=RjJvYH|h{gmRItdQC|sISDNbZB*<|wJEeH+hpQS ztwSmeLV4wqWChdg5}EOLehJt3J-xqxtI^Vk_`LenGRqY3JqK*!J-BGkEM(3!4TD-j z>{3$!X`5a<%+6X$2WH1FU?B^H4a}ry5a)!QdxV|r_b-h&V1>zJzP9g6w%V}*Xwx1_ zvk9Ykgw{v5Lhl;}vd9{-XDv^zMzl%W6-hJ7zvrq+h&B^4f2mP3rxDEXHg17QLeTDYduGVqsc=v52M+??68i+I$_|L_(IM042!Q;HQSYOvkHRX2l!(<hdl)cz+LrrhoPJ;6gi&qf+Mz2tPn}=Eqf_ZRN7lpNqI7B@ z=|@JMZNeB@hUp~?ZE1Qofi_I4t+ZCs4plLsRP5VPBls$c2{tcCs5;;-1FY>H9sMj@ zRDZjO1ht2rcL@EFab{g+A+%dh{i%*yWK7V}GX=IGr{IE3moNhiBIvJvQy44P$XKy) zauSCC4@V?tgNT-96WT6vGIGEkSSl(1>~dj-@=JpIt!Q7knDWbx>OgNLZQhcb@Gwc3 zEN%%?MWLN(^x9sdS3KC%c?mf9r;o>qWe!L<=!9>WM9?b5fQ84`YJ^6w4dLa_phnLv zfKQ~EQjf503x#HIk`4$2pgx=gQ@(rUWY@U98K#x3g-oeQ8c4rd;3zPk5~|V$7Rf7_ zAzBxWxoNp`4Ro4-k%ro!)N}Jf|6cx%D<`MiWSCee_L%8BAPSh&%$O9_hcmaC=P3d* zY384W(~iV^Hzlmn9V8S=3*Cc_LAZ@(-gSvt-DTP4KYR}3<6~AEk}rs#w_OYqMH1d3 z+JaJ9P1$^KL!^Zw+<>9)ir5niHvqZt#1?`$p6vjoAeWpL;-+i`YW7JfK-)IpW`46` zF(F{G1xL0k(+Ua2l^v6(l0;Z=Tb?H&-0WK|LTF4Fi01WSnv6PTMZeENr#8cda9&jJ z%_vQk5tNd30i8U87F$WoQg}}92i#R^LaM2JeBtlwrHv!;?F~Ee3AIC$HM0qlL5?5) zB72y`qzvGLND@4Bk+zKoc+7W+C&Z&>J(f7JQZ~cKGqhSeSoi%>%hlXt&0Iwb6ez%M zG}iKKvvNY#G(5_nvE@+@Bru|m{JkE}GrXNhrM5v))Uzv;H=hd701^a(RBz`y@g-V8rsgL&s6`_@IAW2#>$&A6WK(+4^&HDFpERu`4gdT7vz-eh&@BT~ePc%k333jQD#1<@vWnJ|j6;S1 zAYua*({@&x2Ev~&Bpmc-4hiu793l?GMF1==4>V-I|6h_oSqFe=SZD-4v)I-KOk)re z114VsCgD{8Cb{UbKyE9s&s8kLYL3B?L)isImP8E6#to{_e}cK$(GKfhpj0_>#rx!o zr)o%Uk0jeEoa=iFUr3DUPJHO}F3h3Cf!sG^H>u)1MWG6_SSV}WMjs11C*Olo&Ia`A zmqzQF617XCcgB(yELe1t217^l!CQ|!VnzQMW)i|EdTk2RsP_Q4wVZrek&K`-9$8}M zrO(HX$<|ikSS;o?;ZLA{B3(SsSI;bUL?17ng&N6M5ZpYX#IUqS*Ayzb7V1|H-FrsOq3Np z78eys>!Da8psJs|!bzs)vv#Lb^{1e;1H_@|jnPnsFc61OenA|HW?HV{u9W*pHcX*2 zwSm5%G2Ib$J~o}s9!Y%Ei<9g((;bmEu`Xr}%c+$ONZvSj_~Y58qnSD1e(pwpn!)@P zborIuN%>bbl?4K1SNy!))j7(8X@mc=&$UEKhY1`?#_{%BFKwbIt@Z6Ft?o->rql7k z0?obTSv%Vt>1>nECPnjlgQb~m-Lsa4mK!272)Z_0VMCn z^`^SWwCW2H;;fxXO+t(`|B{|6+MnhGoC2#&a3aE-I=ocy7}pASgTGuyVmEJdb|VZO zIuyI*7)MxhZZjlfZ|AX` z{Hsaw_-*h){H4vbWA?xj@XG6N`ybXw1LWB0<#if2qwV?RrO__}8w9tLoV9dmbe{l) zg$H}ZHPxEll25pqwH%w=JUx)j(Wk@oWb$pSy$w$I!j=zMG_mZ|J$*x!Mvf-?x%hB? z?x8Gs8}{Jv5!kk3(C9xPFbnpsQ~>m>1Ry&}quKje4zyS;D+cEgeSSM%v-P>f&Cq@w z#K|)q) z(1(HT7Od{hn8C-0>u#B}s~|nx71LO*2w+3qJlu}B9A>jyg2(dRc;Ykpcvb>3HcZG6U+TS!hHM z@gq=F?81-j`+W3{Y%?~M*U2pn*)erZF-CDZ7 zWumP~Wk$Ich_OxkvieEHSq9T~-=No}$p%!5#+l%5Vc;MP=2~W7bQo&`4V~J4 zNC4}c?nC4?zN!r$D!>jOj;%}~DFwdfA>bsD(cVM1YQX%T05nkA7Rl3qX%Z|3KAQZY z?;b*4f~kY9wA*CeH4Aegq5qYv%dayR?)>x?CEW>3L(|9PhY#&AMCDK$rO;tpYt`rkPA3J*GJ`waW#exe!5o ze6q@<06VmY1TR=3!%>##67O9vkFpfvW|HlS;!z5bKm4pRf~Pnj30hwYip?&*>^13x zycMpg4)x4Vv=nBh+6|;of!^yyPT==7_$>b>ST&-)&G40%2w;?_D}!butXQ#IyK6D$2!V8qM8WN8Iu!!S1d zPlT9fXc*119LnB}A|iC!+JNaiXJ zyQ8boaI1jPj$Q*NA=7E=3EYEPNl)efL<}CDhN|}&`syp%V(Zbj*jZnRdds}9-m;j| zTf-ZPyu#sr)^*sD(0R$rwE}|Iitr>c1`;*7E3iz~ytG(Y0gtmYx#r?@&j7px4^3)d z)Q_JhsxW9h!X)3Cb4FfrtI$TYg2JVq6kdik99fTCD?CDinkG5+an_$FPNo#Dk$%d8 zNdD`oWXAjFak6g9mS=O_z?T+gSJjv}S5Ud1lkogbqOZMy>8M#Ni}Pnur%2JIMcek{ z+Fu#Aw~&Ofpihcd3i5W=co`-4nY$We{G}Ab9`h;5E+?f&NkOj(Y938Bz5$Ley@@RfjwU?>b zD{swat<5wYoGY8|4`h_dvG;Pr^-W#mB9(u;%!hhHGrc2MXRC;p=(IvlN%1Eq>H~J5 zd@dcj`~auCbC#HuI+dhixDwACl;;9lEOVA@)VZGN!URyn7)-aLMW?|hFmE^Nd$dj8}c&DB#c# zR;|zwOBBZX1zVD_`iY*vRruhUrym?`xxQVa0W(#M>)DKkeNLl2TAamb z2u$K)jkh-h34>z;@huDwqj5H{_k5xaEU^OIMBxL7dnd913T3WphE93P63$DN4hRxS z011fTJhO^RuRoQGVWcBI;EN|t*xiXZ2~!4$lc+2N=P&;XUNh1ax>sz2mM(wCF4L%^)MhlR+xr5Y z$F>}+M?m52ve0e{?Lv(B{RJqGY$b1>-N%+$2FC(}q>%V_P-R6WFf6Uc_@0+Tp zA-1?#LuSf`Xt~kDR1Soev?;{=M)_HGZF*vz<1M^E5L1Hx)2+2lN9wny?}+6bry$H& zb}>Y$R{}sI=meHUYIuF0M9utseJ_@!>|Z2IiSs{?dOvR#G}oJQv&x>Iill1NrNVrjXfB|So7J>SpP8T8|>d(E>3TBTj^Gf;uwsy_j74hxxo-76%ARr`v0mW`_k}5#N z*IX7~rwLY*8A{ux8vB2ndf0!;ipPWn{e%q(7QQr^?oW8m+%>Odh7lUWvH8aaOA9T# zO&_{|wRv~6!y6uS&=m0{%w;F=^lZTpS$U*^;b1YrixKZ})=bLV1sodK)Y^K2X%9@6 z-xrEwO0dx(8!_EwDq5524$D1#VhFXCSVJcuvzR0``UpfMnO5(-C61Yxy%{WEzjHGe zrqqpqg~2v^^fqX{idhn@p{%;VxNP3@Mc6r+jSbbv(hOORx@4!}VaU$B(O8pKqj3!- z$N-3`j)X>Yzneeud4G(HJmpP>BvmOeu@hp5qtVDOGv2Cqm=-r)5?z8Fkd9A-RhCgv zgSqGpsZ`6d->Yz^y(pJ%R+D8AcP*W8#@NB@TY2zmQw6U!HNdNBQ7(7U)>Iikn_ZB# zxF=9*%V5DBR51Hc!FiVi0c5eSwTFf4GACr(z$1KFpA;MoZpFfGk}u%VdNN7bs^;y& z+EQKZFH(G)|C1@B3rxHjkHJKfB!F84iQv(;BUxsSpgLd#!W`*u$VE)N9W!O)wrm5LvkTrs&A4eSb7_bQ#(^-k}ruv;BfDfw*-7AW2qI6BD899 zDkA)VtZ=4j&A5YA@ax+y_jDM|?GMNt%fK}ocA9V#EQuVfW>#y^aysX>uvfU%!ihAs zbH;5&5rMp14DBgq6xuG!8lMN<&T8k3`bIlvv%Bs%;ta9M=nvc|+h)+at6T*_(0_n{ zyhON5KrX6icv45dY?RLwO}hn}cApzfg=Atl&kR-J!2ku+l0Fy zfDE?q=g@jQBOH*90Ho9^Djbk;mx%3K6xcqxbB zL*We?MK|dLFL{GH?+xnqd9TT~5Ia#g2sUXJ*`i5Hy3oiPrn_Aw`?-OvS<6b@T9RR9 zcMbPpreMNvD?lpm9%R>Y1ZtU+Pa@fHhtkkdV%#T2L~v-Bf`P)nS` z#yBUnz?f_Bhpvt-RPb_O8BzuTjjl2Bw4@uxMRSp0)Ma|Xqx@InQSJaR>W*;)bQY#B zuqeFuEXsmd6ce#4n%(o}N&ag=Zy%!SDY?RM+ODD3zyZ6-InyY2d^F8dYn-ID zcFs&7#}Wrinx00n#X`vumPo$*#XtMK`Wg0pZTB*2)25(yFM6cZ*mNw`t2F;=@n%WfoCJ#0>TPa{UXdP&6}|2< zWL;6dq)~xag+z;8kMbW-0-Ao@vAjpir6erJH(nI$?IrA|e7+Ti%HLghP+<@Bc26nS z-gQvE1xi~kCEVLp_k+9m{L4?xLe`MDfvk?QmT*7J7{6 z|D1jPdSf<1*X`btZ*(3!Z@^2`xC?CP;Q=sn*&||fPMb?z3Rr^qd%W5ypNMu+-CB9GTZ95p5W7&_hyU!;n*+V|4@Guwam&` zXyhb{+NuG=0;PmIM}*U(V~&SW;NzvpM!+ffbjdBYIpoNCM5Lo6%7*6FOu9CdR}a z{th|KtnL_CQ=CR)rcpdD?e45OCfVlLoeA?PT1nQqYU+I*)N{?1B|Wzs2IsJQ5V_?xyS6lzM(XP-6ec^{->ZHeA(^uGrl=HC zN7F{zqC9;$J2gx${Em~Nr$SUvBpJ0-n8O?L z%n#=gWuLQpFxJFZ$ASa++NcSKXBDUk$5fm@`d;4{YMs%D>C}BcsWp($jrEJ)y`-CR!tX>W`-ezAs62r4T%9r_-_v+1~?7p44@j$8K5o54H4k7}_g)vfdhP5}3lZ6|OaZ z(XPV$)$^T9hVjXT)5QWV!1^9B`^_Nqhm>ifbA|!!}3J^>EuKL*Jd3Z z9;{P*^%7kMtC_xQY%AHR(l>RrDAdCvEA zf7tbqM1`}AF{ zf04ec^)J?Uwf>5}i~5(a5Ooxv-e49wdMSuM8K7_(_jn8%h%V=z@R|m{@8`Z9fcpd7 zGrg_Az1+_P_<*XaD)-IU=bLebZ^nM#jF*vp7Llm(UFo}WmG8;{-}jgMzQ4lv{c7L$ zYkc3Yb$r+AztV&5RUUN6wgt~0)OX$ftMy&C|3mt&+rM7lb^EW;cisLE>$`6MNAz8{ ze*=Vgv%m*q%WJI*%xd=oxcF@swbPE^``v;&R}ZY>?sC|lbM&B1!ez)Qx9I^U*j6{)S_8y#&>uzxKu3sdu{d7M9bCeYcoG*a3gJy3H5cfVP}#3NfKT~8_q8hFd}iUqzxAo2~Uu4 zEp6CUB;e=juAvRPiv$_cTumEZTqJO^m3swkcu7cbFQ*NA^sq`BEtFhTpMXJ5K9Eff zC1AgOQ%>~=7YVG@yh&Viy8n`2eD#Sd|M2Jca&AKJ(Io5kjwe8%+q*Z(<^fytc#y|% z^j|i4f`xI$H3rjqCyt}an0K6rh>P-xV^CbOu>_pBA4=0b!E{ef+NOzn}n=)0s=m*SJUhhpwc9$5I&g-cPfZ-j=SXk5BxH@lMk{1t-lp%;s+`4 z{%rO*M=Tn@l-Oa5bH_>Ty@w^#bwB9B+Yh=T*(Jx-;X<4hMQ@bojk8**cK^ce{nvl9 zzqon~iB2(u($AVKU783pfnobD9T)cs4u!5wrZi}{X_mK;UU^5h)eNMOX>y{$0~RjI z)Jcd@kwA#!k~Y-KH6;~Z!8)2VKn+vKpw|xh21U0d)odZz5RQ_CC<2tp#d%!>TXZko zz$Thxg-wiG-t?H@I849mn0!eKn8-dEp;^RAK3qmeUJYy1kPP8Z{YBH z;0>7Z#wA^Ud};p&KcJuA+I#>0_x;3OZ+zVszPk6s{@2*gXZH5)s%79``8gl)_~T0_ z_P_h_fA>G`dBbCS@uTeC-(N7NnQqyDH~E95mB4u$&-`Wn6B1^0f1RPqk1%~|_{G#* z5nu6%y(d1<`}Zj`AkoCZL7a&L=eI>qlU#V37B~{krDLHM9is^^c7ka$d*awJ1)+0| z!I$%TiG#z5kE2bpx#D<+=<7#9EvNRn_*Vqn zAE)a9E`PK4#0l7!ly>=f#awM@uHo@<;@F8}?7Q&%I6?VyCyvu9;-&a`eVli5%;g1U zpqdc-o??nS(71-)DC!bZR>XkMDY~no8C3chs-^vsMDPx;5vn~7=d1>ZKAbqtr)1S5 zyMzx`!a7MN@ zBQ?E8XQWiRr=N~0*-uAJLhez5`6*e>MYKwinLX=7WR#EjxoGaxcElzJA(9qmTHMpyq|RBM=S8{m z?v<;>+I*dzChk{R|JTJ3cs6ajK(syPiO9p{JgnM2l7}5UEEjJ8JIt($c1I_f6}*A@ zQY<4ef{w17xqpaq1Tl{aJH5*1E0 zm@wS#t1kR&d_(&zQ*`a149e9uQbnZgOBoljz-UL2$Gpx}b|ihA^=i_Kwxs`N7u!_8 z8zMH^OD9zyOWzt)H8Gu_AgXOB7Z$$WFWPRr_qWL~)X>@SfrpwZ4NzmuAWK?NOW-A1 zso6;bFqxmow@|y50pI~O`6$qF0gtQ#p6yXL0IxO(yu<^~U|0f=q6*+qTmX|mt*&nX zo($V*7LbDP3;+ap?>94E=_Co%6aWb_vCMBoz-@HWVpt@1nCP&AxQvDoITSFKx-r1G zCTGN2fU&l2z!*kFz$br+tk=%~UN{)wu4*sj-AaM#^LO)Pp)|NTKiSU{n*xfma%=`H z@hvE?QU+1|tOt!V3;sVEwA8`pe~W`wV7-v;!+uiZY|D5BsfY*(51;UpIm+*`8|Dn& zege~dDAIWECp%aguQ}q4GJ$X?G&muR0&htEQ5vTjK4Pr7^D+4 z-hUOm`qXLk8X^&*ltF|exOoU=v5#UTQJIGW#6R?3$hM*X2$#(C2clG({+Lf9%ALcf zg^Jl|!l#m_1k7FZ4iy}bVQLEVo)2X1V!+e~YEN(T{q)^{9(lqSVKmEpQ*#1{xHF@P z$lN1EIb9?N=m%96sAT&C4-ZI^Xsw5#FpWb7uj7JT!ALH*kXwDMaX~N;zU9F;!%yFYt!FTbYd5IP_y&l7z z9oexjxs#7I18HDJm^rlH|F{~plZ^%o$_{L^XySReLDqD@B858(${UUsB(R%PlBxjekojFZ3SEr`}_7- z7$Nb-{!X+3`w_|S)%?CMl#&f9B`jnZ8=z=#?8*EKu$cYEvw@Rcg234+z$t$gzH9J5 zO{JnRpKJ2u87Dr)6b{k!rXt2#;Y`wI!zTGh!{i@gD+H~&vYrN7XvqaFXm9~7sQNIp zXqTV`?^Z$!@eFJ~#gDVsVz3U%H6BVSXo+(GTAB!}Ys1i@t3%K-cqJb1kk;{O@@$ib zb~1UWMbUy`*Yof5R7&Hs`(Xa}9~z)a(8I3}K12LY4L-9ve|hkkI1Nt?K11c69DIJF zd?={g6jbhCLgk)lj8Zu*jAuaQSga67dItsYJ7QuWg(X0Q?hpY5PX{Eg!TW)IX^=W$ zQ)BC?`9^q}Af3DIgUvai@;x=T10Oz#I{cPkfQs1mPJYMv_l+kVr<=H#)QED_WWZ|i z-Pr*%K_~Q#31=)_GtU+|Gm)o)g7-z8d~SR-IfQf^o_%O4X&gxv!B4&sSdk}2cE{j4*96(J8nTzQuq$C3TZb6YKw?LXW6|GOfKKH#=5U1v6Ju6t;rp9 zL>;6nCaJHT-bAkWfriidecv$qbBwUnKXdm4mA#n>t2B6RM%LmUKKsX?W)(FmSMR+Q zlSU?ivQiBMFFIhyjezNTj>%X%_=>lRE_*LYwxDEblHg%(B%40KqGJ7b@D;A9%-UQs z0ig|IAI<*!?P`SLRWw8}-$FwXXOKlKOz#=EJlwKXSkZx586XpVPZsi&CWA1AN%Orz zI?1!F=6OFQ{%h*s&e$iq#?Ex%;`r5;lQ#f?Hv$5;$e0pJDO1=MHc6R1xEveaV==rl z#v?`6;oQBH@A7SalB0(-*XN$tE!ry)D149|@F}xvO&i(3$AQ~7PAU-%ac=;U2YGg4lEgK=m(GO0O!Kn=m z4)gJH`bj%h{NP;Z2Zzp^KaWO-0JnZ{uFGsI*N~J0T#`JA-5x7jqi}C#2a2YaXu$!rw~GDfCkEbt z)5-NTS~3lV_W{2(G-|z0-FP^Wt*^$t{7`rhCPRg5Pn`OUlC|(NCHMfmlE6d^Lxn9~ z0z=Adg+Ee_HS#|z4Hyk;UTyfZJ3_)Fzgk0Mee4Sk-)CLnq}g$XID%{RmyiKC^*Jj&wy1W3(9{Pi;m92##%N zfQY*@G(cDlXn>l2fH>Wg0ix>fA(e5m#X>QeVmorsRFMS=DhL!Q(4ne&jSHd*Et~na@r&bsm`&5$ zYo+^rvsxWp{Ae~I7Z;WexgazT!N7mx^N+6At_5M0w)ar}%}?(D^?V$&ps4v0N}b4l zR<0;?BrBgr6B1IN`t3LQSa?b}Nx^^URW|8I1RblXiif9&)XcUjr;mvTrJ0{;`>izwc}a*=)Mc@V%s`>Xf5x(!XKj5$e;fB&-z|W z>^t%rIs?uL;?SV7Fccs~Nsm&lMEpj;k5{SKAp1BRZ10CYM(tC6{QYA;{(j{D7G^{Z zkoYKn$8Z@Ft5q3KjV*&zm7&wa27VPPu#rD<_gB~bvAhh>mwp;wF*w~b8y*kXa(Hs2lmC-~3MlHLMf<=i5{Rt$+IC|9%~zI*!kH;n?Uv1quM~Idc0S%$^i*e&^`D z5B&VppKchPGF8AK)N_>IvEgHbY{<3&vSq41o*F?$7K!o5xB(0GIE01CqlMA**Pn^r zUEJTb_xj0(Xl~h0BQX^gE?Pf*NvAgSvrJV}aTAJiM1%#9G#}7~msogeLqEgE9)mg~ z{romhI+LkEh}KU&)6}{I;S5c6@$oFC1DaaQFtH0h!s5g}(E)y%CA1#=?dZ-=(IcZQ zQAtFUP+}>?oSujbwme-J#PZ@qpE9QXp7z#L%Xr}{|zCDi)^IW z3WGFjVu0X1HJ0F!Dg^)Fh-#Z;oD$*cIYa$utxQZvM|thOS_$={ z-NkBp0yrg{;k$&(8R8YH#A49e227D5$zZw!>%2NFq!J8>nPqOn$Tot*ufS#w2>?Upc^;rF@*4muL>&SsO5y^V zCZ&INNCL6|Ne89)eNg<2Yd3E_#*+k=uuFk_K4x{JpM7Aa%NEO*!3Ksv z5~C_(saq%9GDE_s(HY4iY8dK|L2b=}fQ!#L zJ|4db7=$$Gk69=3pM-DhECDQFaTRL8ZJiUJgQn4?)qa^n2`-d`9&@8ViML7XUt zjXxoxoxinHpS10dbmA%NrPo{__apo$J8sn_Nv!BRbW$Qk@n`vZO}DY#Cfur{L0xWx z>Rpa-oUmE{yHoLtkMPw8WBDuhV{R{nkmz0t(ffR|OdKx9@<_>Q%P;w4$L$XwZB{b8 zN`A~I_qkogA4$n=?oasSjN5;M?60HrE)Q4+==MBrvA)kH^)SW5ulV#G-2PkAr6w-2M*fb4thiLEcEZeG#|V|7V-@fOk{=8$NxRTcQhP zTa=D9y^J_?yOUeVC>Ql0^P`XZ^z*r8+_EL5%V-Hp7~NjLEglHjIeIvkhlhOnE^hxL z>D!gQ+c9J>iQgY*FV=PC7FK4?Ec}O*<0fyrEMDPQu3c{ThSbQNm!-Y@b{ zqAUg}6`uYH4<&M92UuYw!t)9Z@qejs?=N^L5e_v`g=Jskp+qgbYASsCe|XsLghp=H zhE9DKL;U<<2Y)6Ql79n`mWUv8!IHH70}mx4ARw*~;axnGh=9ddg$VEAp+tnccqmEJ z&+t&vBdn?_MEE%#N<_f4sX_!!Ijs=kC=Uf;c}e_s-1wsW7f9Rfc7GQiL^%=ad>bgn z_7QUNc86&pYc=pTJu=ccmQvEBKMUSfEQ>tIy9%1)YB*PQ9-d0ON7CC9snlg;R>R0l zOSM!!x(h+oGP5PnF;P_F4=jaQK*ghAT<{e!77D7K9oE&8TEi38aAmba*`@Hc$BZbv zuqn%lgZH1bn05rU;)-D&5-@gwun%nAaOy}_)78QKUUkp@2}>nAT2@=B*vHVqui+|K z61YlTQXLHmPhszgd(#uQ#-cBShdQB4W(- z$v&y5MW&D=P3(p|cT?aX?oIaHAUYdP3pSqPj!N!V$skp=q2I_C@BtzuPn1nR3M0_r znGGq=#rd6-P$c0fGJO*rnRyhe|Jnc52b$vUju2}KD8hTfKuzOWMm|0Ht+KpQl+qjg za@Ng_`O@h?&eK-ARHtxGB zlYMu4_y)(EqQnO;KUOxuq8}9@l_G#wR`EueboV$w*pITyP`t4GZd$Q$tfxKeDfVG(dCY2#!LNzm^aeZ;8rR~N6^-r5 z4lQgt<`+divHb?-ZM_UwSR$#>slil1y*3Wfg|W3Lpq; zt3+ZPa}~u)r?kL0rOmQz0F*7oOT}7CwpjsfQ;w9_vAj`vRf+Am64)hcxhlm=CvsMs zqRjpM&*^*L$2>r!s8qRX3C_Fs_U-Q5efsn{r%#_gr$5ix%^DPS=f}}t1Sq@0JZJ!} zPXkA__y0_%(PM4^k`KM<@35)B(3<%*a|LEr2?!l{1nV!*T8t${xLN7SAcr-b zNA1BB2SR4bv}iS=lUqwqGRG8b28(Wv#(l!v5LtNLhSra(YBxrjvc=@I7YSSlTgrLL z`}E?FT&|%&jOLg$<*@9nWMD|D85r8Cw6a)Z#~n)ew+fl9iPS(8IsJ|o#CuZt0yndy z-dU|LIsQHv#VMReL9l{QmJ9B|R_{o*QeX!rKU%UeK-HqO@Uu746T+Ru5QlLF|Ab;4 zviZs;jgZQTRsr(E%BMldGK~SBKp~tQ zOy1((W~t7xp7o>TG^@AISd35|rLr`OQ=qi__`=?I*}*1hkJ#YzUfu512(UVXn8W#$ zl4DSf)c#N1yI5P zSE?1iw|mArQNBaK|ADoc;T6t$DHjHa;8hpjZL{QcIGki9eWa~$NP=*h}JIK4rBDXLnIsr8Fp*3S%9|{41DomLr zcN)zM=QMzy8B^89T$Y5WIW)_i#Z{zZ3`mmLk5&R3Mbk&fFYm!bFX%Q&-m}a)q51CR zzCTtaVwD@kte5i(<=Aql%5h6Me;kyv25b~9FXtD^aZtA^$L+g0VvX;Y0bLk}fzMFQ zLrmYyz${KwdAVr$?390tS=~xTHaL;>YI2g@Ty)ob?cCco^v$E^t@lg<@8f%yU%|0D z_phG2|Gmr6wgSdFQo?=O)o$Y`aqQ5C^=O5jqSPy|;>Y0ImFbO^Szmwo)uRT9LE9#L zDGZfD%c^4rL`2OY0rdAV^Jf&8iSRP1&4C7yMNakcJOG&L+iBlpVGxZ+Iax9ZM`v`1F zl_6}Uk6{_>skrBmWw=T#Do1)Sd1gxcq>|=jl?o@UY((>wJM$x)yWaL*=K3^8HBntt z3sV?xc=9Ac0H(?#W#fqeca6>gbvUDOMLvtJu+T$Pd2d0~(_YwmCFEC%`AcXp7cN~6 zQ&+Y&EYWE>1}R-eG0>@0ofe5q5{i^hBwhFl!^Akk>~W3I;&lg|M0ZA%R!J9WR(lOU_Y= zvZr;bFwn{)@;qikAh$_Kj50m9!GDA*W<}Jy*d}XuR27#a@!OlKGxtq721V@m2$+Uv z4|y|AK9%>Om$S$JMb}o|e36ZHPmz3Bh8X+?L8oY_Tkwq=IOn9>TgreMR2$IYye8cgw)sS7BeLPu_E5e zspTTQf$_&4AXKXd12m02pl4MNriOap2s+#Y`ea=;yuD2S>K*_E@LzN8z49`XdF!!r z;+`JS`bHmmF>T1981g)WfC>?f_-Og?$=Wc40jKc%4VHaEwK*sLYc7B zI-Z}cCE_)q&XICSb5+)_Fk$w7O7t4QLTJVP86lS{G*pa&HyPza4L7Et`Cz~@y{Ut2 zQ*B%Sf@vR{GRfJ9V8qX=O;js1l~6;jqKyCwmT#f@Ee|g9eIce!rQo+xmo6{%KZ?{L zm+y!unjP}JWrKxdd%7@72XL|`rwFW}%t;uKmDY=eoqUM3pruYB<#SI&lGO}URdiB! zEFyrk?l|>i3k_|&0q&+GCCyO2n)Asib~d{Jr9S9FHku3MBIl$0(^KjmQz^!aH1cnU z5+ac{47E1+u?A~|5o@NDK7XR(5(fA3<*!6G5s(eE3bHdQ80CC+E^D8&HCGG(>M|@2 zW+Bzuaa)0{W{CQ`q-OkRhFsf6Z&8XA{A_BHe|8){H#`&eH7gYL6P9J(3K$&oOQi#L z#@J_~gongv+QhVci7}BT5B`mql$W35I$NKOR78&)E(JeA_n^QAxiHohjlG{{r3P3F zTcer(Sx(PtrOF5ZUlw@PGwan^7Og9O+Lnd6y@9bGOjfmEJ(wJ2fyU*nj18CX(@-5u z?iFGW{z<0^dE-dJAZ>7`!Csqd=Si>EOZn?@^cwmwQ+_qkA%>aqw}|$!zye07so0_m zaUJzJyLZRgUrvBaXF+RxW%~-RdPCV_;4TKAbk$CaRtnoX=I(&jg_#bBF%+LQb^U7MK~*R_`UvVGuv#M~vDq2c(ZnSbqlG zf_eR(Ij=FPo^^QWh_5(N3~YcYj!M#keoRjp(}Xa{nIfP}Zts^jwHM8C?4?$L2o;}A z8N2i?*(3eAV~u{d8W_F$rBtdmj;&3lNj8P7bSy=Wp0$tVrcOVGcOwCl07S2*KOW|u z4BaP>y(~k?+)2nBp9NRG!*MfrC8|za*3ic<^KEI(})Uy%^DG zxo$6j33@fgRw5}iP-T3r#xl%%&Xju|mnD#W^!+-ZYw5&WH5ErHI|gXHd@w00SBVRm z(9qQK_LNVSJmaKYmLXQyp#bvjvnqO1jXaT29e?^yj^7)cscp1rpq*0eamgUSWrq9n z5jbWF`zjz#1H|dcKpX*K(H#O}=To73Z01A9@{gDW>imyCDfL$u%PxG#iz>`mOG4{l z^4IJuNk(rQshUDxXj7SUNxfkt0lndWjsZlw#QiUBbI*pxqpGGkon};%Ou;I0=_Sl! z0-BQE$uTifE_@zZd4xMVU6Pkqe_O}rCGv~3Kt>G|3f#f>6)jBgS8LpR4`2iOsrassr+_R)U1s3Hh|Vs68Z#rE;ds*Gw~OPO6lXxDM($X8F&sOe#g% z$%!Lo*Z!gJg3b7OSQ}v0Lln{(IXF;7k{}Jq{GF5}z5qNG0~>$PnI_MZM;#VS2v$oP z11X|M5Ey8*5k1y_#F&^dv4Pjw#gxTw16~SWBiY87q)Z~KXfZ@HtV8Uk;u{DFLOQJIZ2MyhwlC=x zu?Xp!N~uZ&%1oqCtNKf<|DbAc&zXLP0F&}Dy6)=F>_CzrgINe^lhVc4oMxQ^k)}ke zI7}a=R8@8`u_%$q!2lUS8D^<~@?2m-RCCqb;kF2I6&j~E*Cgswn$Vc*`=BG@m_>tuWJ|pF~Db*i&>$ zk_PDH)6AN7K$(~jWJE53RdEV5UGLqcj==6>NY(uWfi501%gJA zLtckmww%?-7`QDQQX+yPH2~u5reWce|Gyd-P|5~IN@^b%iJR9N7`6uDz|^y;DN{Mn zc@)~fTa!eiIT#TJJC1_37#y7;{Pl9xufi2!S%Q)94Mh6J}M3GJNH8!o~l z&}JkoqZTpyj5dGQ5>4h^4w!u)MSHC zQdk(xCmZ@CeX2f*0BxT{Z_X#{sS-cgD3b@o^oV-IC;5z^`C4$9g70KFObXge8fX~q zK8J~nLJ2vMq3-B)uHE5d0uEy>;yOKl8QEe(~S^o8Lar`}wTsac&j){8YK; z185geX*~VaFSsMV-mzPCs8ui3x{nOfw^iwno-BVd{QxoIU=B0o3%?XgD*7|e&sWd$ ztbb^Z(q2^BK^VXcC2bOxw;d0SQ${;<)Byd08qD>8lpHJiF$5*z`Xq4(wg_KV<~!dLMWy&2p?+tDXzXP-Nq?_=nc^!`+Ryj$DqaFROV zu8{;N9Hb7hoFVX~d%iaJV`-A6NuvMx&wuU4(h~bmZ}`u0RCm0nlLmM8cKD|*<2C8m zU&kB!uvSk@xcsk_0ufQKmw}bK3wKdxtFC&#n0TZT) z6p~U}uMMVZinu?TZrw^{yeiiZYTrtBujVswMcXklv&Ly5r{o4SZ-^G+C4P{;nHBtsdLjqa zn|ky_B(O2k@L+bNp;^gR>v56L^^hT@W{OC+P(b@zI%|a$q{h>!FDZ-eqJ}c_cPDp| z5e?muAS~5~dq0&~X|o6mwzbIm_Nypd$dDR$_}E-Jqca;#;Wp)1!Bao$%MY@}&cT_; zpEFFMz{RZ0%_7RkGt=y3KLLxaBu#wFEK{7G8Pssj6XG@nt%64jz(5}n!@9>uc4Mbo ze)bhuw-weDwDtfKwkj2CeFfUEz^Ca63on+`m%)p}h3pE009j^8m z6b&mJp5-5Uy)2mtFOgTDk@^L0SJhnPV`dD&Hi-i%JONHoHDL)~XT4=!6^L;$ZAsey7Ls+l6i z!8L&>?2G7*lXV!5&6m8I5VBAa`Zr+wYCB7z3jGC~Yob4WLf{yTjnJ53_W8gKvw=ZT z#n+qXb6YQp7RaNhlKfH81}m61C5IF0c~eJ9~z_cfxgE1K=z6A!TM(M z;`n@EL~A?*UmVlx5fTd;%n&W2;`k&G9wxJiGtToU*)Ir}G&~nkM%#G5S zm*q}sPtUHgYUXC&@nxcLFiqGsIE#-|#C@oy)@NWY<@lPSbkHLCjZ$qA02#78DjF>*Qfw7=F#J5M1` zZXsA27R|ulq#AY-vgyQhu=(2({(HB_lRT`4!y$j$U%YzmXuMznhMZ?FusGuu%Q5Y6 za-xCbA`llDF=%yP*~+m3zd-QI4oU2=lf2uqutlt7qSA9=&8X$Rin4>veKd>%ytUS^ccSq2qF#ZPO9(P;gae^!Nj=!I_Yg;X@tUjAS=vnJaQY1SdX&><8< z_JR&^ONYP;?+_@aMqwIJHxRXzzOLrDp^(gks*YoppqFYb<6+ zI7DVt7ss5oUogmV{i$Lc1I7Uc1icPaWCk$RIyd+LdXDO|=mK;r_y8qO)h+tF3U zPDu#~ybO#26$*Q0=U}@odQ+9l8E)&jfbYN&?7a}a1srk)7L^4o%s+-0B`PviiA>^d z0je7&hPIcPRV?PN*-}0dLRpRnx1*pbut@=7T7Q8tN3s=bB@7O&ET#`a*(R2u*>m@J9tAF1{hW zk9COlIXO_pEk|-Sms7y{oRAgr=eI&m0TS~a5+b-F!a5y18t4qUB9q-Y%p4TneL=#4Jw8cS~~Doq5pS z$Px6ZoHC5taq?pCBCu!*JBm2Ll)Qrc>{~7Ly91&SI1@r77@#gSt!%q2Fic1@{!5X^ z(b(RdfNI2b36$LS>(9e9M&N0>iQxpPl@e+aA*?fAS_#_R=8wfiZZ#zi(gmeW$r zIf<5B(A1l(Cn-Wp$OI!J5wr{uM`Mf>uQBGLF~*zD@E8jiHXy)Ovln!Xdtb_)F-R&v zhYJuz+EOITs(rg9GT1wzCA)hY9=A1PgFqXuP6X&e^-Elm` ztl%}_;dI19iw`TLvlF5rLtFrPgo(I#Ims>!7;ktdW9Sy|z__>@Owi}14HIW2{aYSkBCauIupV0SEyD%GyJKU_ES1tC;9+7$^}zRA1pijT2?^l z2u=$fQ72XCxackH4bYJm3LUXgc`XfPwa1XGv2Q6z5Y$)(7_vYxlmvXtXDT!8jjxv^ z`BZa{dC~Iu2<^c=j%Fr}izv?=HN}P@zZ}>Kx~2wff1#Z%VB8Nk;h&^}v&B}BBDd4Q zs3vtqYnZf`^OG7CXbvi*>e_k6sKr zW0BtK<+{R)KXWN;f409vWfzM@BSg|80M<3RztYy;79wGDSh!PWZ|`p_oBduc5Om4w z(BNU4wyX%Z&I~|BZgd>6r`N|luG!!SGVl$Y8qrk+YF4L3x{#d(D)xM!vGj|$bOd`? z4tz8dzr0H?5Dhrc|SpYN4D43 zPfoKlSK4vb1JxdJlyzuY7yPS1wV?QmVL{lrV7O`ch0{0iuUR9O@UO92<5PdTc9#ts z7b-+tQkcgIUxkPjYEM8!LS72}h_}EwSm!AVviakjJ-mRZi)Ua&c8Bt(zi4-$Xm^dK zOIz5-M_0coyaa3z=#xal6g7w1;Hk(`=KvSD*g`HP4bNAGq2g^q8`QgDo89?{k`s{y zEF#>euxLBfd1eTUC*)(Ep8R68IpKSQkKrOQ9V(H-1n}5 zQ_IO4RcmHoyffv102EM5ft$Z+3TWm!(S$vSVj?P@EYCSEPYJ$`QjpBcHSQ#UKVlka zxBN<8J(BBv%d%GFfH(R;ecC}Rz8Wd(y!Gw3I+%Qzv3+1*hSm&VjQty1A5;{sy80?% zu*GgNsvccsjZm+#anV?mzq|$gmG~ zmvxg46J<1sLYpg9)2V^&+AJI;#5+?YN|3k6@>& zm6f>lO;43{`#^WLv(v$mkM*xa`dG8URCrdN)Kw}#+G3}RaRQB)M#${cocTP02T1B@ zRYrm>S>(1@53SAJl-Pe-p-lcSzPH9mFc2C6swqC;V3KG?(pnp+uzgOmtygLmBSr|b zpp}E7I729#W{{b3NU@rJCWV>C-bPYQ;R75suPb_} zyFg)cD5zz7wq{C`tn{&4h<#!pD)=q1gApip=bwI#*FnQ;7E}+ z=r5JF%p0Wxr_GKIgk4=O8k&@5ZfXlvji=r+_ZV!x;$v)+cG~$5a`&hD9U+_TxCPZv zv}NEoT^fG1%Rfri%3a!NYYWx5Mfzx$cY>#?uU-DDgj>n=2-D#3r$XmRZ1XWctiNlB zC9V*K9&QMu&8IxCJy+J@LV>tL3*| z&CN>Get=R|u7BWEx&G;#ohG#Jul|#Spk;_>Zc3{7WnK7N$;Zx=>t9TCxgH9s z(%~kol~;cOSGBrde=%Px|Kg|~D5Hr5s)!1@EwCMPk}})$4)l4KBQS)D;S#8uoU(Io<+|6tu~811Bz28$F% z_l@$D4yClU_aC&=R&=JkiIG69^0mM=Gvs_NWV)tnfpZb`ek~-YPMXZqn4C`B? zkNX}+C6A`=q|WWW_-gu)&18_1lOvC_)WuCMuV%{6y_%j7M=|P*_E|)F#_Y)wK-7qL zd`^q>#|84o*>e`ve;gp|0ctL~+56imBFQz10{kjdHBPI}r_{z1w2h8E&;>+toFS6W zn8<>F1tE#(vv>ojcw4=J$D};Uke=4G6h~8r@J-ue!&aRNC}7f^mJPxvJu60>WG9fQ zhaD1=>D+Na5oBCn|KRau7$Av%6QBipd=#%0YmYKo^yH*`JI3{pm zAa#A6x=C%(Hu=TYq*Kr5!aRoLBbeI=f;8&P@Tw;Ms7wlVO6m6-;I`J(Z| z8b*VoBpaN^{6!o=wC~DBcqh;{`}VY|3!QiHJnvRpCe4tV>l_j~avc$9X)9gJI`^!{ zY73pSEz1x$G+o&cuyaUIZ#yD@I!{LgQ1PiG)%ZCiC@679_jSYFjg4(sMPNE^+K=7@ z=WwV(Y*sSyvM^t5#MxO04h6fynn6ZAgK89tD6jqI%$>fl6cAqEo4_ub-olchsjKr7 zkO?6Wxbq7LI`aP4(mFXs$wm`&9PvNub=La_9EF0hx@*5KJP8G<@9(G@1a5PJ#Vlw> zb7_`oaUBk4#Y~K;*t|X2sgEpIi^|q%>XVRN?JwaK-j>JZK@hT(BSCNyvZYnLkuk(@ zk-0RqWeu+2ysSrT2aSuAG&-^Jy@fwA?)_13qF=f-PpdZQnw3K#(8jl8eMDw$M1H@QEj*zhD#cz7kd%*{Dz?BN zl5)ci=%Q^*7$OXEAPz~nVt4A~0lSlFz#+SXZDEtFd`K189P4g2u+yEev7rrb!HPX_ zI1HB#`<`5S^38rL$cP_KOga#Yxa>wF%O!vUTi%xNpZ!qjy{eSKl%F^Ay~XXjmzBUv zcMI{E7r=;LlaeRom1WTpj%5#5H134UDi|wqWTeEnyRS(l4v&;zQ5s&78zk=_c}LhPdPqu>6uDhqQVNqEWFciI zDLa*dGgI(}lwG9kQc6Q9i=^x!Wsg#(l(NL`&NfmOm4cRBX}ig_o3yPDc4vm=Vcm!A znAV16)Bf%bI|dKi!_wekN7y-dSPHua4?Dx+;DLq>9(1Y_cl%*aom6Zsm(G6XZ9lfY ze$R$n`pBW$NopQT#IHZ!9!q?Q#2w>_xT2%|qdCLw;e(A0GJ~^BM!R33y zDUfGAHk_hW;`Wgg*&pm4Nl}O7;A(5xJGlu@V!(29@H3vz1 zDx-$%jLnX%lw4%patArN-HKQGuvb0`%a1*UyvJ&+_XnINs-9ANO4`qKvO`bI=~&TM zQWFUFaZ8i~2?e=QIX&`bJqTR5ZPIO@+mHCI1P*Y&_#UMfJm7ppw>NP6wBJe+Va^nH zE1i*GF=knAq zuyez#(s^;yg@OlhIUa7jP;@Pq`hmP-_e_4P)y)eXgk zf(LOka`i71ZObJpgkknZ$o)mQQ1B2PrS7{>v@Dk>6W|I+Ph2jhMFz}53MfNn8H8#3 zPZr;+F(QxR1?e{9cI9MoSoa{ioRsNSlj6Y1;w`$DApD#sE8q{I&+kz34(>ng$(p8z zPZoD7c_;Uu^<;(n!HLfiB`a0Cr#WbiodWFaX|{ zJYB$pgAAbeWltCMAaMim;euKq6ZoKs75sSc^t~GR)&A|eyqNY6g|~(S;WojNp98_C zLK40&+!}5XEcv-LIO-?i-mnsG7A*N$36APXxF_5cZWJu}xhXhmC*kg}KinW#^0PlU zDktH4LJ|6cB|k-Q)J?*hLkRl>OMXIdR0UDP!SE)bCO-#*Pvu8Qy*(Tf*50mHhYa|u zh97@P(Zblrn;DMCJ{qftR?a})TrrUEp<8brFp%$2Sd)*h>aA&32}oV_7XXY=A78b4ay>PjqHV`XT?#3 zOkyLqDT^3JWG~`Ck)vpOij5pl7BP&-URb$S90k-fHgZr|#4sXz5o3rPMGR1E#)i}@39^7M-a~@t}d1uG-ihFDejq{S=H#m?)& z<((hTD;}~C=Fao8yn%Kd^G@iNz-m;ttj zQbEUBc!I4oJbzy07fMnQjg0_gnlp6J_x%iGvBOJiG$V=MI-vqFrW-ZtIr$=E5|YB0 zZc?(aF)}7$9gOK_B@4YGV-gy{m{ybwNGir8S`1^lMadve#hAp=U`)3vSuyV-W7-Zm zV{uk@C4oS03ER&TPHxKv{*ZBR4F53LZmIgOC&#f{7=mr*2{E^@fhe;8h27?P7dGcz z0k0O%!}&UnV>56dt9KKQCE;dp1$<X9 zC$>Zh-ozO0^CTUWQPM$%YOg2hFqo1KzzO$wk`B!%={DHlZcoy|8YSHTe3v~bi%A89 zdY30n#U#m#OP-{&Ku5Aim@!+!&hyMLCIcpwWZ1dEaUt@7Dy}HuS7@~g3T_WO&NHdN zJY{Jk-4r^@(Iu}dJov3pa9h|SbOrO2r6s&Y+Y#F2<%)8IU(dS&6<83uf_ciqVLjaa zb7_&6D|z|#yf;JIAfJ1LdCI~z*oNCUkk{3G{CeJ-AXkvY-NHN)ff{&=VlT{)*A;yH zdfpqIax4q;l!g5)=YrGZt<`RxcRvIM(#3%R&%#NFG43eC7SHPoy8_JE%$bXdGvB~4 z6a&tDg9RKzd+lzdK8n2twjgYVLWDYK?TZENzarMx$3HM*ksA})E3ui_#g|F8%7EdJ z*u9o4J_>Qc|1SPr*dCh?DNHTvw{m6SgeGRI%l$bO+5FG)%*o&$>!XuJ?;tyWo$@Bz z7NyBhaTZdlgFV>D!l-VMBl#2F5$t7tETxaw?7UybdX`}&JE8Ej)VY#8VK6&$d-&W_TIFmsC_p&){>RPdMbB^cpy8= zX60$fI!+VMRxjFKZp&H36o0p*O~v(ZVyR>HB&Y3Lg95RpSZ`Y)1!&}%ew*%0+s24Vo*Deu*`8+Cd9IDl`x932?b-mW5Y=~Jfz-{ybU+Ud?4m^6??n)40!U{EB~mMkwM31|V` zE3pg_F{ByVNDLie8a#^%0GPZlV6A(fOs@>6I&p0~`jqD52Ot_;R{CHic3)D{^LWS` zsIXx8x39e1_Gp;8#BvBHwl8$j^c*OWFvOUJT9j+pki1ILudIAAfnYP9Y5BbxNUk@; z>sG%i(VFxa461zj>3`xL_%M63_mF1O==$5I>bF^Z>-tfD`^s-rW%KxU>8!u`M*XIt zH}<8k*J&0az|y`_r`e$=OZ&q*&D^(I+L!Azw@+8gzgVZ)xlPOW`8ustfA@tttzD;m zwobE?c2@SeI;~sh`*@vZX9X?aGj-a0oo~a_9vl4+s$Cwt_SI<<00Js*(R;9O z0utd9wOoj=Ct#pn_u^~l*a+@EHWAJi!OaG20B4W4DC8Ny`KG$f12|idI4e7V^Gcm> z0Owokv;mxNtR2Cd0YV`)k9wA75Vs&LO^j zZE*HLa)Rjq&TpyPH-PgUb=m;Vch+eGI3KCg25`QsP8-1a?mBG%=X>h30i5rx(*|(< zzB+9H=eO2r&(stAXq`40&flZ=*M{?(W=`4d zn~#Z|8(PGsQBm`(7nKz=tbmn8X64kxbC1dM&rjUWk<`|QFjKsW3Hg`}Iv@3u{5m@A zUM4fe_FRBXF7Qz*oNH%kny2<3e*O_b8MPY5zNP%Ly}9XDYJ zfIJ@YxSzC9M*()x*ydT>Ki`Asm`F&2zm>Uau>hBn5f*r+4RmaQ(4eMe^n4-nQp&Ej z&?*y3SZBf(_0#LUWbAc6zVJw(3OBRDuoR-Meh?jsM0)s*Z3=_$|s{n}yAy%VICQ+ius=%^zAS<2J^>t2Q2J9)* z&^%NAPacMn>_MW2WK|62%iDU-<#pfjpl2i2qojhkh32wGOy?$>%e}u7V`=!uByw|i zW7#Ka1DKIEgdNnZa5WF}0TwOQ2ULlqCN6kj!OlfXm>E_oEXNs@jD-qr09h@`P|ZHv zU~O&-mMBz}$wNA|Rr%(Stko+yi8PhqxL7`mn^F!7S(?)C3KN>r?Y7bD&7vvvmCh_0 zxp*hzv%|b%G_|~z<>}qYn{9m{ygno=xR#s~@!lyyf(h97b3xEmM-Opa zlv#B#A=UD>!tS9*V>qa4Vp6LMm?LPg#3X0mE6 zesk|vvg|{g9m!7|OaDvj;OZLw+Gy+yz>9af90@bJtlXE_e;i=1&i=l9R6{zWh02VU zgIeUo@+6@2uM&8Qiz3y=6Wa>*ZY9jzmOqTS)Qpw|oEUAh%cY2HblFLt0+QQEVNRlH zA&3d}xp2gInFAYOt(MwdErQd2PfhBAyFJzmIuVVvvL;On{hHyf1GXcGazt7eE%Zfp z26)gZ{|Bb0$c+a1IJfDk(}1rLVZaC`z2C~&@|-s{!FcJvEBpTO%miwlnEAuQng8om z$PzW9U6Zj9pSO07H}RujTlo{i1*<0Qr67>kz#j3zSWkIkjHzQrIp0wh;|Wev48)pcGRo`@z-ir@7V2iBu^b z_Ih3^5r~hhR55{FetVI;v~bB=$OZtf!(h6$?oOVQE&k5C@`pjrOj;^b38>7X*XZLM zB>t3g;D4<5aTbz-SMP_(#GJ&utHvbJKQIZu209WKG0D^^sYefyx`yZn9Hr%`vt!aU zN_NAfObWrq9jT_b=DObzbfsx`fo6&fh&2f*Gh@w~FBdZwj!bf>S9h}7!jx3kC2Sw9 z2^(-TG=bhlD$CYq;L-xbp4q(P0dxrY8)sN5QxYu+>+Y%(G? z=R|ByBx+O64toVCsWdB5Z=PcM!fiO9!HKRoFW>I7rx*mBe_vNaAUOomOxKnSi)DI8 zEWEYblf+3i)Oos`*12QLso}&Myj)m-kPKO*(mEg@Dh;ARr6DhqnkiUAl?|cMDB6r^ zYR2eL(&k>xmC`tj^#F=EIj{C5$Mf#IM&28h7dtN_RoY(I{PE?mbg9@Kc3%drH(Bh>^2H*&4}P&T1pfAfea~Jb@8ygA zz3gWM{&ri^l9D)!?qHCmdqv2{F%!)Y`x_18OsLR@IMWZjZqBr)W>SuR#+fQ+BO-$& zY-FncULXUkwI2)>Ckb(fil&=c5*ozON#aHJ`1 zrzwb~;@!rby6osg?j+i`$I0Ljd1b@Q^^P)YUN z>HKCk5V?dA*_tVcSPNJcn6yzkM3G;#*8_?yeqOUiVau-`Oa5vk>tkg33nI%fibuF; z`iA+_1(ML`Nj{d}nL`gC+J-bnxJB4OkcxIA+tje$M7vX{*96+l?#Sz>-88AD-3*k| zZYSB-(li^xhOSGWd`;3l6J^rOc9=x3#o<9B^p8@;>W=p6f?JO=y(fJX!i6UK{eF2L z7bM(AM5;Ic%U3BAkftS#^*(|65n^t_>5f}* zk#eIwKrExz1glP(UwKe5iKIsZg@UkE6P+L7lT0m+m`OgsbYjAL=3=Y-UA?DgEI{>h zr1vb1yd{6+So&XZdL~1B;~>~G(VaLB8u)|+Z!t=nV=XKOpwem>9(QJZwTrl%X#!}n z;=)1Ls9Stg+?Kz;kNI+6As>A<7t1xGn$x99mW@7`Xw!Xa*oodR<@DH=^v7{fg#Z~k z%l%%7)0T4mFJ2{zU-PU|2(~x`9z|LKN?2iU0?+Ciz-zHRE&%C*u)c^$xH+$~{d3R8 zg>2g=X3LD-EAwwVP&>N$71^+gMPj^q3X5|LT92PbSO1|1W{LWlrj$$g8O$o)>B2i* z4%K9|zqh`18HSP$%Sakj0SU;IRRT{H#icr)AY=B9BF&PtDiOuZR+8K9Nd9#ST2J2z&*6+L;Qe^6NP!PSRYU>hDoTPK#2Br@ zhuIXf1%YVdyGKE?9oKEbEXZC6$)ZzerKEJ_p0waoBCGnmfq}YWm}<{G8$lfuPWh; zCy;{ULwBS)^Y(+WG|_$US~zFhsn-b()*2Jh?Mv-^>D<&4skHH{ocu;an>x1s%B#Qf z)Qhja`cGktcq6dqr+GdOajF%c_9e~J&lLM!;G{a?4o>}=EWggZM+a~^dBe;2GNKNE<5fhDa) zU)$-z(3CDcCod4hU1pddf=^jLD868F@1ZcoMhFt0KVr6*t@0s6VNBBC0=;MKJoFBj z!c^!V$qsM{N3fWh3VV+bh;AzEJCX$};X0h1kqJ^9TNNZRzCI<9zOF4bmmXmXBWMlO zv5i9ZipjrtM0%Rg~JujQlU9=R)uE$IMhO4HYFUMsfA>64X!JHuu5!)!*;NGh=)kp%RNt4N&|oo1Q)7-^dCR<4-m ziH#Zv2k~`TzOYz+Ak5!SY6r7W{!T1gz>2NZv*n$|7J9jcp&V|CPN2C;aA+ihMLxBa zn=Wc_{;bFhw&fTdzq42*4&@rF&aR5kRx2V;ImI@Lpg2WNI1#q0BDskT9sS6eNtihi zwvo(;Y$0ipzwKdJj%s>g_XDzQV*&53vA}N>!S`~(Oz;R7_Gk`sLBJ4Vu5@ z5@%NOM7;ENJXy+596wRgz;U38Pbd)P(6mtki#%{0ISf}(9Gid{??7o1Kvcyudp zZD^)1Unx5Nz%<=;rD)kh*m7oYb5{2h3@kMD?{ws5=2P^NZKcw`tT;GAkLiJcTqRfD|7BjK3B>7=&5HEx( z;pL-Bh;Ls$O7$}7y^P(ftbk`O7h5ieh0Cbjrw7fs9J-fj$^7Lodzno0!*AM`FJ8O| zCS3ZTW9p~x{Ts|4LRqF2P_&G!K*h4Yx_x#M zsAgZ(L>6dJpkQG(-TS+8TLacOYA$wat%q9}u}Xk z7{PY+=w%KPbi=}M!lGI;oG>T68BV}5o|cknP}7&FX&W_lL8^;``josK%174bMasnQ zDwz#QWu3i9nW1DIKdJLE+f}Y^?~9a^SFO5)GEhU^elloThpR~dsImw#vbl%L@z}Zu z1)W1#Z|nrF$3JZTc>~DS!h4a$p>!oIgsxPFb#nB}*=Q2%}(=6p=k^>mMSzxX) z%P(@uniBYq4qLdiF)ql%&LfcjJS-i-mNpMNbfO~Xw2nj~-5uai{V&^XSme4w(*BcS zTTI%{HIRhuZ8IiKb6p|{>)ZL5w1q4FQ?)}k7n5eVvSw`?okOW0UeNx{cA6Vqby@FP zzX6NRWNto5v%E1iJvY;wZM8dHjBlWm@MuL9p*BbY*$NZ+#AbL9(@c9$Xi;K;vy_t) zRfwW7ryh2D&Thvm^p{ng_OhzeRPKX15h%JHDlofk<V}B& z<*ITH{SCDkpbRzHVWIv3HI~+NUfrm_#oUYEV)=taU4JXZcH{}6+)!pg#~WsAr9o!c zG~lVeg`KuqH}ttfRRi_81NLz3&()drxjHi=P`7RDbFjOy@4>s)B>8TIN(E4PF{rBAVz!5i>1zYK29n zRv2Irl1s7Yo*E>ylyizz zuRvx!!P2RPdv?U_`-Xm1uRIoAoNqRzhI$pM{?Aa){;Dy0FeD?wjJ9fqdZbgZ^=#9F z)xcQ|bXPXb;dT|GGAZgA;dmVzZ0+;*QbYYppN+5LXFI6d&_!r^Xch90-+(p!6|-)+mr}a}gbx=u!##NVhzUwW`-ns(@@mF1s3}2!Z4X zxS@zaLtx2ysKKI#2$tNf3=QmROE#QO4>6y`s;@>;8PzN7!XkF)2^r2t87dMf$7>?0 zfRFqFBAxwTJ6V3NB}xA(mX!Ja#D_{qb1?ah6p&yTcUS^TE|C!A3P9#oV=u^tW`K3F z_bY-Hs;R?Bcn6cWY|akj0(Jtae!`%{TLd(V3|3M{@8>M$A@M3Lz*`3OkDj{ikOSYP zJ)Rvu5^^g+5@rRY`}27%JQSyCdPDjhPA#a_4^yaeLpIb6#p0n+7U!g74=Bx^px^ne z*~9R9eXE$oT}1UkcsGxHk__Ju+t-(iHohtB^N0i7bL3xaTs{@J{i$O5Z3+K9BFxh5 z`ccy`AOzrMz@7;uh6j%Ggi_=~Ex8%s719Dp^RY)_3HA<2Y2$niE>vWR#^`gXYIN?( z&VsWjXc8XGQIR8`)iX*-8%~t)&S4m<-=NTE*XXi0V4H)ci`CFXygE_g z)d7YB>d7yfVU3B65ycE~>T^`KFv%D_(0Ulc{CqhmR+ z9$NBS>`2rtDRH5>8I+7KYlT>n2W^Jh%9lWIK8FS1>*hkT_OF=k8DQTb3szY@dQGw! zb!?WSfX!n$t+6zp6)V{bV1;?%d?EFbmx=W^{zqcgLNUUW zbTT=tu4rfs0AG3MN$wKet?16uLVdRs?`SzwznC#GQ`saeqFVkw4ZyA0fueZ?jYDo& zZ$Co7^SV3AiPeblb{Rw}9XPU^K7yKqh4y78K34zyba!+cxZ_N(H?s->dO&qsg+7A-^Ywv1H zU7gT1Drvok?z3)sue$$6yNb9ER5d>sGYR|j-3IHHEMS}pct(0V3N3SBs)Juw6N&we z_CM~VP5B0XIe{_4DqOWvamDF@kwHScr=uu|8%h@)iW%+li50qy>J*EY6$x$f-J9dt z7Jb_EnId27gQ1))3poKza>m-I+v-V@b0i|Biiks>E*(sC;2pCI2%dBc=$g=ymA{{u zA-ME_t2#9b>A^mM;uW{dM(Ux69lQ1`~Y)i{>ox%v@F3k zQapvk6R&;K~W}4}A zFPrVP%YXSZUtnm;gB+^u&UZ-o=p{>dixTEI(^`JP6OJfBE28pSp0Hx)aJ%KtUbX_& z$xv&Mj~F$_K%TNs3|)|CCUHT6Z1cE~L{=1L!zv}NZ}3twc0 zMa;zBE68i|$Z7ibC0y#@0XwAqMCcB#nxstdc}XeEayr})WR3rsqz-4b8Qnqb1TJ(X zDIqchb;?$AY6vp~5lp#GDXx+9h04y9FLHC^tA!1B$9W-}9T@1zf|InI6w%b<#P%8~ ze&`+(Y=xgfk4IMtDerrgndK5Mmz%K{P1K6ydkdtT$_X8Zkb-D&TvBs-M>Ld$IaRx0Z>W_If zQW!DjCBtvtga4m));qU_g+|e4n^@k1Q>l__FTQqoT)v5-r=sm9$@}(#Jj0T+!G;1o zl_bX~T+9kYj!&n>mJ2xh%%ZOvv0`Km9EITWHIN-=vKQnYbfegUEbkTcSaf^Eh_B;Y0Ff(-vQ3U(n6ldz}+yoYWS>`opbfpBB^ z*i%9wPqQiD2%LD6pIa?D0UehHbA<~ds7v%cjbm*+EutsnvLq)xstvy+=n+ZT{fotd zHYZIi zc!c5I@j}tVRevxMQT@j}>ns)WhpV9T|E{PaG~h>HIwVtHl7~- zQ#+lOrw90VqY{9H*hHCuZ^Mo_<%j-^+QnQzBXn=sDh0B&0xxLpwnCO9QVnUTQ0WIH z6u3TaO7Yr0j`_3wP)+%yYCZd-r;wg(0WG|nwp#g0r!egjcXH;zImiyI4w1eo84uUF zYRMv@kzizM(v)N~`sbPxc1xtNvS>+gYsGpZVmIsgLXog7v)E)0A}<+0o-?KpZ)7V# zV~{Nns;Y+U)~fuoudph&!cyZ{d+0k6I6kQk>Bl?7Ww&<-*|k?L22QxrR3ep4(;5>K zk>SL(u@iur=%k-q$XM4j=g323KI_@PwNhL##@*_&ZPuJgb1M6rhCc`R5Eh_-Y8%6QKW-*Yiq3Xc@pi1{xRx> zyYi_juSPzwzRRsC20%-;I~F|=IYPtZKz)!9SQYxnHHeU<5tYfvJQcF271u--U@+1d z4LY51?BNF7L8w*5*Tf#)81}?f?hy7g1aVho5pn7}#GXXp)#qOq_9(w&Pd0=-jZy58 zM$oZ`>=Uua`sPdOG3=45rNRphr=dnYLRzE`@Cl5O4s0Bq>SDGrW5bs+i@~G(O!*uW zL6qTKHOGs*WCe1jFdVZ)p*na;H5xT|O;h1>AS^P>g<1$jdFdC;cTi{_ITAEkOeNc4 znGw>YEs!h7#=|- z)nJil_|+R&HxqTnCnWw)uT3g547S+k$ zh32_&AI-xZ-5c+0BR0UeD@WDcfK}p^DomMY zJ?L{k<(X*7#6@($0CYz&G0o3o<%@|QW5Uzc6j0L?g)QnLtvv28rSWfAqN(kqsn-^O za+NsxWn!3uT=W2;;_l@Aq=WZEdOL!cp1C9Y2vh{_tlOt_n{%s!4jaHO;`lhny7{%~5xOUcSENHJ z`N_wB1myyC8QGa8Jq;-~r)LV9{j}QDqC%R2MB1kAlO?aP7$Kr1huS{Kd-kC0JvL!9 z&E8{S&U-8eiC0D&nS71Alb=*&a!j%BRMC1INzFPObo-%vH527a*IuL{sRoUGr^f?^ zL1twPqD*6f^Fl-Sd?9t-X$SGYKTCBlttQ| z6T7Lp7<&>M4COKS3-qS5pxzTEQpw(3RpTR)O?Nxp!*1bmlOsvyCH;>tpf8f}qQcq4 zD+E+X2QJ#!9nxr}5@JGwFt2P0(|ztfb?nQ@lf@Q-)IJP>r_WnH;iwEfr+RScqQ?=| zVV=@l3<_($oIH9*_HhAJWKo#}1RcZCH!>afkpnjlc$mG2!*U~K641Ag0&@AOGh&-q ziy5UaCx1)mt8Pe+RK5Nog)#*#)nJpFw1Z8}0!!6(D`nz13N1T=37i?h7dpUw ze>Y+d7FlMUG&@C~mbM3Ts;8{F}dN{#yLa^4H`~>PIB>K9;=wdH#C* z;lQ-Ng}<%*Eta;9ARvvRtE0M6uMV0na$cZOkLW;lhR%zt!rfR1sbMTTr{T+a zTUL;r@?z$CKZgE3q4i3($^_wZL^>o@dxa2OZE6}dt9gd|H}v?9J0Awm;dJ&JB|MyGn@q$Q87>T%sE6LZE-*aI9G|fa7ou=lB>f zm<^1AI^Ka|dKo$f#+$`9ArMX)GUy}#YdjH0{R?f5w_dd6V@pG8j0^HScT$r=2w~c1 zqUb#+eY%j86JLfFLVcO>feS(nkV=S{gGi*DVi5_ECQzgy%UR_lA2UfO0h=<_rk=JP zq9|XLCnO$c&jcdf!B8nk??7r8>KPh{L^!K@L$2e4a0=cbgto*=*R3*nJMO&Q_EEBP zkoPGn#Yxneu!nEno?>7xYh?((Dwx6iK3fwK;Ry+^ia_KP_}MHwa^wSaw3~wX#V6^* zS#{(TojUgz{O5Cgc}6fiRsMQIF!31yBx&s#gPWvT`(&&Px`{emAI|N=#f*rb4s-wu zdfsLhCHBugH~3htj{z}#?8SyoY!7`Sv{a+@8nbsBOQUW1T%P2qOWv#u%8rTWqVk=x zMW+};8t~6d=M^aSGrKp=%$KJar+IwRVV{YjtYxYpoK(?Qy?GZ z-}EedbxRhDQ^4}7ic=s%uva{bLK(b57K>9L!%ciy=|icYQO7Ajm7&NtQTvZ8bL|Ce z(WQ=4AVoDAx%0$&(Vn){!l|6k6ZSzt3YHXsAmw>0@gKOpd%2EJFfFqjd~kyisOJbi zpls7a*;KWK8^D&>LkL*h0cD#X$|kM%0$#Hiker|CS5jk{5%Ab2ngtHc*6g=vSmZr z6v+T+UBr*E=L&iZgzg#5D!9`kKAQrcfT>a)YXDE_s$K(D1tcKM#>j`{Ena%+8#RK$ z$ryeh=N47Axv&?KAsSW4gtpr}*b8f(^JHNM3h~;3{ii({xYgkYJjAWC$ zccKWi92YMsfZVvMSpWAQ@DakAT~*wRVXR5Q zjR2omL;R*gPon`F@}be>{-URAI539t zvC)8h$W`1+=3PqYE&lZbho8q6=&fw}WbS z4)SPl$Nq{g(5XTRbfWwJgA7d!B~Zm6IKVK(Py$s9g4+Q3^4k&xewvL1ZveczJgE_r z3P8Ejld7-;xIzlSljeq^3lOwoP7wpPLtuio@f7W2J40=O8^JFH79d*EdHTSV(A#|q zETDs6b7bRc|)HO5Ef7+gfM?=u`I-$X354i zX4}uCf!rW$I`3jTYK&pogoAyuD^M`vn|B2Y$vl#HZh+VnCh@Fi+*;ItAwEgO6QKz_ z5vWE!xt@BEALE@YR*g_YxkvfrNIV~*?^BMBe5K-(VuF+Sq_}G2lVXCC_@u~LOviRg>2%JEP@o;2QI2pbm%%fn__8HUEmaAz9>;LZ*sO3Tq;t6n0d6Qd}_dNs(ywmMzYU$ZzD6 zqR{M? zDt2m=O4;ftK9=ofP{4xnL#Sn+ zh)>2SJOe&yLc4~Z*Y{Pt#HFk`>qql~J#wW=( z%qOw6iD7s2mVhG82^INim`|bxj}dpoCtJctUrpNklMs2cZofUccH+M6gb4N91XuyKKY4ux*%=bD(b%dNw!-3lTwa-NZ2du zd5^KoL!-!f=t2|A>@4je)1e@}6#4WZr)8{F;g3=%p?HN>xJpg-e$`#2f=f~7RcV#= zx6Z{>Y0c`+6S8tafph>Adgg!!vIZo8hMbXE8T-IzOi`PZznq~Cl^0FS2+wLk4)OA& zBQ(EC`bAGVjHzyw^l48zM31Yaf8UGl3d(wU!MO3*y=}7@aMV0h( zp0pd~NtN_*Pg*M4b<$-|TEul>mFuD>_3)@$CH=G~X=kfSdd8EQ1(9E3xBr1BHE_xq zlLVNgSg^;BNsRfI=#K3?i~|Ze9FU>|@yFlg(M}imBUH&XB>won^Ef@o3@wuyrYif- zc{E48o*4>=Dy4q=PkA&aZvK|_MNmwl_}$;&(Soq}+ZTE44&MG6kLGOD-@d@({NU|B z=Fyy6*;{;oSgp^eboTE94-6(OXor{GAf<}2;3?-xVf%b256*t+^>E7HBLydFYobq8(S|ce>k;2~jP^rI73bC$+Qr1c7j->pB0c1E2;vO&= zPWev;mZ20NQ$2lC!1<44$Z(*CVhiW&Hf<0+fzC+Mzb6Ux=Ws4$Sl}~~^rs|Ek0v1u z1EG;zUn8kGn)DJ$v!h90B}tC`hT8QNlG>w5e@s$mH0dfy-O;3fL(<%65*!jpja2^! zB=ts;fK{F2_W+hAk!Ft(J_URyMf)#tK?0lS!L{=!@?@o?AO+eSDL?kg=aUk@1u;go zKY5I51d~SZPw>bkB#pXzQoce;(*EUEIx9kb2&JGCYI5P6E-Bdx%h(;z4goI5aDs+% zGm+~uQ9gD`*mv-IwmI1s(LEyQN%kZTX^)|z__|uupnR40&EuSaW#ro6W@-z-6iRz(`(`QaY?g=?|<}{VPoN`KW7cEs2ZL7s>rueS%8_Q7z zaOZN1f{(qNoC05|Lti90qjDosZP-H>O>YS-$oNH_uT09|CRoga_0K2A6$op(3|M~A zj)217-HaM^bXwM+6CuNHkM=WFztKb~`dxoRkWd>li`pu<>)Hz zumMx@TEH~38B7KlHk<&4wEYn}U96TWun>8GTN}`4EN*Oce@0RS{~E;3%1UkbDRvg<9%i)*Yh4P$8MYG?N)KmdcVOLZ zlbsob1gPzQiphZ$$4%LIby_47-SSOig(;ZPoL4Q(t-pF|orlJ3^l`ouYxa&BbDKp{;VO)}8 z@$VJeE5r6*dt2g8;Syf%_Ln;*z6^T#lf}}+m;3$Y&IvEKhb23j%L>P?OIN~nT)vrq zp2{yArnC1YiMfe$KWaO#;D+eiWtx)Tj@{r7emj=9;J1Taqp)3$Hc*U!rM=HN8DBMG z&abdtQadCkk=HA2;hD6*a1vAMxv*e<;54mz+9*!$>FWktodW zR{UA9%l!cLkjhf+B>U!bVH?RfCc$haOrLnH3l{QiF62Q(MHj%|1Iz5)GwWG>1UBvD zhIf%-_;6Wc;|**%0h^acERjqrtx8x|b%oYls}^Gp>ei34P^g1leCYT)(Yq~=%YMd4 zAGcWAbYf~}4T-@sbk|OwKCP(}AZNyzKbq;>&Rm#3&GsM8MdeqfYu>cf6Q&=lJ-90B zj@G+$2nIIce#W&!$S&?VcOlE}Whp&ayZ5yW?`9$}_+BZKwzz;9?lL;m_zphKyc&-1 zhZ}0@#C${*HkGZOq>nhELKRsWheu_0NA^BOpGo(KCIjjP%E|-RRgPqdR!P&&nE53A zexM7`AC`%TIAnSjiz&emMw*^sYgQ%@BAVJB=eR2A2pc$g<3nXb?)h05(qe>-&?2v> zEj++BNW(1o*@tGQYPbTjihNCJr@=km$~#zfM+_Qzpx2yvG=I1{%W1@eH0bXM@0|Sn z;lfPr`=FWZo~}8q?(*QI3O{Fow-857k;bRUm#%&4SorW$ciJ?;4oJH%TTg4WFvJU6 zHMZa)JK^##0iBXT(_}gYR<;^ZQ0@*@?nHE^2OCjlr+K>J)xCA5 zRVB+k0~MlshE)C^t-LEQo3f-tAJEuOF{Zz7k6{JaL?g_l(ckKpe7u0}!&^FTUWvMG z9x9q(Udg%UB+L)YE9W$%mbpN?4SdP zI6s_``3WYuP{oR*k6h0|vNE_GlMrKG%oRjVL|&NF=Z@1Fy?OHZvRO+I=XCmSihz&- zx$L=Py$^@!=gt+2#|(i&y#Cc?QaBa1{y|dg`q!2}A-_=^;$EZ4)6X%%S5MI>n)%$5 z$9f<61nUfJ3Na>%Yb825%_mdNQm{E6jVw$&K~Ic8jY*h{+|VLHndl*xB`%hTO^uQl zL)Sbzz@#w{Az?QhBga#IXlW&Z=%s=h@WujUh6jY(DwE%v|^a12NCaq}M zoE$qtMng_9y+Ych_6Nu-(MzPu(!B9ic12M2SID(|kmKu619+0jty*^028D~2K_UD1 zpXleHY$^`Xuoa*NSO*l`oRGDeAniviBp>o^y+6c~pUN9z5e;asI0Wl4b91Z<&YT4e z#zZ|5Fs!115g}hubzVJMMU;1XQuM7u_arxxj>|BEgRt2Flgi#*av^UqBsW1ZEwQb# zU_~NAzJ^W9o27oRSb~CN%05SEM3Y>p7_Ec#vrfxHEbC{u3);THGh5jtgh7IsWP>^# z9CVVN;9`rhYDyM|stGm|3Akan0Yy;s#l9H9AI+vy-`0(pL5xA3n@=;jG3(BB-H%xU z4baO5YZX)7W#E1(BUl!-_nW^mvq08sm((;j;$%|^bjEg)oYj0ry18YdoK?Z{>;5j% zlo|B|lLpl}6Zm*RcJmrb3 z2HC9XNI~XTPOF$HPR+h4PG^9kanudWdEtkHi4$8nCZ5K96w?}1?Q@gvKUoK z_I}5jF+(c*%A}4o!$4Cbg_Rk>85MJ*7d@NE`(W0&&$n7^79S2{2RU+RM>Er!{QZ-RQ#-%-2?hr!2FDtNXC%}ZGyp#NtklY}(ga#n$>*hssL={KX7erGT*r z*Tt076sSzZyFm}~!F8ovl*qoU#R<1Wxy0Ig3b8>ovz$QzCj`Qg4+f$TXl_n=VH_xn zvPtIwTSGR9Ci#hqdgFM@eQTtF?Q1ts0@P>&Ti0)3YqWtDzJ1WZ_L>=oPiWvkjss>y zKGffX#T2V8!3g;#v;t3dRDuRc-v&Ei*Uj{e0w`-sh&39#)C|tmO(1DwK~BMPi-{anJ|!A)UYJXe=P5 zs+D!SNSG;~Y+$iTJ+7|Pkd_9Pf(il2z=Hh9y+~(m4U(0LEpJsYVX$Hkx|4fg@~!ot zwZ_&kJ;*opz~Yk^b3UMR6MN8758#sOL2F_U&~MO#Zq)^w5J@ zx#`hDHeX~uOhJLrkO(w-yPT*qWzLZS@ABn2R$R#JusA<$IBRQhJMLkzUri*N)w

      qlFgQgU?$zpO0ctdHnS4!Z1v9Wr>63}PFz^%Evae{H4%=bRPAxoXh>3q zydxtb)Rt-QTXytiI4vO!jRG{UPd(CQur`Iv9ETtQ58o>hCI6~+PeA1=#cw2s{c$T> zcw&Y_;;dSAUguU0CKcI6AHoShvFJ%LVDi0m?3kHjZ9{}#V$TIxh>nIhRfXh z<5q>B!>ATpsLmMACp}qW0TxDEl`J!p=l(zT-UiC9tGe^NAMe$BuU>t;l1ft9CEMp+ z%XUe&K!CAjLr`5Igw03ee9dA_j3Xv=7Ev)YvK`uMVq0Z!68FTD<*}4Boj6G$CxeH9 zUT&a+d+ZoxfHa-B6Hk)KkdGCV4xM3oNaB^DXF+iA{Qi5Nd*7|9C)o(o>14)&diS1l z?)lhfpMCb%*~gRhAs$BaN*0s!s3$YGAWpGO$zset;mO*N@i5x1WbG@Dd9wHuJdAcI z*~YY%N`Azf3K7lRqZY_QUs$^o&z)qgETA93I|GfR&*Bc&9sWD~F+VL&+zz(jO3NQ} zrS-&ZqNnnIbiW}_BsOwr$=eYpFnDNBBz}o7g+JyK`BJf~wqWYp{OK(*;(!*Vb@-%F_i`xee8T#SpK01X$L>2(rKH>4L1>hHB78 zH(G&KZbKv3o{q3xHrUE_s0OaP4smAo?*ed_85ve#0Y!uVA_Fnt3esQlbfK6$H4V60 z0AKd>$VNMGH3QhQRS&plKADELLh`S8x^x+G#5CY)W}^3{kW=2523)XT9;bkg-y=3r zI-VflvIG`Dw#p^*wTT>zD_^P|VBCx+RlZc)was`^S7U(#y!Amn50E|X)@T4U0BW71$Y%vM9l#3NE^wjK{T=9s~u zB&qN6L9?LfNuZsY$`^Weq4;Fz;b9zIE-bWsOE9Z0Ok=(5}xQbIMGz zzQ2oQVe2~q=Ca{`KijHsBuQ?;QHq4O>C$Z-;#9MgTVH^IQjR?qRD{yU?oh6Ggo^S; zMLjDQ`y}?rdR&zdcQ*Mp#R$;_>2>ee{#iHbCr?%7;%>XQppeFkDc9+;VwU;7h4yAS zc^h(hlExgBJn<9sV)eT3Z`~z~i4i~B0CM7S>`v{+!C2C7DQ3B0oLLH8uKD;NXLg8g zA3BeRxeq=ZwyYI%?_e4g{EARL6tuVDpdSXm+^0Q3$k9&}!aFrXr`|@VX6jDGoNuO6 zGcUALD!8dr)0(r%zz??)zO9&f-7sO?4XBBwF?<4D>1s92+JtQohH6X{TokP6&8UHy zrd#-#9F^7UsQ8eR(_oEeqXGoz?`NV|w2jGNHCB@$I0N><2enX`kvTv=;h-O^3BWkp z(iM{@L(gV95aV<-%`c#4R@c~?rL36V%{}*2mkIZTfc`EXcm~cH7Me>z@tqR;IMe@N zKbvx5bvj#-xkHkI7A7A`yq>V@S6w2#O!8`ZDZ+yG5h+Vuoq7h=S@>LtIfY@@Rj6J~ z^;b&MBLzkz$qT5IIqRsTcNE>hk7qjIcOSNM%awv`@OH#0-A+tDx-P;QH>{f{rG5lK zg?7=^kx?4MjXg0&%~8kD+oa{M+Wn*i$0|?TldiFmdQ<&`wobtR4L-(dy)wTEvrcPo z@>X^!yD$U;gS>_e42AqCq?bj_VypMQRJ4x&cAaJowadxF#pGfsUL6^(N2P#Qo-8vQ znIwwAOqp>FIA@6mKbfl;8Ti!reO2Q+yhGzUckfOcXKRcVzOgX?7i*>ti6*M~o~q`3 z99pL4{pYUvmSyoX;2(Q3lF)Chq-ikTJr!J=spH%SKUG;b_;+kz8 z22i{6b}m9UURBx>$6}2i7<`<`TFTxjmGCwAIaBrDA;T`sm8%{`U{WpLIYb?1frSJNyYiP*4y`M5 zpvzKIA#TE2!#7Gq2$aPNPak?%FsjQ^Q$yWW`ERhqn0qMuJ9cTm6O|}VB%3tZvdc|P z*lbB+aJjQ3nL?&qTGhFRz(r1aWaZF2Ac&VgA(e%#p7l8%g@)MeWio*7U6Xx=VM;(H zay6kBuFD_b_h8$hAx>WRkka%Wf+%ot2<5tg6fGk%mJ|b7$ql3=Nax=b)mX}&Mxtck z@}p1*ioF@NBXCuJ5d+MafRRV>D)`D^?`z&-jW^+n@=9=}tq9jlO*lbtk2j#3ar=YF zUhdG%v7wF#gMp4_oiNB+BZ`HtNbM8vmi2vHkMg)4{An7gTHQ_AJT%|n2A7XcNQ;J^ zXPoJ}qK67+`xHiOF3}R&j;;ko2l3SJkfF7tj6dSVZXV_RbOtR(ibpj$uI~5sqts5g z@eI4OoxcYXu&Afmt(LM!?eAx@cZt`)%^T3$g(!Jn3yfQ2{lXH{t3H;Ah>J}^*tBOz zQd0gad;B=Dk;vf#nFp)X{*e1y6J8%O<{w!OmUJh~^J^3S69=tBP1T8H&*sGNC|ie_ zsx!@=J>Sem{3rW?M&-na8hwqBOLmm`t?j91HX;hyV34+V%Vs)9Un8`T9p!u`o<1Lc z?N3SghohmOx(~mt*HthVb{@+8@mR{LV<)Y|gjx+SNu5zU0PJfufPnglOGx73D>VRJ zth57d9xF9~geX?Bc!8!GKr&R+4oEDk)Brju6SV`TzzC3bI=v=J;~D{eo^UYC1qoSU zZUhF!1C@71x0$q^r9Bfm&7^It^=U3ksHavZ!carQ>@q`W}XGS2bMS6iSiuwX!Ez%2wQPejO9&r$!aS)nxPl;!(#^OIaEIe}lQvGvX zJkLcILuAj{2{~&X(EL#kwGv`pu8qFO3~em8+q?EhhT_}Ef;0~C#~-9olcC) z&Q@k}?BMJ;tSdR|^7H0tCPRCd2$p*akUYU=3MHfN4*OLywOuA48bQCVTp}*D%HR8g z&$5*+(k#ryF<2TokCmll!`O%I zX^I|s*Tm&(a1St&EiNSKRU?^WB*gX6Yo<5{T@EDbLh9N31+ zyWTQQd?QuCt{YEGY{Id&;h3~irT939TkB|_eUvk3ASn#FVWBZ$;`G412AHctz6wFF)<-qu}q3}18mDw7Q;v6NWO<0J2R0_3=AC{-6f%M{S#^<3Mn3uW^;?xIvKX24@t|* zH&%n4z^j?8t08GaH6kT-O^jQ9Jdx04A3ZpKcX0upS|2jM>kB@_vX$V3qbbT&MVJf| z%nMz5Hwzn$$N)#-jyVbw#;{Dd#W~(u%-}ek&vH|+r0pQIJ?ub0oZ$a?w#=xv!_czq z7;!&-O*ud@n;L|Q+1DQ{bdPWgq3+A4KAl*^GP9jCqEgO_ zyxfLxrK1!gQDOElKEO2HD*wpJYsRsn-focUA0{OJ7VOJanWw5UOsLTeU879Io!8Nx z>Ud(5Pl*|7UY#LYn(Ucq7T$welk1NO6d0y?E_L_`JqpWNDet~M0WVdKCwV&#-b+{m zoF4B!Mirm?U^N;%E)xEg*?9SbekeTKJV%1<1Q;~{$y@Qn9atPK&T#;?siVY}!bmmc zJ|);vi0fo&vpjX}X^J5bc|h7Ec|jLwRwW}sHL>n%pF&CNj(ib2Vqm}vK7{Ky-w3Jk zBEn`WpyCCt0L-Y~UmuG=%(%)m6JF!9S(e5xyGO_LXZS#{3PzZN08um5AlsO z!jBJu)~|{7L>i$Uy>Rkk)}L60I9MwUU%!E#a_#9kffvA0T)eQ37AwR+phVWP1qydkk8737Ao-iHG2Sc6`nrWh%yp*_@VDhQ{4CE^mKD4x4|M zemmS$mrGz}?TiyDS(!d3?GR}NuB6c3NGr@EBup@+$W+WXiz}oM3!@S$I4NQ=DVuyS zUPK&wB=A5@n}m$O7PVL2Dx1S=47_-t{JS-6-%o~ATF^DQ>DVKzD!bq z!hb~WR$)HwbH=q|fM2d6f%M4e4taE`(X6)Og|AnUg7nDqUdrPGBX(JA@vBs17wM7x zy^P0`UPPR;IOJEW$mP65PWTEQKj1|q$B9|~4i#DA#aZFuZXO@4xdsT0qn#Z@PY zL1o>FMzK97h{aKv)^?vDWLlKnC;Y=DyLKp8Ec5)!PZaHwmC@}oZsgPV zlHOaMzw1QN;#NI>x%5QQSH8q|N!|3eI8o#$!=%3qxrtBtj4x!K6iyUbePQ1vc441K z8;PU6_(YL%b)Of$=mZhB_+GrQNy6bIlnyAYrAiheV6=aQpsWZIQCgR-1Ec-bN>+re zM|@HkgrxOXDp{ckzfCBkLs8p%T>9(Io6g;$A$-Lfz@_*CK9Ta1z3Op}$`PIooj(inieIuSCq= z#`TEA6S42FM%3PV5*}vW-(LX%oIA-rx5eLG^sXThMQ=euqIV67&v|zR3W?q|ES~ao z!9t>U4UDHfUBHm&T|?t{Jzda{=v{;3^PVnnNY)lChI{qm=`YdTEe~I+A4Kwf;WYqi z_sOs)7@8*GJAlv?C&Q9%d=%JT4TLT`87|jtje36-5W4ha*hQQid%qqC4Nr!GfH?O4 zav*fc$q;nuqsqSw2wilNxKV~iEGy9Gs*~YLPBxH##L()c!l`|FUk;kUy_&t3`1jxT zX)_D-%Ye{k3-rq>3-rtB=F8ZLq6PZpvOxb$KcBjDx@HzIsr#drb0}ND>>S5?P=MmkM6!c+IS~Q9=$;P9bUuaZxPnO>7+yI8~`2 z)>5`hU$QhgJ)ox?`0>1tlEn^oac$qc?^JmfEe9NUdTf|Q_Aoz`#Q)x|TaZHjD+R%6 zzniDUgRMIc_Wnx_CBa-KGDN|PpDNl9h3sKj)_+#NTr3bK9tJ(~hktF6AHvp!?86M7EtO+QoIlY?l4KDx(QHZ9s3a7Gvp}=ffI3oDdcF;CCUIN? zNgP49YT(i3wJ`h1^`n@xZjbsleiU;u?-I~={V3)b#T@+VRslbBn$08|ni-63W+-NF z9k^g}FANuMY-q5E37bZ?fL{?<;H9`S=woLsOge1!2dHwY$j}#eE?}dK}cuB`YrGSS2)FwIMIODH5kw$Qr9+gr8BTqgWpI&!!?+t z1TJ?7VbRYlut5q~4J#sdyAwNS z-Kjfg9Y0s+o~L2p_U(YoKYQ^&lfL+%sd{&A*z~hIeNvwJM=<05c;+81pDH5Z;(0C3 z+L;5Vm{XC+#YQg94R*#EOgnQRjL6*&STx}J)3rVrF=JeENtlS3p1^R`kMCG~7Uc6+ zntjJ&|G8d@i)TE-0xHSkR*^rJhXe}be||Vm^Tz3fB(uvSGUzxRKX0Cv)Yv(CRiexL zFvDwAA=fC=B0lq@GEk*P8GA)A(3iBzQkM-W_XGT*$OuJtL7huZEhI{iQ`CprbJ~(I z(V|C4y7UkfxM?3|Cz=2X@&nKbH$~RqL#Zk~`aO{&y3}Ctd(b>8;6hhXBigrG9Vil1 z3#nW-*a)vd51A7SuhCX$4C?eMh#Fy4OnDVH0wAEXgsO&aqbw3pp))buM$QJTnd*+> zNLZaju3%6eMFZm-kLdplnpyb;^nbsatZ1y|g{aWH^&&5?w^=B^z@Z1CJrh#IzPm97 z%~o|>L9n{I-@ke0>-kFglQ_Psg4Ms`n884svEve^}^?BZ&>BNst^RgCm zzM*T?%ll6g>BBlPu~Oc1T`b4*j6Z%gT`BL2&79_WhbMoY$4hW8M|Yq`h7xCNYNV396VYH4$QAvSULqbbqn&;8Q}1ZweUVU?i_=itE;0UW(n14$z8yk!xEMG0hXFW-MUA;20-%$9*t>t#@5 zl+ek}1caoVM!jXqWG=Z#`p-<|lgG0=?J&;1m7*hM>F6K(ZMrv^mjQ&}Wipct!-5OZt` z00>58W7XecJy1UDVY8ZIX4H|r!OL~&4ZK{Jz8)_(LHPfB zc!|*$goGCK@kr(Nmz~IQrY^^np(rGrlaoA!3?%8wH1ar!9lQq-c_4?@#ABt{ar-*5 z8>CuVa*=2&g8N%$=f`NJI^??U)9RWlHvV#FIbNaPK|P2D`!6Rs z{5d0!e>OUIqNTU)K+7UrkUtfh5Q=m^bc}Mvtt42z?4Z3^POg~@Fy`Ho0HSOeDJn+5 zC38a0d~n51D-)KgbWhxukOVux(r!@=bv~O6KAA<5hPYTcQt}9Ncjrq7)9<9Amh^Jc z%3Q!BDm^{QUu}6sPjVyOZ)q5@ugv%9Qz;6Shm~5f15kgoN3OFANVX8cz)q-c6nzGc zzC`11c+R@t`_gFJAW*d&LuVF|<0r!mL1w9v=Tu&@@{(g4Ry(zqY}eb-g`ZfN0F7)6 zsF-YbCd_+Xbwx!Xas*L|4znz6dFS@2FE&zat7Nn!S(9`gwvDQ2W(}CR2>1eCahJ^| z71xtMH_9`pG>vtzaqHH=X7`R5Xy^hVy%^y)QmXU``L3q&q3Qq=w!;`*;9u+*^@>_- zYKp}*u7HX&R%~Baz^AI%xrUZ*d)PV3TSH&BBP=!(c2I{SK+#Ai(Gi47!mNX4aa~Po zIxJw5ZA0ET+9mRUM?Ku1LA$X#KXNc-u*?`Hp?C7bY07u-gVQ$9QQ)gnSf^)Ct%VEL zuFG#CX#sT#iJVb5wMNnnR%*LSZ9B!gs+teHZ}s>6ymQ6)DZ*9HDSw~k?@<1QdartA zYbAvZ%m@EnCN*M9HlWeuZJ4?T5Om8m3K)SfcVIcx=b}e&jz06^B15;6B&SJ9qY6#l6gtnaJWFFHxoYRD35g4Fd;YX%Nvky#GU_s|3KnOfFY?eI9VKf5J zzL;!)`rwNP2JHH$pqA}ZY!59cKoJ#fNs|1a>0t;Ut6@yV?TXFfX8`6D`s=mzwqB5I5jxILBV$rLp3T8QRCqS($MKKF@yVBjKvOeJcbp(XH`|IJyPvf5=VN$#^WXxAy7d+_O_(K#2bi?G?a+zhB&IzhFHCxYls`V7EyJ+m{oB~>=Ty)eew&QacIJZ8ONex==bfLbx0WWNrt_-9t%+~I}83)q&QWINU?t5`$SyX zl4hpnva)qfBH`apPG(D+d`9FbVs~}$N##I7C6&*JxsOm} zk1Wr$Q8|#nLsmW`ax0Oei20JVd5I1r^6PlU?bJb!6ft``M%2oIL_B@;85!!4B4%30 zA)232cM5wPsisYQ#vyStH&tt`M?Oh!RO;j%`f1od_HJZjMP<122PdF z2e6XQhuyg+SCHuQLEq)`VfXCG6=c27$4gboW}lCJN?xS&dY_M%0Zn->orKh^_xad| zj|V;(_I80pwpzz_q1J8%?N+47SOwq?ft}gg=a6sGhUjc-`fllSa@p2%9 zj|U8u=kEbR7Yj^=PP%Nzd_GcwSAa$=3(#kmaLCaAh@lleCfmc3@|S}q@G|x1axedF zpEmRP*bRg>`+V#cfz$@Nhi>jhuNQqj_Q>aB6Fp?HH%VYk8s%H}C8uN?NZ^;4Xd{iH zlVA2C8%SVH8bv1~J={P7Ytkq>8R_8$5?GVQAw?oR+&}_r(pXR=(!=#6a6}rRljlhf zov85jk-{jTDl$@eCWT5y1c{L-j1*$wH|HarcZ;znj1(e=n$wZdL$B3HA)==_8yP+H zbR&gGyB*bU^w86d6v{nY=|&Gd-AEz2iCpPM4?W#TAv}&byNMne9b_#SU0mk_S5txL z1NXN{52qtNWD|>r)f~?ISmV&csS!Qwi5^al=wV0nusfoM_^rxkF8aJ(#TthmB1L9Y!GTMlD{pA*g}0$|^~umBD|^~qd$TJ_ z5Lt9B^X51Q5}$Qsc|ozyji(W7iyA|`Z(FerForWlmWhl#csqK;80nxbi4_BlnrNdM zuOb~Vd7}f(@sx?Xk=t=_h4v#{Zqb74wK(-|r`TO5i9+g2>9u*F z0OXh5QW~cJ5v|Zt_SLlDUT*fwrR-USMMB?Y=ZO^w1LzI@L;=^#OTGetiq;3u~qEsfRrmG$K9z*=2JTs-ytGSJQlA`rLN4*?v(oMt7+67 zY8ZYI7J9e(Q7K=d`}+NS6`KJa>Xs-_J#)aPjgRR&R~bcF(&`}Pkx>e7?7Wt*8hKrd zub-FJ>;svU9kAJG##ghxDa(;ZBS4vOLA;|sGt%cJ3=Yl{{rGM=CY_;~oTc4n!iu?( z80&EPz53eh zW?IUC&2>U6%60`P??<*bc~hCZ{`%xytc17(y`yefze$)24>t!EKFHA(M8v{Ot652O z0qj6kbOCb4MHlD@e^nt^#kY9Q$z_jDTmw1-JkW`CW(I}0tgBws5gcA2`o$JvqqWIG^l9Rg2Fmo1Z0JK0G+m%fR@076zHxegA1fn1`;dbtRC1J^k@ol)7q1@h8sK<$4J087cDS`3?b}8BuyUs;uifzHth=9^L&|H&9<04{iIB z+n-%$RqZPpSnhiZL4feJ3Axc+26s(zWoUggsYzcdz=?qZc54?9(J~Y$^CU47_P390H)*0Ei}JyN`M50Xy4KiJ%Oq z@I{F`DrPAi$BNV=D?yv3Bo*#3^@kVj4h<>M@xl_-@0R#%nR7*C4&-DZ7Z8Y*j%MTS zC@SQzET<@oaj6EFKtlu1KQWrkb56`OHM7oMFv`^^7=(gYmCth(&6sgQkzJOq0Za)C zj>#IlS6fuVDh&Cn?1>X{*-~=lHTFXMdbWz>T6-bDy?R~06Dw6~yMDh)@2(2A^2A)t z*pmRWSB9#$h9Up0kRs%PvFt0XbJi~aFy;L2aimq19M_ET8Juh%FgU@n9*+x1xe}~L&@F86c`g4c+pj%TG2xhoA+>k0*&A` z2ENH3Fy7*c*dOHLaF*LVM^|^&w|R~(_=J9IN&Nl4&6BuC+}C)v+dS=HtzYM;+dLbW zdp<4xSE_K&{X21+XX^cZOiOV5ZJsdbjk_{+o2S<4Xqd3TjJlcf_v1EC)>0fLjNe&r z^F*d;UZknpJoEKQ5)?Ql-7NL@?l#YKG(JQdnP3XR%xKeF;JQiC79MquSrCUMog=h9 zWT+gU=NiwH$P9lL!rQc*^ys2|h#JM^ zdZ8nxvc5tuQb$Tnxuh4_WTdn4?Xql?ZPn$BBlMg%BVbfaY} zr582rwzP{9drMG9hxD96Qe|FBA?f5k^y+q z(ku_LO1s&D^b4BlY-*-cB>lo>I-8#zy(N9InU00hbd99zhVi<7HqSoqYWJdMI-9H= zu_ayime=K_w20+(#d)314sGXyDX;vP9y~@aiK@&J--B|=3^XLFWlKClq8$$=(L$|i z_&1SgXM#!8n5^WRNX&UrhXnvjyn)0lCd$ZTiHAtEQ@)f`gO<2V;&AZ$De#{^s(G2? z$u2NN91jQ!O54hl-99*+=V{5(w()e8J#FXdYJ1wj(|&te2tgmBl#voS*N?&k@G}Lv z@iPF?_zAcc@Uss*xKv%zl*3`DJFiwnEFMCqlgRMu7`jTda)kTk@n)1dDsjM4R}Z{x zQJ7L#3HuW+!0Bn>{Hl3rqnZoR*zGvKYL*(+Od^(d&##)7G^$xdiMajzs@dD9W+&SB zZRc0bRgG#cLRmk5e%1J#TU|lUJDu~X=B?q%MsF_0M6mUIs!770Mm3jUQP^^R)$DFm z(?bU{cYf7e(Wqt$32Wl~s=2&TjV^<2pIxvNnPjwK;KziOIz zgUXHY`RCD_{k}&R>^iBZCNaVwA5>ZR7u1iMYZ zt$|4#qr-sTfTD>k``!L{nCAwC3uMGP z^W1ZP`LExh-1=45ETr6v9kxARp+3Vwc3UatAbC9K|GGYT1#&Y1ehg>xWp?ocjs*L{4VAN+R)`ayM*|atxD3=+)z&!rzB z%&c$*`(4z3)Iz4x2-k`$9stg?%-P_FL0nADQ*$lY9;r9y`j)C7gBESW2)Wyr1?o7vA_%5|*3$htB0xzgO3%r2I zK)i#h)c~ng-wyjZ?>0bX2&f#9&@wZRba)@l!us*#p=+RypjAwQjPVdV+(Bz!LcSZo z%>i!k+q?lV^Wy-{9Kdj!GI`iRdI2~$01HkH;CABtc=rvkKI1+u)NjK8CJnH5R8z=D zV9jLp#TZQ+dj*3CSxcy3O$-L&FIZj^+6o5iKrS-|8=+k0B_>n{@(}YV&Nqs2VQd<3 z_I1qR4Gox!NAP_4^W3gvF^^=9TuY(p*Ai%U-oezeN)>R7kR zbgl=ZPF=B%MN;F~iZji=MQ*W`izkWd)B>*RRCE_UH{r!>X>3U zex_K-{0vyZ{LG7KRy0KOf#0c->wPsX@M&Di*0Md>GCDVshzVE)?T6gr3rOU9xwy%5 z6UH15wvN5aV-wQJR882sJT>8ig96^GygW1!8a2)KPB++)QizmaCq|c9UMcYLO9C|9 z=w_MmxCk1_eJN5ZbkD zfTVIe7cBS3TiFamYpLt4gCPk~2=NZBE(uV$XWi3QLrT{Hj3AT1h&CaUz@RoE14pqA zGTel=4l=r6stFmPRC6W*J&A7Vf|L~gHK;!4gBPff2}ZDrZs~%RH2*cQu;K}vG7rcI zP(v%ar3+fJ2h`xg%|+z}E;&wZ*NegHbcENk!AoWX0nEMC!Lh$pfGyLLFM7uXFj+2Y zfZ;ZzF$iF?kJQK&-M9rX88>QxVc@C&CObzBu;{QYfXTE`1MI6KfPIzp5x~wwfE_V_ zJxiVd<{sOB+W49rih|D(e6-c zCsYlAaOd#KK)Ib9Afd?4Az>^<@#a-z0L3G3Fyy`!{j`-gkFJBfd2p7`=Z9CR$ovpj zUj0m{NSDLj6w&5DUYF3h|O&lHWRgtOTB`Pu{`-V_sK}DpSqJ?Dm z5*0~?K}AH(vezd3XMdE`f|Hz7$ySj*se2rGpjC-wg~yw*q`)&;inoLm z6<+eBt{>qcSVz)EMLK|##6G;l`q0b_3$(&_3w*EssFpeYdVkbB)mP2)sOH%R8qFgW zhP_W})8XNgP0gECD>lD(WAlTsL(O+F;&iQf)k1*lM)Oo(HP54(p9)PyzJ#_tPil|j z;o?or&o)NCXJhlTVY`~|V72L3^QvW*=h5h?zG|Mw&7;?qmRCKgEtQ9hHZ^b7zc~7< zHa0&KwyAj(1bi>xtCku5j+&?Xs(BvO{CsHIA0*K(J*gd>hn<_6H;ZI!eraR#(_voC zbI^+K)x2uK647X$>Z|5?+&p^B4dKcs#W3)&xT$%wlE&t*+}Qk7*sA6U3c&YjUbPSm zrO`aqSIzUN=68msy#q5vxco`+Cp=uZsrkNr?5pqcjm;C{UCnc>jPKRFYJm@KG*9(a z^E~?K!TqSWF&=Vv{elAXiuwh819 zXp^ouLv75FGZgbuafY;9afaeFE6z~t zBGorv6_pjC5+ z0@pb1&{)C|ylU=H0E^tA09JE{f>`7Z1+kht6v!fXD3I0Mp~38QgxRve%(z2shZWE& zHt}x_Xv_3Ca)<(2%^?bC<2XcP3r9e!IYa?1a)<(2%^?bCkwX;FY7S9AiyWeWR&$63 zv@;QCM+|7jAvS?lv5J3dKs$2&T;l%;6+1qMMYWj3u23F1R-|%jk|0`Sd$LDUI6{_~ zxIKR2d2BInybWN`_z^G0PZxfRpB6`pnK|G?fa5GKX>K1cAoB2DxQFn(Q;PEx-h}6i zq)SIC(euSpucz$VJYTY3j;3s(Jcs?+)jZGZdAL8@&+}G2W660n&nar$A{+cip2X=P z?8-ulq-UPg`k8`ldqTbsm+1pq$Y%D2CzMYcYjU_MHSW;A-&_JQHvE;=YONzpC zK}(p}Sn{HcB}MHopk#Yv$(6SOf?vYf5o$r|g<59g@5-nx)Ivul)WT^%sD-Iq zsKo)Pv!K>i69CpBj1)FPt-*RE#1(8ac*Ru`cw}SAO$Z|;kx*-9W64bjBc+B=YkFhJ zO$dXv(@<+_W64bjgKgdrhQ-ocR$Ip+j3HsR9<{jId*cEOk<6u_$!1}AjGyN!yM{S> zhDnY9{b(=m9&g=M#Z>KXJOYF~EYWuYttT_6+wQp*=Uqp+Bu4l+<6)k&u+LfW zo27M^BrQ9Rhug#Shjm0D`FM(lC1TXx5=#$pd2ZyGNLMsVaprUbkiJl3*MP!&tMiq* z`p3G!9YY*2K#x|P1|u5tOx20--*dZ9MzaY&t5c^%B-Tpd;NF|iy(l`R|7~_ zsECN#MTgNNcSpb|oUBE-(=g}8LxoP%Q0a_?isqySj2#>kU?e9AFl_+C|HlBPBftpI zV*w*Y=or8VA{q!D)Y<`_2Pg$+_7dh6y#?b?VRcsbEUO-7qdn|lv*;9xU)9$=X4w6h zUzDfZb)-m%lVH?q6Wl7l4`ntsJ)V=~`{cYs)LrZ`V3$hq5)qN87HBK@y?JrSF*H;2SCX{#ITjv$!=(_G!Dl?WtOfqbhB#1lC#oCh!{jkK zJ`EYQ3$+-Q8zKN^Jh6$|+Mcw*wd`pLN+3&u&#nM(t|u02DT~e`_!4t+pgQ#_sfG6i zVS|^)&@Y#$stqy$C!G6)i+f#OahGs0uLx`I z5-#>tvWB^Y11g0Ga+h#v*`m}JW0fEraC5HbAAdQrp=#LA-7i^cXJ=b&Cf!14Zc zDrRpFm%t45bH}jI&s&F=>gNOLa2KC{g3rwp|FW=~>3GToNJ$tH6O>b2ev%9qx**P1 zM7a#h^<^g?wCDpR+ddI2AOi$(@uUMJ5x_-B7saISAZe#3Eyg5W{d1uwT@aJ5BWb~t zi0xw4UrQ3f4OG{*m?Yy4@n)2?%aT5jhF6j{?`d0Ou~(3^#gpb@(#uF1c+zZ4dMQaW zoKK7;)Um>n?f|Ulbrj+!s{wY9 zBmkzQ3Si450Wc+10DBEd08B|0z+O!f08>&0FkP1fz?4)0Y(Gf=Oi3evp}_Ve2iRM~ zHIxEgDpkSjYLbALk}7z;oFw3-qzYd9NCI9;s^Ik!l7N?zDtIZf2k=r-1+P6M0WT$u z;FSwrN^*GZ7mY}YD?mWoy}0EQvO-!5%*#BG4iu1=>QKv)6#ozOvhML&iF92S+e$6d zl^^ji2&@C$x{jE{?`JZ}Nzga*PM zupm3N#a_?k{Dmc1;ezwN5m{;N7uf#znP=zVM;FfVGbP4c0x68S1X37t(E%891lc}4 z*X`-JaEZ;A3S6%}mjI-Y*XyJU2UX#|%MDU{DtF373hmN*opxzMDq+3OxFDi!Pp|kv zhQI;gYxB4I&rSYwga0fGLKQd|Ymt|`36EHU(h9izHBX1t7zVgiMM8A6_I!vMT^3UU*;+=B3Mvq(QSFws?`i$F4v- zys)kMOW*}AToRapR9giC8;Sy%Sxk^aUbFkNq}Z#4Km@;92t**Pg+O*T)6rMWz)!GD z)u5tksP7^oeHNvjSXV4bJ+azYm3oq~SHsfIuU)V1mNvS&U)tO1j%hoqd!`+%?wV9( zRp0hx%O;O%BYW}s2pD(J+huyI-LCGfHn_UC+SBUZN^@2BR{K!hTj{7qy**;R72oip z_x6ZZ?kcC<>2;L5Kv2@|MXaa@Q3j6Slv$Y|Gf|>|j3qy?|E-%3?n(*2;LfYt(J;x= zi&-z^4%D)z?g=;#h@zd(T3(jXDZ1GgC~VQ&o_Mg3%|uxWte~$6g&U@H5P?MWwkL>* zR%}5b%M1T6whE8M9IC7lilmr40j5HZEqiysLrMT|m=N4VcvICwN)C?)#zZ8U*e8km#8* z4&Y@nDxq;%-!)40-63&{?i$e}2h8-i9UeG9S4Hl+B3s*$AcQJ5&7_clc1hp_A1txs ziFlHOBD7+O^5MrKC)|knNC!x+jym9%e}st8C<*abyKD(v{m3VT?|B{AE2tq8tJ0Y5 zy7C1wA^rRLVXi?RE5XjOj}+vs`WtN?a$CWL)5~O{vB*{e3>zdDo>tIpK%BMZ`Gzgq z!SNx`tB|5GBii&9Yy%V?#f78y7T@=69y>SY|jb}caEO~qe5s&gSyzeH^OCrLC zO6Q5@`zPv`a*A5;E(L=Q{w#`xM|0^|Afia3mX{*lb3uXp73@+LWEOZHu|DW1R8mZl z#8&xns)H6Hyp?v+x=Vi;)JVB2ikrV=KZ;(7Tp8}PC6Wp7*z`AXS2imm2Y z$d6JdH4@rJ<;pp$y?o-!pGLHY@GE+f_=0$u28yrrqX)x}9n9{P$KvGqeAJcismK4C z&=f%A?2MIER>Wud8uw-k`&wWX9_2juq$^ff54InjZeh1^^yGfBOi^z*+of6ntDL`J zf-9IJjGAUJXZp>}x8E=0OlxQS*0GSoL1)22op<8=g4nw4iOy7{6K8P_@D8Y>02fy1gJi`44M;1^I?xEGt9SU)f$kzR9Jp5pGF5 z;;_XKBtt{%@NEl;_2lbjr4+t03^4=ZD4zq)%A7DU2i|+Sw(1!o=@#D+$4| zjk$Q+FabSg?q^oGg?Fak?4VSw0R zXV0)RObjuzB7dtK9G$7SJ5X_rL_izVu$YgqFnUU^&SiD$+^IUZXW#1D2|Koj=HIiV zaSt&((g@sI`?!Apdt!M!(o1{d8JZ+TXazt7^k#I28MNWBn`u9J}Hp03s zXRbk2fTIvxvkVY=n&Jud3{M;o`$o2Ik)?>lY~a#s@B=XPVaXkglUkaxu!tDY7_G=q z5Og1JUb0#3w4(f>(%-X6L(aX`1&0;n_>aUT<2FBdK~h&n6RNxVpf2opD(Q9E5lU6Qla07n@=I8gPl&m<}>O6?-f>%WqS>#TE#!~n(3lyCd!r9 zOb#`R9rN!wv^Ja&HRal=s-ZW_5apGFS*l9pQ`K8-m}I;c>Z=C;2!tt^fF$D!e1rGrnu0iaz0u?`CD$Me z&_EX}lQw&emOa@ zw{QYxN=^YeU%#xUU1wRmQst^6&BeRV8sJY{zqYvIOhL4mc1;?`Ltr0t9mjq@c?_4A zBY%)BG+^;A(Qju!o_XrCT(3knnx|33$|{iMhGdGNhH~x5S&ICx-Ly3dZNQ>`(Sou` zXCpmr8WQ4MhUBH`Tg&e4w-O97Kc=KRbOn!+KY(KR_FHYFZ1vYmHOucG*unh97v*2u z8Grw({Fzke_WeUK;j&-(hp5t&Gipj^F0$f>*pKQDB_-&6M&X?2^yzWnv-%m1+H z%m23d<%b(z?y@goJH1V`lpET_oH%L|D_z~@l70D`)t7&<>C2yNe)-QEUtVQjvQ)fH zl%X5ie4zOy_P@GK`S~Q}Z&zRb)ut~WY<~H%#+O&ymneq4O?0js+C16(@)M0O_uH4h zSAF^aZ2I!2n_vEN_OYliL5%51jL~A> z88@c|1LSihP{Tck6PE*pTXpnf*+u8KtA9*zHpM29JsXpyys>dj($ls0%o8u%oA*MpUG){M-UE=mttSM5IrTKViAHv%t`7 z{8vHA#)*&4B#mhE8;uWl9gR=y4vJqJAI4ERr!f9*6?2w}9a02v4r#@Y{%#nx$^VR+ zGWEc9zo-p72sGy$xI{2`EbWibSh@Y=?~P-h7v};D>iG$(4p896Wk@WcP4Bq}DleHAZ=fw7Xg+43g3_3=%8}z+ z9jnFs{ZBqt^x2x!_PVheDn%(t)1Zjgu(lE+zw$Sq)q*WpHAsDP30ji}dU<}Q!Y;Y( zrrlJ32!l9{UoCUcOzU5XLn2%tV5l-0xR41nnJDz%3>L90L+INbu}p2Bpv2OP(i0(A z@_O{dkPvZ?EM#fJ5Uz!`UFZT_q=F@Jnt7V~zD5CTD4L*k!f3>L1^pKfe#>dlCd z$QXeW*1D6HBS`R=*>XUEtwqZ~F`@--fbXKF*O{Mb)+-l%BS)Gu+0@-d z)yF1+h(hfXg+lt2G}sOZidXZ)qS>cZ%(kd_c-Uv;387&Zw27Z3s^TZeGY?BnIrVPX zXofkXIQu4G=w3Mwg+D8jWyEV*(E#w6LijY@4E|;ud_^;)1IE3g>y~lpBk2OQj+snA zgs0HY+awzWD5rE6FZIC6-ca-uCp)9iB!KM#SgiHgaYApT$24MS?QQx1{uW6bdWqZv zAUi7z;Ks!vIK<0geB1yLz2HTE7~Z?=MZ7c`p%tX=77@}d5Et9sNLOeG~= zusN?&E5l^ubJ?WA3QMq1^tlz6PTB3PRzv*wBRK=0YXC-Kn(m;O($iGgUYS8&%2FKY z+PXIqZ;UH*bpBQOW*d42M+xrUOS7$#vO39D*)FnEhkj)KpTGW3{+oLboFdG?7Ej|z zx^d;QX!!4p*>&UJ$CVr{$Jc+{4i;RFSoQGwEwQNG@R-z&1?BCOS8D{ zeCufomWBwPVsSY5)o1?YKl|T5`hj2ma`Ii%?eZ>TuKm|&da+!wE77pwUv~X z$4xC?en3eRN@|sf2S)$-x)f5gMJX>IuIqvok<3^%`zJsB)E|BP-_vYX#zrqLx%)s1#s*HqtV$5B5o z&s|M+zm6O~IDqGgT-0Qjj=2L!yvUAQn(XEsIfA$qoaVTq$*v<~$S_qFmFNJc9t*pZ z2l%o(Nc%_0o$($#If$4x80RfIyOv^|6O@o|1P^%>HoZg;L6j^fk;-92-h@aAN|rAn zhXBm!L8@pNc_m91UAd9Sbr4=#$&67)3Cs~feuMFRn7jrn=Mp&$nsbSJveLzPQh;7U zl5kC*mLr*7+US0#K2k4XYMQC?hDifk`?^%Q#iU`#1UJjdF(wTK`t3&QMz5Au^sjq9zZNLaPQSVH zUY~_Dj`E@kYa=3LrJ_PPj~eOaO4n>gI>e%~qiQ&;I+{mH)Fxe{HJ4z` za->CYE_PJSyjC^kks3(^(}?$|9%f(kh*d0~ILM+rXqn#a z&uWbJ%lnanwU6VYGm~JF6NE(^6qG3cGgv53yfEI1>EuXfjUgQuoG9!LFIG4+X~C5b zU}-5@`rOG;?j?7eDC~AGCr6nlZjU!-Iys8{+IFI-uaBdTLFS4LcWGWCAZU+>q)8hC zG$<%p+d(8v+5@0LLnVvyN75v64-G1mEFvFClRV#`L6<67YdMl8tz>A>E+uOzN75vk z206McTt)_*Q$>v&n7g1e^(}ChLT3n4=Q+Yx`RE$VhaftRL;ez2A?9GJ*|}~ZF%&B!?Mscc%draDI&Gv~ z!Cql&w2`*N=_OmAjkMitFt#=uX?wz=&Af97-Y)VHesy9`HlJs@sM7qvr-X}48?j0s z!^QHf`*4TrjIz5Y?h@nPk{uY%8LJ6yKm@$mo6Hv-U7Yhg|L(5xa~O6p;km>mwEH|s z`-L7~-WP~S@=EZ+p*7P^lO)jrAoNk!C-YcVV3WlnV?JoZlBY8NTM)^4e1Yki-G#MM zwBF3MK3I9)GHro2rts&@rA@+U&id4iJAsSJcrjlI8?n}UPfjv2S;Kl}Q?7?c^h)R( zCU$Yw)`VFo=2ds9ArNpN)=e3b=p+UJ(?rQZMV+@^>RbA+3rjdM^_J=0)V!o&y=?5f znW!jX)mNPt8`6@jp(PJh^HKP|PG}TmvJ)8;X&zCdebB=FS_8nhh7KX^1Rac?lD@D~ zIphJF^+wRbsRrE}KA)=7Tt9u3fK7~nJe~Ow^Ch?{mG;#u>xKY>nNd)n3uzqVhAzmi zLKkEamHJ1|$epn}YUa(;7O~}Q-KiS3PI3-uJycq+q&reHGSa(v1A#J1m z#O;LTSWe63Yog=?63DMnU^JXQT%rzMoEC;pz8;?H`+hY6RaRU;z@!h8F}? zR|}sFs`NxCXE>&g7Kvf3QBOHr3FJAy0+w`W#~Z-Kk5lL&w^fMMc>uQ>#S4J!#!)mO z3!bwRv0rGRY#xLR-*^>kFdFOGilM+b7bsF~6M5<0CU5{_UB^hz#wp^EAX<0zj*I+H z71K|$fm_sC_w*%J%@bkzwqyMN$s&XKP2TvR{{99I+;Gdp-nZ1%0}nm{F%`?4BqyH; z*%SE3k0KaYgq=@uh8j+!s~|a>G7oULyvp=gOriTEO?Ph#onyDrqaAh=5$2h1B zGcSKCeIt9FZCYLRx~o{b?saUvrXfCm-d>|ST-Wd3*nXq_Rlhf7TEAmvgjh%Y?%Wn8 z=y$j3cgOk-y{FfU+F4kcMMvH4sM~T!2R{Vt4&ClNf48NWZi0JiY_})El)AksGlJVP zBgiJy?TOn$pKf=mZcli(C#>7_HZwFy2un89d5clcGd@n~c}mZ1wrezLA!%`8grypq zOt4&`*cGa@o>C`>-+A=OIT~u24{lSKOinR`_-nf))R|` zqSTV*rMO9#u+};|FcT&h!MPrzw-C}c0n|C8itJJxj!_msLxd)(BqUNzX*{l(B*ZPuLhzue2($6Gp)a|ZUJ4Pz1&@@Bfl zTkd~Ov*po0Y0$Y5S~oya(jutL-60de? zus9zXWVkn2ZgyP0xqy(*kAf5Oqfo8k|kEt4dSFO4*y;e}}4lll3&eJ699&FOVA7wyK zb95cfUOs}zMF;O82^V6`ly^;=P4cSbJFOXX9%*CDI_z-}xrnZa5%aDnx=FJP&Jlw1 z5&yYqeI`Rv_=>Bp&E82q`>Og}ehK%cB{6RTfY`ZDD0Q{r?oICQWXt_|=IZZ2b(%ob=F;6O((S<-tQfgoko@a}ii7&vjt%=pN@ zckuGQG ze>s`ucjoc1P+L;i<47!bg#@0-95OnRrT*X-e(|sKHzUJvz2fTXQ@H}IquOD2T>TML zaJZtPLA_9~2h6+`(o;xL=_&2Yhwiy$>TjNV?hBtfbttj_o;k12Z~w`6fA23H zIJFkoe@{{Fhi>|dGY3z6?KP(kU2*a3mwx>8fAOicQ)|DBJnqDnwtxFWfBycKoN!v@ z@BQh0KQ1Ya$1nWhr+yUaJ3X|p_t5uzeR#p?>H#ub9)AOYSJ$jFFItaalUwDV{?k8P z7n<3?%({^`@a8+0Mv1A z|7+K(r%%(N_re#>%P{sP9NOXy3wrlwaOm~b6IqQGz7v##nHseOIfYe{CeiwH)7OVz`xL7o zJM;tp)rD{W#Na!hJhf&{6x4@Fm{Hn4x|AQA$A2M?5t=e z;Z^nM&x^5SWem4|h4g2hw`*tX7#PV408?MguHCPRg~;g$aa>xxieB`-P4wda{!mDx zBUT~l|5eA&WZD%4Ist(3(qt6+#sGRY_9d zCZ_v7a1E1w6VHFmZ4yvwA||7hNsmf{neR>PB9#eJaGjzEa{n>J$YuWy4o^FL#)TVU z;#S8mE@%mOj0!!OFP`_p2_87s216ih+{`hQ_o|ete$PjyOH|V8D>da``lgd9F?yLj?x3p{}^N&m4>7 z+DI4^_X*eCjJ+emwc5wApKf-D{o&|vlblV}#0V*F7u%kZIgMrywCY)E-pY7S?D3EL*{ofJ zqeYqM&uZ#df#bH}o)&)5v*pRj&K*t0l#v^VRyJkaNo7nKd4*6$egN*^GNz22L?|QQ zf(OisKBkO(Mkq5y8RSuVKBf$rDkEi?JLQZiBN{;&sm$D=XG|GoMhB9VM||4`G>HDa zb|A@k#IK~j&?GvLrA2pNt4`BSo9H$nqDRtUZrxqS=XM_KZa-MG9sB*q zbG8Q9fl8Yk9d|ru3kt6M!6Nr>{Ks?TEms>V;*#Z=(8f=i%F@WAAME?efhG~;77Bec@y~M%TmKX`m6~4@@1(fAo{Fm0_4jwnt{`C z29|9Gr{G!p!UH*h<$pg`!4d5Os~Ow- zICmkA1bak4ywSMav<}2ICwHOGc2M@)5e@h{mAfn#}sD?GEw<`SEsb<#PzB(rj9JRJR#5OOwev zc4K=IO`TFB+(joo3>O)YOUJd?)9J7r5FjpuxRv=He%Oy{JeAyC^kX<=%J)BHC%AQL zgznSfo3yV^Xcc?NWz3?G24XIMk9@Uggd!@itg{W`!l4g3RyHBRA}}Cma)zF&`B|>K z6HJ~p7myCMDXek@Tko&TA=EbZYz;fGK6+P>r;fUa!;sXjV)4;(BO>YwSyScLvX7|mEQ1D|~45Cab;uGU46d97UJ0iAzvWh^(kORsxWZ87Y)a+FAMane6 zvd_~>3MvmpWr&b0rb{@e7SSQ_q@WO1LrYCqE%M+X42r&N(J^=|@r=N8r_Qb%o`&P| z_6x*m1)MOwb=@H1Wh!S9!xF`@X5!0%SSWDQF#x2YX=n1j$1&h0#{h(OsT))$tz>q< zj&bbtD*Y5W8DkFPh+(V#*_Z_rxgEiwsRmoaJJqc-Ix5adsbA{mvv;L;rcsYQPolz2 zvD?6R%CEV=@T*vFGHOL3L$)FpJ%}Wx_;y4xU(Nukic769&Ht+ic)B8SLJ{!nZm9z& z&Fz36P6sG}sT{QmjtpXx?eL9@D=@OK4Sb{X1xfQ84m%QvkM(epU~n`E-`_1TjncAp zgF6%b#_7Q=x;Vn25t9W$h|4)l1nEdh@ceJl|I3oAu61f%{cc z(aj&!{QCc6%eJB@C75^vCz7;%q(&Qr-IqsXf)^5tN`fn%t@|HErqSL}+iy z(|!n5TYtNJ!e2P)SAN1D1F?~4kZ4hw-Pp2van_c-9ri1IX!~mHz}=`0TOu0q)4b}m z^&~ZiA@8LYb>BK;JD~N&s*;{WnkHbF9TUXplE7Ke%RWkD;q;1yno-C;v*$Q(!~Pj> zYbY{}?iV>2XMeQW-Ax_&d;c-rb6;UKB`0Pv8|p7DE(|9bKM(T6^&9TB1zQ=|2z{ZV zSWvn2Ue3&f_G$Z0EBiNE39ASqPCvw#E!tk2Ls3(hk$GSx)JR2Y#j~O7Vjmtzi>eKl z4vGha-ug0QIcv+xZZALa>}O%b@wG}AmiHNUf@6n|XoULXBUJfngzUESI=V|&4@1G| zjqxBDsZfpU9PEOs=e{#_MneOeRc66J!7XXh7OK-WCv{%0oE5|&6>1W!>{k;EHIoCZ zJi>f}HIJim>#;Y*iKxQfo{$+p#LsA|=h$05whlf0rfa+lq`(I!v{T<%-eElfy!kQ0 zV}mBPG_W=-+VvaB;I5DlVRAFMDUVx7X#0fm&`YfyYts=@i^c~p7w4q^)roB4cz&mu z4AVo2{rBiH7UK9Un_yR6Q$lSM`2)3x>kGEsJ(ht z?RNNA360vbO|^Gw$Es0D&Ph-^9z-Ua&^Ej$$o~BQSbb8$!SbPnpQOuT;7EYa5$mj{ zsWAD5MTOJThy>)R8+e6fP-(4W6*b|5eW$0QiZP+0>}b5APzF4BUQft~)3Zl>bi@fm z0d9vlsTCXrEr(mRxd`6%%ylOI@6od!Qb9MZHsVOApcn>-AbfyDMiZl)=u8IK4==r(Kt2Bo6OE}>%cVuJ6?yH8Ymye z?SFDq)Sdsy@S?1tZh>!`-Oq7&TEPqJT0zRUOe<8H7lm@rMa4N~nH-)bXlh7*?t@10 ztbjn2;BAE+H)LdFfw%6dH6k!m@>E2q?y}z2K6r{S&lTD}^Qkpd-7*K%75JxN`h)g8 z6*j)-jqj<(wz=43tX@^6Rl^yq1&ZlWy;V-gsMjh#_hEpfX63)wVdYhq47GP9XG2>N zpD7xYWW%-;F;#m3FOID2q&F}p;=81rRK%MoU{jfawA@oXP?p8h;vX9jBbUq+y9~ijBDu?sOutolT((~Aa&ln+H~mMN0GGF2AT@DGX8EqPT@wE9gc!2~CNM8OIZR;t+$n0Korx{q4bJ=wyfO^k+8&$Ed-V(hLpn|m z#Neo3%!9>&RfpW(oNx4^x7m@lgYJkn=f@5+1#HzI!tG|z)RY2h8V$a$FGVc}YJbWo zIGRI&0uqj~SqT2Jq~jI&Sr{TmK(={kjihjGxGv%X1cMLVR%IsQM(7flR(&TP8<;}3 z$IH3pQ@_L3&*n~B<(JQVIvIQ(w~hpep2fWjIE<@Ft?O8m&$PNwXew>K=(tS;v+o?M zO}XG>m|B<9yn-dwypCqQMhGy$28^~zoz&KCDhzK`POMxe_MxuFkqm6c%{4C7#6y{* z5%wD6rs+wm;6#x4L%|Q~O{vo`G7fXSeI|pnTL@HMo{;P+jZd{;s@Skuy_Pc1O3R*t zfim(HYQ=)gz#K|C*TCSNuTW?Ltu^kVEf?PV@z>t7y85bkX#&bszWC9!hYZ8qkhR#r|6UF7<2luF$GX6l)gUGO13u!BwO z2J!(?#bX~^mwJ*^3+TNr^#M{Xiu1bE`$<()=k+yUHG;ryOud&>LOHE3>-<1n=c+o3 zHGs|z%ssx&(O!;Wf&Pxkz!E{1$7Eo-(8}Fh6}ApKJ|+X>2z?)ufi;EhZ_Z!@8xl`z z5KmAXWZm5IV`M-%HfMZ-3_^Zy&UlmzwuH?YA0Y#NZF9yWWOT-5{303H?>BwHAT}hf zF^G+a{n-^ryH~5wX#^C6rEcVY6^vz_Xu8${AeY{s7Wdy`}ahp4`l+ zf{`0r5d`fa>Hk)jTL(LL8bk23wtAFynd>~|)Z+hy=?h|8*%8VmBUnW2MSRr$OAoY5 zz=fhyl<-$26=+^l5wO6<(6#tRD3SPuMC$UnR0{CXzr1R!!+uIT$?MI9N@`Pi1Db~* z+^2<=4?X?#lowhYwL*%Od%E@nmmbkTv2P)&=+-$cQ?_64x!6ncg7kAx-C#YUKawlZ zp=%VXOj6F?WS0~_0?1`LZ(K~47fM%wr~K{Z>e}j(SP?`_Vgb#}X6fj^JZ;gXME?1S zsU!ReUj;c4ICUTVD>gOx`IAVuX;pMGE4RfAUEe8&kFLVrN2V|V0~Y1LpE!M$-Z)H+ zGBYwwB+q3gP<8jFvA!F;p=C8BLy0o)t1|a{WBX8v<;9V@sV5uSYpcES z{o^bGIZ``MZ|oni$;;EM4)x)SN$lX~Qt#pE)VipJxNZPkvuY3_+N*lG7W3;dJd%1p z*T5_CMML#{Jq#kr&S)GD5b2ft)tLXARr~j)I+)BdB#JEgnEveh->UNOz>S3L_eifK zmABxub zIDoT9zj847?$LwS!8Fd*-*OJgQ!%m(MycJH%B;?gQYT_6(=#(l?Zs4(sxfIDPi^9v z=3PjbF#=5{q~C+ZCjF0f(rz>Wbao}Ex%1HycW$Otx_ctHWcaOoR;QB}QbLBOBp@4iK1zVOM6i{bLMkZhSt!N<9mk1sdwtAGzJGeuJeUOXS5|>GZ zG-{U^SbM4sUe#N}e@*rq_DMb~HZ{m1-rQix32Ko-xKuTonDUZlpGqZ)D3G(s4#xB$ zL>-;US|X(|?7UcK=sP_na)MRj!+?FIuZtp`Ah>BOVM`D#Aa;C2GZLQKK-Z{UCi=;M z;iAP+I?!=Ug|AmpB#~4bf`%3H!%#~jfTTOkYi6Nc5dTg<&07`cIHQILF7b{-nq+gL zch)Ddy^?^{o9Z9ElHXa<1}M(>`V?0ooh=M@oMIi%J=YYo_{T!rqd`~GOfAi6h7ydO zX4HglLVp2_&OOaz@d_|{ylMOT+|#T}LuazKPqSX?X=Z2gX=d_;t<^LWa!=6pdFu-9 zP;T`SRgM7N)>q)IGyjIe)eRCRyu^UduqI>TJ+DvwN+;{xX?NAg{yqx}U?a*)EADdQ&8H z)(XmTTFc6>>X+@_67TS|Wu0RpB(#%?3@h=$lvs7zMhQ}0ld)5_ud)U*wlcb0^iHj5 zOVDF?eW?MIRk`Q}*r`+i=HOJA7?oOM)4_0cswT)uLU~GsOs!5+m~RL6?F6bAT3K2H zR{RD&B%j5@DH7431efwxrFKeP#k|ylcWt0eNnmD=6PVdXs6j_eTT$OPFfPc6W-+Ii zSpoK~`~b?E_~{7D+{krZuJ}4r*X8^9;ZWbcVDTDJA+hlf-iHe$R(l8CEKHG_>yT%_ zVzy@;6bb?nWS90bT|OKj7Qh_&waBH#YWrKV3rCVJoSIBPhnnLawXR|JGSL{02HM zs-V+?;(zsj(va?z#-0p^u~KZI68_JDDx*oHz5%Cul|XHU-C?DG=<}u$VvkWr46Fnf zVxzyG73<=A^?#ViC+?a+2Twx_#^270%JZq!=iV+58eP3&>jQ%7En&zI&c_pe*0Mx@ ze@DNs#k3cGS(%p&3`ENEP?=!96YV=%?loV;pSV5^j6ja zHdh!MKHv_)>Jl~5agk?kz*;RfaC_Fyg}`4iK_`pN-~~B>C~6@AcHCWURzOBv!3@8O z&9j-R3LTfB1aS~Ixkea#82WnnM5uto5dvKE6cHQvc;IDinlTOJ&*NatlAqj+l`eXw z8o=BY_2$J}ebAXH zHMk)o$V$Me!5wJ=0qTz^CA0xT32jOPq&)SJK;ThG2_Gqh`k%Ihe; ziO$+bFDSkT=Q$O=Sxh32|K{5H}G@($fAtEM$B>>7-c07Z-N0IH@zM_ya|p) zBC-e8H@P7X{vkAYGd)!|pHd@~#fdb5GGcQl%)kkhMO1~%Q74oMi*b%kp-dh|4{Xvq z7`+EJ^hyw#&-vQg+G%V+)HJic22A!L`mcI-mNAWhMT41J637sCT)&+c?Sf zuE$p!SCHOx1r%fia)vq}5|>9QzL7>Dguzb5NDm#L$TZQhv1h0!mrEoVQpDHfB#tzO5&mT#9fG%t~YvvO`` z&=M0)bGSJYbSH^~)NF4Xh19&+u~8H)AvJFnX?^OOFZr9Z2&wtzEJAADoJB~@n@xn& zQy&esI2gw!w`8ziYFq~25( zEg|)$(rY9YK)p#-7f?vOL7skEosf_kE@@*YB&6O{7A+z5rqb&VStmBB>H-R>SrL<< zo}?2Sgw&9VNg;KnC2PmqH6?Y=@_a3i-c&lBq7VJ;oMp|ri$dvt*CvGa9N`ZFE+qEP zTI%{BWsLlL$lKu0L*54e9r8B#>yWp>KZm@&H;Qm8`s0wtgW45YM6V)t#%Ux1ejYe6 zCGxj{_P3TjInjmNao(&EJL|%HKwjm@Txl-GNeh+yF83mq4z5L3xw2gkMYEfM=Vtx5mO+ zDudhYS_<!w0df$GuD2nh9CzAkmgQRgUM9ha|5-E)?f^3`+sy5xGWV6C37 zu4B^dv7^;@7O#q^@A7r2JO5eFSLfyH(o!Mo{poaQy5i|DbhWekOJIziQuHuC(W^zk;7qK&(|`PJbOd`g}R^=>=*5oJ1Z9o@aZXt7&n@@xN4XY#6X zKct&G0&)U|?+Lf6of0FMlqN8Yyr=Q8f-vf9``!fdnd#b}sp5>3ycs#;cXMI&?Rr)j zIwyRU_&<|(b73@$|GVfG<5l0yReh=`e5ojjjL0a633o|ByY9yJgBVj-(d0hBYO^zG zyL>N6JB~0dma`A)Rvu0wC-uu^QIF`Cz`E=DB@pj}h@6R0K8*loCjHwin=WsXP5@)%x8)Hu|t!cdw+PDyiP<1^j$qQ8@yic%s%?qoaf%F4cr z6MCwfpJmKSZT(W(JwhO8xnl*2s!On_r7|_I_HKDP(QU+7avN77ai@)7tbtpS=xSlq zNQR$gaB9E;{+b0plQ&A0#JUjNwGVTn*|o_rY1=@HT@NIqTKhzIE(;3!8(Kn}IVDkr z1v=o@A`tLvE<;RlaDwhZP?!-7U1TewC(yVytE^UbCcW=%yP?&C(RPA{u1)5Rie*kY zga;<@M*Hp`#E)}YUv1+i& zHh+&=O$G<(MBgeC+nk9?`i`Pe?;{PjWl;8&5Fj(2c(%H3ht9JQbc+-;P`5}y02P(P zVC72L2rJqJ-3#o{N)b7m0Bv&&S}Re%7qsX_3|d?Lq;5Cj4L`{I5a=Nte1vXzt>5aQ zI>~>dIV}Jdcg7Yy8EG(J`oZ)VBxwu6fA6jQpe(zcAHs?pba?OJN7{dbIwE(CD}g8B z-MqvI;$yn%m(>XX_qj!azA%^{VEG%+{<4O74MX2CNcr*@TLY65XwL$Xc4WQvxv&}b zpv8tA(`zqPJE$gE+&|%0U?J3QGj3||Fe4U%X}FZ_mB!flq}CBASObosXfu3zc_oe+ z@IBC1VgRwU+M0oEXv`knqb`lHF-9`;Wui3MGl+J;Q=A|xa#)g5-^mo2U&p!Wq8ngx}COVb3nt5UG=S8+Dl*rwThc=RtXBEz+i`U zpGeWdkkAgUH}@oD8Fm>T^`-FH>*-Fx2YY-lnd}L{#S%HN%nWXm#*B-xFc8qkx9Lke2YYbkrZilFJJi?o59zT{UWx6pEaxXiz) z1mVn+ogludRC}+QiuK~@$_H!dhA)f?vbJc1qk=xUj|YQAx_>pKEP-Q{dr{S1f!vCP z9vl^V#Om9u(0fOPK5&*oS0x|Z2&T17^ijZ!J^S$*OzYZDZ~Vr3^9lO~+M#|t<=;Rc zeIQ=%-O?Q(cZhq}ZRrrnVUn-Vanysl^tm*%IP`J$U~67$z(L`NqHL;T> z9;z;aD5W!AWRDlwQx$RE78`%^tLV1j>Q&l*l+$pUL()`3A(=(8# za_-0B#$*k*8tWj?VMO~#Gx!-G%-~0&9DerL#Z1>}ySh%_f4Hz1&tHc`R@T^_%u=lPWEP{RC--DBM|*M~Qi0r^VbZob+LM8&-jn%Yv?u4)p4|66xw+|{ z+?(8!yW@K@W`XSG@Lw?c8H8JZkxkJSZFu1X^ICDtVziCWe>#<48)p*mC&W=oK6e~} z)J5BQIjYEXjGAG3x#~5Rg!eJ;JV!>eGNGti*00DVO{-pPpI*7C+ zn@Uu6i?Z(12eWh878$f*=46maY=>KR&+ z9Rx&f^u`4;vdA`p77=9Zw$r?++fGybdd$J;x~dkqarre}r)>*|Fe+V3{mZu#>I9g` z!N%9>;!QicM&IH&H<1B9LmBLZtqgX;;$M`t;yKG?aIzo+8)Pek&9McSC+qE=^If{P z7EVRn8An{Y;jX)>?Yb&snecOPfSPyX?A+O>4ovcB6NaTc_DetKUP@q8jg0TnZv9sk$wh9_V{7MJ(dSmNi3rCn<8xRY6t0=x&m@r>&K77^l;i+N8wFC z3#M7l2Dn1}!6vQ8B*m&J4w`wP&IM$fowpPMr>Q=p*kPM>b2H%*wJ5}O^<)jlPS5mF(}aL{ zxPW;;8f1_@jBtVT)H)BJE!TxYM$t~YuT&*KkMXCQd%ZvDd;clBpE^A1TA@f^38ne z5ajYJp>tfS81jdKA?pE#H7(Erfmh-Sa)qI_*KwT;)&YW{akGNw&#O=Q;bP$3ypvIx zFE4sq`MdX&??A-6^U!df@kr^=p!}m_U*nGN^z*1<4!bBSJ zzXSXK>)*eA{lK?1v*($IWp9JucB zQ4o?IdRv%>$u4rP zH=64aq+bBs!{}qya_7rI8`I*z1J8WymBO(gI&ol!@-gx=g1OG6j&n3??3${1NUto`Mza-ZtK13Nq&Cp@yi)a-9&1%E;)VtVb!eZA-W=pNGn?Q zvXWyqU4)$7u$5a-e1uDiN37va?p&dE{J7y6-l z#EGQkZ*$PJ5g32@Q7(5ZKYI6TcZx;eHA{Z(8T~un%wMXFzszphNrN<`c`xXM%&+E$ zo>}*mL~DGghVL~JBskgi*+?yA|6m`*$0ln}2*+!UB)2w*NC64VA3hGxfDD>pQ8oL# z8~fgDw!rp1;e=Q>x9)^+v*71x4+dns{?0=xcY3|(C}yr|`I!9^sQDpm@AR;t-Zicz z@_I#O>j@fZowOk_2~kw_iH7>b!?dnO{N-12m75dIO%MF~{Lg#DAjVQ3FrV^=7-S7I ze+O3o{p?fg2ma;Omp#qAc$>`&a{u`k_I^y;2_HSYe&DUcQy)1_WFpERXCZi<#4}%8 zTh~gsL#(rhx;lU?TcJ^l<=)w%rG8lZXO7$^Sng@Pk{^w5%w_|l_@6 zWfLFH(G2QRx27X-yh*G=BZd@1yv((HEF*Qx%Lpjfg%KM^r5S)XOQWZ2SDUf47qFsc z#K%zptxcJg8mZQsG=&>)+NmuMV(2PJln|T{k)&{_`(!&G+@0T>>N=*dT5Lte>IXYc z&j=C|AYx4|LJKp(*r;)S#Q{flQ4~iut%wg{C~>mP5OI)9d=)CQ$l>XfRWyi{rkcW{ z@dfaGx^}Y-&(s`h8%@+4(WHn@%#j406Y6tmv&2+MFoTi6O11*OMh)U^79rV+1*pi+ z) zH@Nlr6Grt#L3CkMBh>m`q zc^N!y4GXey!d^&>?pAr}?C>Ab{27c2A)}L(rwXg{s?NAIs2h zw1H(S-=OHKy48Vu~#|rdTJQ z>M=la6vqmuivEJGgvbyQK0qjHw3^BUWnlt0h3TOk{dFI)gapYjF}hQje6@1e$i1Kz zj5%!Z%$_gT4cxm3z;H)MI20kDwiAh#Rl#XFDH6WuuUdc%Q3|Wy*l@OIJ_zvW8PF3= zl~X5wy04Qp%2$oo?R;YYju=b^yIf{k=P{F3n4L%_lC;N(B;xAm4T_C8p;Y$*n_8lP zXecsZRh~&UK_u0vuvIrvsZcFH!3h}zO!QDDfIBRRs`@ZAN`$&W>WEEaXsS3GO!O{z z(DNT;>=&~6W(3UQ!*5Fz3Usop_omnK-^C?1_;EGSwv22@MT0yjX4 z?=^-{3p%TyYh2Z!p{xNCh?^nq#R)t&L&Vq(pK= z;|~xKjZ7XyBbJPaMouIAvd|GO0;D6_Md60wy{vQ)y{AI7)gyob%5kkuL?%^oFwKEY z;+2*=%Eo5-kRHJlWW60)y7`+81Hj4E-o;P0@gx85v0lpa(i~;G8s>trrbW@QX8YHHR zB$YIQI1l*s!h;PDzCtNYM#;ZWsqq=KO0Kh{n;Exzl-b*Olf8{t4oK5{(r`0`na64U z$f^cEJcZV29AT3YN1lAsD(-RmEJlA>=KLeBgg|9U)D^Qm`;v5nGlV#19?ue?g7k<+ zm@`x2nh)kYWSM6)uY+H=j_nOx55@wLLK%SDpjGnQBQmX!l^vR6&EmUO!72!1GXU32 zcrItkpbyT{WSVXjL`;R7u_KX%EW-hv;IV~q3HZzp^D(`VLYfwXDg#8m7=g$P;}bx{ zo(d2l_$-HEmVgx)uug*qDPh+PWb%r{kE7>k>UdS;+ot*UJTbV}6NHPBN7TX&=L)s-ST zm>dbookKQHZPqNCC0`n^SfJ9G>aGQ5h6f2@-;H^R9g#-)enCUhd$8p@7^qC@2`VzjxGB(DNMk+Jdv{u|Wts)S9X+#;hb(lbLNLDwcJ=rhuoz<37XQ|Qa6 zz=xi-N?5Wu?2N$$KnzwcXGM(U)Xx(!2=$qRRR{~#=uS>Yo9!|E&G(pRT7I1vha-Ys zWGw4(>qwEPMUkj;T1VRTDQ4{rFtv4LwxT~RXLZP95#57LrAQQP`Cw%q0&C? z2Zs*(IF@eESlu2kWlmEx6nzTzX8KN%*xhXu(ktbgkxIRlh!8CkB{02#F_I0QnuAD- zUBnWVC*QB3;o3yaXPHV!X|uNI7x0ZH6=EByR-3&AT(&Ron0L;xWBtQoPwFKd{YL%L zUPZsqc=0!5{ent~Kamo_q=Ko3oReK(PUN|>^wxL_nJDFioQoYM0K9jY4eMDttdov) zxKD>+NxkvKBtbF#~_=iPKtF$4ZU{eK&YS-1Tzk1Nh7(* zy85@R)NVhO{f8}}vDqPGN3Bj~g|-i4jYZlOU7vrPoza;BJq$M8;+(;>CJ@7+$!h-T zM(D|4+TOU+s-jX4?JrViF|3Nls=RQiV8<}iaSL_!k|u7j1(*gEE|1<3gkmJH{Vl5ykUcK56UOx!Pm%V zd;{{dq2`7xu!Cio ztO-oX=u9UA37a>=MH>QRors4c0@=`l=$&P-X6cW{L)e7<`DA(tD~ajKIBi-X#l+v5 zEiygQl+z(uNcM=zacl^rq<4H$l?11Ts&XpPmFmI<(L%t@Y*f%CBj2tD5 zwwPg?C~aH{iS>yGHIu5DcC^CyS}WZS=guqb)l1pQtdJvw#?#LG!F*GU8MnYLqS-7I znIOSl=*L*!fn-ZENV4V^F>K;#QNCN6O_;gs$9(>=NL1#fgansI9_lwz^26(gSyJ-8 z>xLdFS+QUvKnfZvw2-1L%^gxQH{s$GQgq0n=STC9pN__fS4>br0p}R`*ceZFLXj(pL9Sery|h zcSE&u=o&Rh^9#9y$FoUbjZY(RWIK#%M~G+E9qIBG{f^} z(?Tt|KS!b-aH3w7%`y`j@?%9rf@t#^7%bc-3Eq+V&@Lx;}f1u1?OL zCNoEKqAruF<;gNOs+qBry;Cj4a^kKbn@Y^Sb;cPpqhjtr!hZ*=uqksV-c1I!KX&y^ z&|6fbF;Bau=4(qAvSi1#8LdlJdR%UBT`im{!9_J->;#YV0+U@r?KRfFqnKr2d+dwd zq1mi7ACTPY0qsx^XuUtcyzdVC`p6->l{VW4zT9}_KD$nq>3y75DatCcR6!%sl}Ka2WLA0l7Q1DP$T}6O*Hk~_ zRWhc>DQ7*Gt}Aw3iBw%ryz6Y-5re|=zV(NS`R_20&Vs{}I4ObdG-dz&P0iUCXBbhzm5j37t_hhc~Y)}(kEEe1xTl}?NnLwK&y zVwf~qa)k5Inj8vE$>%p(z21+_WP`hB*oBI%IL4F*51U0FF#@>zOQ8ZdQh zjFfc2_2Fcj4F}o%WyF-+!4T^hkkYpFCO<{4fgq^ zAEs^@&Z%9E^x!+jEbbv2ID9&2^~6)Al}3F@61~4cxo_;oT6kqE;gx3L;^|hnd3t2m z|9o444w2t}j+_G~Tba2Ktt63IhFp{zndOBlhWQrg_JZ+w zYZ=KcieZj9N$)>(v&-)8i)CJes|;ur0_;*Tq&A(L3Z2t)W#aJjA~JC{D0bDE9L-)# z<{2_yQfG3ednuVZmMqnoc>3%nQzw$kt4v7&-gtE$_>a`GwL=-)jIOXEoiKy~LM;RQ zoKkssk$xIvn4btVGnD3q0@-}AUbV?EZx;@AFIC128Rk;MiF&s(dSsaE4#YSpqpu&` z?aoh!vo$|`4nq6{j(S1h3_}?FS{jBCj0IA5Lpqdg7$Mn8${|@KwPfIKBjvzsC*@FF zL~7aI?obmekUV~F7+#{En}$2}^ZMbX`nhHJ0{t8uzED5kHM|VmaEKe5Qv%8Qa^gHl zUJ@=J`?ME!oZm+lJ7w&{Zn)_DK3p36XeL~CejnMH7P_7O%+p1 zA{wl{?1;|A!vcajG};O=4uwc-fSj7yPct2iNf9#67pksR?#3Dcbpl2-I%y-mogX%G zv|gcd`p1@sOnnKk|6M(lmf#4ZR7Kxav%O=0jZ( zM?4O$0_>`;nJ{}Z|8%Vm=_xfs^dr-Hw(dCw%WhrlN+W>WfWs@zWO3Km+zDHRH=wZ= zuopa{n>Z25ASf{(WHd&taw*1wtCO6^>c{}S`t|o=&~}ebIp#augK;oJv|QV>oQ46f zr@gZ)6GqPa67|xz{a^ltU-`wy9{9Bn|8a7^=fgwbKDPhA{N_Vn{((<@?x#Lq8iN9iI{d;jda!p!|e>nJZ<`xhw7H=%j|QR-^(QqS%E+uju# zsr{=V%Wht^SpV&iwv5iiWE z`yE_>3&-w%tmu{(-&MZjd+zJpflPY=0gTK-G>y05s>Fk7& zR1=)J9=bHB58sL!7=IFdOeIhvceKytl9H83fS7*dhd$SKn+twU&;k*)Dz~BBLZVoU zH6>eR=JA*vHcw0NpP2$;Az>7qV8KuTX^pFVWY_b)R-WJ6LMrBxXX5w^8BE14F^1cJ zSCNL0HDo7>t>z}QE~!uB#JiznTUcC3UlwCNLaCg54Z{`=ul(MM0rGdeCg{V(y<88e*YQ{FNeMWnj&Y9o!e z8saJZ64`KYQG_nbP(uE4l3yflC_xdK|IO)h3E}2zvk-;;pq5i&kQ99 z7s(DYFJU&8A-Y&VkaV@xBt+Xxy;`k|Irbcx zX|cq#lPK6R#u{vWZd5^=FG~imPKf1B=p;bdQkiPfYAy5c@j|B07!s~2tmw?$ddU@b z@FT8S(er6m9B#e#uL1%C_D`6~N4J)wIamf!ur&6_sv{C-rqi`BCfr#we1{!z%%>V4necdBPiSv}l) zK)#`T*`N_507`-a*;;-izMi+JkobG(UEm=AC@M|)NSMl!9Whf{^A2@ruC#i~4%$$f zwmD6Dd`eWpoF_ddr2<;k5lAb*B(8OtuQkgyH+s_u{m}zV!{`Ay{OBQNLC!ePQ*lQ* z&DW6D5k>{7!~`|09D7E<)&WF;_VR3nJ-}6^D2D0VsL=}vHK-QRe;p!J z@Jmin!!OOL1p^hb>j6o2va{y=YACt&+CEc+2HYd7+|a%uvHytkj<$h);1rG^_G?-P zT(+lm3BV5+8*e`#K$$fK`G}2D&S890gb-~*g4v!GV=qd$zog0TgFZl^ADZhHii@3f zn2x$m@2vC3Wr}6TIbtb>KIn)!<}Ia(r4Hj@;vwxU>S>XbO&n^=G$cpLmvb&c`HyM| zLl^mO_yADGa(uPv;v2J5%47=lCPQGCWZ(Q;_w%;qa#^e+H3 zv^f>c(;V>=x&C%c$&dbhKQ_~AYhl>61h)?PXPmS@{i~-FeZ}#4E>BW-FaS3EVledI z&pyEaXHazve4B^mUjDv~V&$T>b%jF4(p@n*x>-d5L2j{g5ai zLRp@s=o%2@SbA;RBeVb8*rPAeqo#V~9f3j{jC-hC%s^~6_T|Bpd(y?dX`mTk*@PncSj8t|w#lqQ zD)NTe1fro?Qb>3M%VyGwJFDXnyeq(Pa>d17ryW2ej!gXIN~Q=wAyk41z`WGj)iukL zuwdP)ZX@4mU{Fv`JCNb&(_gNz&PedQ4y+IcKO6q(}i0)_G%+dm=g5>E$>l7X%+*dr7olWc#D_54j8TybxL+oiqPkHrJ>ZwsZ?blPYdODz|R`qm)p4!#Z zYxL9^CgmD1sNEYmf~1!qCSqUcp*-Cpy$my;TniHZVQRZN+(tp%rx!o+FpG_|q#Q{l zt?TLlMvxZ5IGo_9%o$3)rSfu}tKT$FpydGHF#|@X4TFz09`R-TYp4wul* z35`Zw$TdgU>3F&jx(4e@wG_f7rW~Ai(U&wX(%~+xH+WSb=l*1p_JIe~3@rr3&yl)+win z#Mx$EQ=vg6^W#U6I@p4Y!f}X}h!s0O#S7&yFl^`*+ZF7c;$Jd@pu}ttP9Sx#+;z9o_kdm0(2+1$p zppGRFOHMHM4tR))jyDV0h|)|b*s>!HZzLP6^EmzpdVVB{laR2*K@zc8svoY+k*#Y#JM|oXhmje@Cb^ibHhw5$8kNT7>Agu2B~s%^I-%p z$c`cHd!Y^#!F|n!NsA|b=+rhoaI^&v@d4%-M8pTt@TKZOt8Y*Bkn^xyJ-}Y_L1A6o z@tEz#0|iHF4NkIcwV0f824Y9>o3n{)*C52~h{Za0irI}LrDXAJtcOgU00uO7nuj6( zFa?^DUvY^uKQ zS?jY_ohyOv0|Aqb9`Vmu)1a(s8oO(nhAE?I_V~%Bdt%nl@9+1T2xc)?gsI>BPvTud zVCYBm%VcWO%wc0G+%PF1ijD@cKQfG*Yvhe)YT_p;c|a`3-aejBcBR3kIy#F0X%j+C zV=~6-G2<07rqGf#BEHcoL|hU!{-}Y%dXy%5m^^Tl@w;>QVKq6=rBABMz~I9aQAEuP z`c5I1&kSZ=V6OpT-pEohx9!aYH6pCkLAqhVQ23Zyu=xeVDgp`_3=g>Q3?MWRB&WPk z&23UUG-#ss%sQh^!AE4?CoNg)kq*dFKofg}ux7GHl*5$R9G}OqAiEObv+l0B*$9#3 z;UY2tLLNb29*%)PQb;{d5ZE380wC+9#Oa;ywOZ8)0ODxLT;qX_sD=;bqU})&7%mG< zBc8e%d|4S!uY&irvQFf~As#tw1!NPHcpRn`_XP(+!}L`n& zvVbSc_Y}RyLXX4aEk+E_-7%})I@Y8aNmMxYs%I@-g3hWFiKmZBX~(l}>S3~**gK56 zsq;wHO*j`-TD*q_P# z#hSMtfH4Npnk_gaPM{KLm9t zCJN&CSQDhxmE1<7ymu%>s7WTQJ7yLraICm&FS6G#DEHoYXXx-1C|3>c%zr z6Y6VZAta&#j0m zGK#ptqfr}RLp;Z)a3m}TOd5jcY;Y=^%moo_C^lwHIFT}f*ci1n_r}cJ8-+UP`6cw? zHtpk@BW8ucR5bTSS^wcJn4P6*MgJ0r-m1@?5uk^ms%4Y8F zaDJ7KQm!9D7U+lI8u}R^lHkXD)MX^k;^(-93QH#pl1b71Cq;(PIQiv+3KhX%%Vp=A z&DAdZAOqzAgdrltu11?z$b70Ug_jOWR>&2#%{<47h}bw?QQs=+JjaSq6iin%YZbMh zV@0y}nd;h{Rn&Tp70qKnGgZ;NRn&Zr72&2gUD3cQYCOk^Hva11H9b9m>3T$W6fV@{fM*=b&_4 zP*<`aN{I7&Ts@#g%L3KrAhzm0j->k2-UBznTGuATqRstO0;8bg2pfqGCw7+2bt?G< zzBeksu3dfKFZ0UCO6PM`$WoRcwi$pb2~n11Kzu!9tAWLU@4%jqNjA51wC}9oEFP3>i=v9FM)GP*qv~@LQ`GM4Y*b_3@w8Pl4y3%JvAf!ft9C1B;H{9W$P(2y zZpAw2xa+PeWeeyP9j<(Z1Va68L`bX5A#t)`@A8$<=D^;Q84K!2m2SUowq>Z{3F~S_ zy$M}FhEJ7o8OvZPTQ1mq?GiVgd)V2yqF%NgvIA~Os!i6SZIj#stJ^jCX$dt#j>OQA z;zVa$Xf=A#u?Iuz%aWx0-B0QeC%zuF4c|cS&{g#P_%1HzO3wZ|!|42`3OveAunVag zfY*Ug=wh*g*Co5tPA?W`!H)8*;7L*!oRX>sL}8E^hq0vRWpp zOx5$5RZoOaM1`=ic2P~noA}IHvXs^#l9`*X&fn;%6-j8K9-HyEdwGE5=hJaWk`h}n zN)a3+Bv&OL=QMRA`Xn}0x@0PFJ#g^_OM<>|BPPdfFdRJ%bkvTojOTYTGdh)66|cPo z!ad!o*88@Vv=yi7%uFjV<2or$SW3p-^qERnRC7VkQ!WwGy{$MO|Ryes# z*`?PJ*iT19_~ndq@7S06C@diLIjUN*8Mx;twg_1mPz9|HWK7^&8%O8zrHXPzV~_xd zSD6px?jo2a(xL~FD~U|&JQdmmzS1>8qE?wafFL`7Oj)obF9gF9$|mNAEV99de5B}- z-P+w6Qnwi4FlQJNN|{vp6n+@gK-10GZ)QmB0bz-kOZxxKJIke2%q#j&3>Wq%y6S=w z9g5G&NQ-9DFfZ90%(!|#I2v-p!aYX|b=x`(65=SZP*?e0r$*W*65?vnS7U?6ikvvH zxVK2J4rbV)3s)C}q-Nnmf*S9*2{62oRR|FI6C zaLO%1r2BvKe{@l1tLWjrmZr)7(Env95?k%gOt;scotqylY}vZFZTm$#F1}>vr7w8l zWnoynXxEEh^3tW$y>h_M zKF9?>*V|8txT^n+o@zwF62$*aW}W&Kxq&I~!P z^kkRhUQZ%F>c67LBFy^V;5p3i{>wc%M{Y4) zGSw-2x#tST-JTSTOP&;rFYRGlmGxiJ!>B6jzqp4rRo35y>lZ&S>XkG6;Q80(XV@#z z4D?x>eSR+Mm9zZ3(0&Y-7kE;zTtvnEm}$nR)U}_DOeFWD5)_{d*%F4?0Lv7 z9IXYRB{~p(9`pEl$OdaI2HhZe@I=vZ{{blOdsA^X?6Yh8c#`S7BnT%8c^H^iM)}A@ z2^rk8K~thj3G>q^*C$HIK0mh-JxZA8hIBq-tyJdxC%7~!`f`*HOq8&=X;#N9CHm?@ zd2FJD;u+}5$rD^nA!|C7xNo9_d<*2naH5cl2WLN|r1bt|%2S~9E_`M9`G9>yo@#(| z$H1Zd;CLP^y^I!rd^~Rtf=}{3G@iHjP+$bgpBT?uJ`}XA{q%SqcbLkE=c)0$PuK%{ z3~?Sjsgpbx3IRW14e;Rbq^#-)|D{|Vq(AFPGqO9KVwva6rK%?~7o}piq|WSyZSe^Q z5FlNQPpGcw%hvdW+X%hg5}(A7&xM8fL?FNDx&f*{=63R7K&*#f88yeAO#6R4%D}IM zj4zEc@OmNR_eU9cmyp3FycNhqBqHPUql`FsXEb;R**(?8ua3QbzMdFAJibP%WpH_R z1~0(MF^D-MKP6uu*5rvo{wrfXOZLuDaH0^p#{8G;onzxfA;j8>a9<{S=ZL`@k#|f0 z%~AOQ**nJ(9*MlORlw1tdgtgmQD|6g{v!me-Z|z@6dEE)J$CuBhSky>cfSRpu<~cp zB-Ken6HB94`7>$YmVKdNxC&$e-?r%1goSD~TrwWjLe(h%`%6p7bW;QXnuJxHh(*F& z*%n=wQhW$2B7`d)Z?zFD+VlwJ1o5} zFtjT)Ry!{VTG1oXMU+Ywqr?5g1Z_p_46(KIlAskW6%BLL9yDl0fiF0;2X(@Hey&PC z*i2^-MF(Q|=VCX}i*V`?FT%-{AGqhH)Z?flVZ`A{L+i>!mb0dcYn#=p%&9VQ#=7DV zz6gPszHUV|oJ=#MhU0`l00GVc_7zo(so~I}P1F){sp(aVogFwrT$MDF<%+F(^@5*fTW z)de_0Cw98%IzGiY(C02aHH1p98DKpe6*)dD{zb2JzYZzW_y$JnvcvkYceW2X7_1d_X(2DD z9(EH8CbUEZq9gf?OE5!EH)mkMDqxy#z#bE6pX^%!3~afTDb3l@OAQ==Gsvj6n@kdzs)!_oGdJ-G^)9<}S*uYv=-B&Y1R6Vh$3y1WM<)n8#&y@0! zehUi(l#g8z4yL-ING6kAvHk<6imLzeLC5(~_lM0Nf*Xqc-=hBOOY6T{(D1W-R$vI#FxZLt_sOsz0UO<=ZkLt_8^gBA6+ z?A};x+gTFHBy1xB0ktt>8-wr9A)<4FiyOLgL)X#&ts>gojEDTfp}PCOn(IkZ%ArXc@+t?pzZ1Bt#YnIM;;dy}rB zL`bS>hBWjh7>4Av-_1;;JohrIc%zu%d;b4gUE7tsR(U7^S>5!S|5F9ZpjGyV>?VB) z_nduT+S(ml1gDOzSL+JWpR8K!ij&9p63_Ze#IS~K0(qcBGhG`tA}0pjG)Mw-mV zKn~)>Oh0lKk_#hG+?GXv7#cI8$kSE;?%rXlEOMp(gQ)8k5R-Bem`L|@=a7dP?IwWJ zVzmv1X)fZu;6A%sW!6nRmq?b7Z))qw^lgSxo+n9Yd1ANH-ZHP93wJlQMeF!GF{^qm z`eljkZ8&O7oC?B~GyAIf(!LKvPswXbh zvZt?pA}P`H+f)6SHj2$`?jCM&Z<9FUC8!9}d~T{T67m0dQes|P`@T^U!A+I> zo;sGit@_|wE`$oxQqvShB$@@mh?-?c6M#--sFNiR3 zs;QEHUMH3Fc3}Nea&m{2<589TqfwF*RF(S&qa-q-D);wBNzP$aF4r|zNyf8EGRjqw zv9FT9IZAR~ta5+7PAcb(!1}A?WDcvuC^7l(MoDO2mHTf;Nr_cr*z~}rSOIIPo71u+rDs_i_m(DxtJcmWLyPOWP zabUYDy9o@P@nhpp5$Mn(b0X1IEDh}`#=eT$1mp4HYn=6imYV^&Rmxkj6wobf@<^cb zw%anzIslBa<19il_>oP5Ad#iD=mmNmCve&XB)OHTu%x{cIGC+4b=q)%VjvYXY?VY4QykEX zUBD*9);JJe%Mli&m-l&f9$2W#Mnpt&Z0o1g?jb6`C{|dP6LvBXDdfwd0nS~GZ(>dT zJI%avZ_k|yq?FBJ&2yMhhI{X!{Y`oBG>m8EpQ3W!tx0@v7{*z^zTm{_3X}ho@RNK@;GaA{EGaoa4$4*5WzM-Z^Uz)d3r_u zUDxDqC$;sOT&P{VCVwkG+pftE^3%J+NqOsy|LsPXoU#!~IwU#-A zrq<9Ii{Q>ajk@ptbdJ7H6o2H|ihppT_y_#S>=S)fdEaG5-utCy z-c(qi7~ByG&-m+brGFZ>_xXXIscl3u#oI+BSOj>cCR@?ovau4shFjA2MI#Cg&HIZz zuX#>y8|{Cv7|4b=R(kX%j_y>+Lsb!yb8uf?$r*^PxGt})pEBCWpycB~cB3(4kSXSx$>7pM$AYSCe2Ne5%K0NwtAC9DnRPbo55gAyKoGjAV z+|22d5`-uJG(P{geYfvCH#lH5;tk1zOp12YbuO&i4~`*ke(a&Lv5~; zQ^7vOcu*f!gQ_`1e%;(#c8*VlHgVoP*xQq>Nd2B-5+r$v)2`R9o(p%~`5 zrrD7Ap~G5biMzzd1qrBBWvGilmVd-*Sj~yo+>~n{HB&e5s5`1nRaF`9+}2&8YKnh| zj0bh&6E-5Rj7)2Q`d%+xidV>|ZB}q7b66#KEHr#xJ%Jz`UPB(+w>qP^5I7bm z&iD9c61Nl}8t8yKlcbp<&9o8#AagAhG)vjrQPx1#NgazhyfOU^S+{tZo5+B%A>)x) z=0TMaH@1|mc$sA~*qg}sP%QI7l@SxGMy##xQq)bD0*RK`%Yj^7C8vRotk#jAuZeEyv zsUOeU8n{(4<9R|ZiT>vG{ZVtmWKkAJ2R9fiGW@cVF;B;7GezE27K$4T6nQ7}n;eUq zV%jv3ca@#a2BSpYA#1jn!^N~YBJX7RBP*T_hKRhAiIA+M{?-KXZ%q)PZ8~pp-qAT` zP037h_dgt;^Kja-KAbQ<%Z)4#{WvRj54@s=T$;NS}`x`qR~1Eof0PE~<;=dc;*9b}Av-2f~Fn<`50 zaqeK0<~X0q6wg98;bV(6)oU>LLMVmoM~05*^zVSp;eXthAzcn;S2tn?hL8Y@eKZ=? zmsn*L(T#J3HFLSshHAQczfQAKJ#*Z|9tH`nqUR@PqN_w-)6mx^_ZzPY8AVCNYV@!0^2G9TO{l1=|~jJ8owXO5^N)U7TGBC4-?F1F#rO`Ps7!>2)4D~JO?Qg7^l zlCqgc*<)t7GMYyRpllhL>X)w{Sd40=np{zQl}Ihef&Zm-s|;TM)C~hXOtg!K&G$c zkfa!ft{w^=5P&QBB9dYJ{t^!uCMda^ zq!^$%JzUNMW(-PRp*?4Lc%^>cKD-LFlXxT7HO;Rph3-Vj;}0!oXu!jj;mY-JRk+GB zmQjyf9xh)GSA;7pL*C6xVQD?=4!dJUKfENoWIenzyfkL?!mhAuJ-j%)IA(N15sLNj zqVS@aF%$T2Jq*JzW^}>}!wc8LW#O`z(GHh}OV`5-!V6+XD_jyTSr0qI&X~~*JHn3j zaB;XeW;8H4-@Z=#){A0>?9vz4F-hMRGq{oq*9UAsx5kVV8b4UaxP2jJNCjG?pl({R zo>q!=)?nP>L8EW*KiSOFduQ)9k@cq&a}~{2f(HaNPhyGg^I08un9)0m87Lqgxc2Yy zhlUFz*7gPEa%uO&g;X{kZ@cT!KJX_e%Y$lf;fCNacl`Kq|D4-}p{=?!ih*X!l8K^H zm~oQ!Am7~mOfSbiX-$V`2EH2riT}9rVdlwVYyEWc{V^#i-l8yflEBULPo4^$Cr^g< zlP6Do6auOjTgaOwuWNb4cxq~mg#~jOFwbwCkvZpSr3NlgR&qJUT2xdvOmzsjXrULI z(!EJl*FJ7nFsmr05K`53kDH$Xc5d>|P!Gw*Se1far-DQ84NbMXhaaAn_~EYQ9sEck zIHwu{HSRTH&&Ts8AY=0<455j|P|+1i-cfWb3`!i!?#|6)3 zQ+R?m-KmebDq5DVGkP~uy^}Ck;lo#iCiH+p0MrL>>w!6?@Wqm#)!j)}hI8 zaL!izFQh0_irIP=+*Y)Jcvix9lT>&1e^t7`uYdi|_T62JtGV+qimUm$Q-7T#8^0bC za!-6UcwS%asK5HszKv}?8>FHB`urdjZk8s#X^-QEeV92C#rP6OTSgnyl$`f9+_E~* z*hU)T@|46(gPEgx!=}n)k#)h#s}YIgA}I+o1a*8Xp)O5~eu3}j~Bqiwl z2m8Cy_=|2x9|XU_Oi)UM!F5EC7Y^*ogM{cuVNY0k3I@)j>!Vqtgum1T+rzr`)Dor% zo)#!!HK!bKlY+gO$v{CA}ha|sq|3(6u6 zkz6R%PXm@ChCCNNg$jeFrieyk@J=~SPG%j?g#0>K6b3(auqdIpP&4ZdM)j5a{ z|03Nfzw+y!NCrP>3Y!boqI#$XmuO?u8ckP?F-bNraPl{R=0Q!FbATKRQADPtruZav zC9O(xO`FSx6Mq2~jhE2LgsY$U&n{s_Z(^nsS|N26c9KyYunoKz)Gzv#LVoglnu7He z6)%x?Ze}P|hO)6){`;C)_ikC1i1E8rc6CeH$xNK*TZ?o(^dwvp|B!Jxg!~`19x1t_ z;7SSidW<=XMN>KQb&NTKf{P{G!!hRci?(w5qcTJYQVxfr>MP8;m4kw^%1Myxkt3|J z>0<;W9#}9Ld`z7RK9yjCavBP0^#wk<5QWh*G)uI!et)H&S;$p+Rsdctqh}T$2ekT` z2Z*E!2O2{vVDP|u*YNle#PB6}Bn6uQ$c#wGA<_z%07+cZ1WaZ%Iu4XLrp=*Rp-C`e zP{H}vQ27CmGEOXT95U5bNmpO znmcQz;c0;%;`K9Ry$c3U#{j4Y{4C?u*(u@DG&~*PVHY=N66QR7InI&hZUQRhG$Pd- zQyqpMf0EaJcVh+ljod|er4mefzTq5i-xwr@9u;B9AZ6izU_K?zq;PB~ISm2^=YTt{ zo=eocEQxWVl2>W8rD6MQzs?@*{7EBr+i3}_;~Q>Z(X}w2AwC8RN-W}_*ZZ#x?uM4f zgI3sbP$+*n?(=Y6(SujgELQl)d$0%YaYrx97P^L4BfcMqVc<|__PeRzE0csE6sm~$ z&1@4m*l^wW>)7E^V0lG?+=f`uPrNha_fc%7%(w?!&LRDqdyRXn44##vGBA7y{`jI? zKK#Tx?~R0;rrLy_gQ^WYJ)JJHcw7e}iZoQ(u`ZZPJ$d^*={ z)l@LLKe}ZgVO%4Ss1VbvchMQ9&HZqj00q}xbeRd@CV;iTPfOQrLwSg1#SfQn6Ac9y zpX?s+9fvWC!w5{(NHU1bvp9%U4992Vi0xNBj+w?0&If94;~0x+DC=SxN{t?TqNekB!H(3cN{E&D>C= z%p9(P#-VA3U%*!2=w#T)%;>ENKl5XRK%^^_9{h>%-Uued3foC)7eA=d12qQBjtAdwSn8CoFroHY3z|q` z@FT{hpQSp^t5#!8YA!PS{hmtN_7IIANm zCpBO4kFdSaydU4sczk>|i$%V)PZkC(>igK&*&zfch))JbLQ{^%Jj?Nb`8UG;058J1 zJk8L4gv9?a#5;w}*3I9h|9)=YDRQd@knaUr)ZZ!cZ#eoNe)-$4{k1QA{>}BLZuk$kef;8+>E$0gdFqBA{mNirVc{M7PM$pV z=&6uBdh$_>CTh^FQrb=IKS>hvM~lYjb>q>HKT7NNcf*6*evxYboCf}nZ~6H4J3juu zsDalT$Um|VASguzA-B{GpIJWk%MhGTy=eerR|P!#3)ukoz}{hxbTQf;evsDw57C!$oD6oD1IU(IOvx$e?A< zaopfM&U@TqL&@5ylMEk=8}vQe8?u6-VcK-?K(2S8Y!?J2MlfOfc%<(a9>5fF6zQWY zgxJdrNcG5AM%%GOOYFhWBD;&PTtolY)(7j*Dt0aRIjHt9JPfW%Z1=A`6ST1sZF4EG z?`n^RT1phh?jkW4$3VpsM&(1u#uS+^3g}NW;R{>KqxRdNYq;Z=z?Tt%oNAsP*X^-*}g*g^GI0iY;-UecZ-E4(D z(YVpVE_y59Ymy(fL>=UGEw5v&P;m%4uFIJ|ZJ^T3@ljz^%$F@zVw|&u_T^-cfROkP z5Jj|~cfmSw*)7zWje%i7etjg&BBMvon9~R$A0?9#c;peW4mq9pBX}l7=hgL+$e{+m zZRAcvSTK+cB#^jGHwB^`(1{fwmMyCRf3Q)9Rp6XJtL zh_4YEuNe~B?GbZG27_`>2Ak1sjqfak;};uQyrgvn%_?&>vOqu*ea}3=EgeEPD%o!~ z0MQ9&UH}cv=;jzi*exOqFU_uvXU7+gemQf1If1hyrw3rLTV3|vQ^4l|ykIjF?CLZ=$`hdM$8nYKLKvAH8TXBI)<}cln2c%r;G#6~i?4nwhOsG5{ z@r?)uIAgN+AG_Ev78j*K?Zq}JI5!hV>6<$^u+Rg5(`}IaC>$?8+Ko+RkwsTc+nJ-f zBa@g^PJ4zswlQRnJR{c@E*;;6WNeyDG;ZNNvK9R?{_)C@X3c9dbHr=1Pdj6({T0A0 zKmn|x_*h*J1uHL&lR|}r7ATFQicNv!reYTnP*aUT>`{d+=rg3tQ5gJI1eNp#;Ts?d zhBcZQrWB;l(n((`S*oV3Xa?;Qn4QUjc%IqRtk@3(Ce5sKcRQZ_PNErKVNFT4hn7nM zJbT!|19kd?LXAmmXKxhe3_{@#itE*{9u&L_BIs`#JlJwj)m6|rVvd=H8;V2kimqfd zT2n}YO_Qy&6EVk3d(8?&AnF?H7U|`vrH0%p=9s80`u=%Zo39$cz#+70R~l!ST1&x) zb1Av<#OMktEI>%*mV#u3%u)hd9SGEm^lSttvb7PQNZv+}B9|M1iqvidD>6M-sT;5> z1}vh$3lFU(6jHSjv@!~)(TYTF1TFHq5wuA2M$jVb8-w|$$%GZ^Y?>)LFvT?UviUi+0>zYS4$#5OYhdjP!HpH0G^=nKS!hkEK`Mq^#=vjPdolH`hAF0apIJn?ATRrE;sd7F(9WS`^ zAY|3M>^M{w7NL4>=$7T`%j3lsK!Jo(LK7~dP25wlF<@WkZw4Rpy9!Ov-rxr_p&=%R z=Jwsr?&hQB3Dzr;Z8~}a`<`r_7N3g8hG&3y?cO&-X!3_dw^KCpVJrN#|DOEekD^&V zUZjeBoiTafX9}&PNl$s*#>89BqfD95k+g~Q5zGi=fi=hWffz_(jwKM{SE`2O@QvC) zC{i{ErLWJmh0Gdx7AUijTHivrr-3qJcxH`ULBFMDr)CPFSz`Z~^=+1^I4dVjGI+!ZMycb-TUW1=-+-fZh&Q&GdA&$YygNUqzq5lsm3T`9VeREs*$=F5`7 zs}q4a&&jvkA}-GDn}jf%nOy2V3n4b1^80#`plZ4#_K(q14U;`Fw@BW))9CADp&gqP zg6>WhTHK@%^mwummve1s4mv$q2<^~@LeTHYLY++tF-ay1!6$8~3GzKz2r0{kLdkR? z$!(_b6qu827Pcwmq}eQNQ_u#%W?^Pb+9230%ydZ`1e=9+0`cS8ENr9kdJQOY*)K#J z3l@!KF)k!AAVho>5P-7Y#^B!w71u(Ky>EwhRSQXtF237i?-3JM?@9Xm*|GQN;;Z*0 z{k@`mCXPhNgpstQy6j%{_r~6Hpsl_q>EHX_WoXOju=Xy)n{cST%Md3dYVR`435(jh z40S@I_AbL++`A@Gs9nr($f~JYCkYN&M6Qn>$Khr;8pq*gI2y;{W;hzh;bu4*$Khr; z8pq-EOc0L8=kUfk0MWD^x5lw{+#1K)acdlF$E|U!9k<4@cH9w;4-O}BtiAVtY8)SY z{(QpYotn9owpxhAP|kne>;zb}8L~V5M%*rMptaL)#QO3E0z3Uid@ygIs?%@86!QjB zI{ii*GH;-t({EUpdIQm%enY5z)xCeQy?ZBovQP zH=}sqQ-n{ilu2wpFYiB|**DroNs+j!B{Eq`|OR+#ZJ4;}fHx~NncCb?ktBGH_Qzw+fM5PRy#x_IfWrnPwe_N4q z?!kg}5c*FS3o#JDLKsX0P%v$te+TgXY45h`!`|6Hhs1m2pDM~GVxG+c z0L>EsNard4P?PJ7%yWAmQv4sZO5CH`=2&6|qp4={#68)ulWiURQgy#Mo3ijV#c==h zx8wf?N@6ccEbF;;vz4}zR)$GxT7LRhnBcQa@YzSwEl<=Xb8hTNxe$ZQ$Lf+}nYtW}Iu+lIgBKR7uSe>OESFZ? zAr>1-)L|AZ7154emSf&CO&r(mU;}IDUIYni8Q@B+tbp4lv1Tgj-eRh2(E!f8sodR$ zAdg>k{gN45MWG=+TDhCK? zfh=Y~%iExn8A5bYZVv#q5q)SF5xI5_jczdptA6LIwAG(g8R(|Qc&teI0@3tjmEK@e zd57Wz+ku|r#qRvG+(xc2zT^!{Z`^xU`DdH&kMz$PmtrFIXOZBMXy9A_3Bi3;Jz5ph!G4p=&0;W`GsWgv*HiF zkRS`nSA;C!r`=Ia9s5|gMgCj#0M(56O8Bd1gp%mZvjO)IVvY&8VlZ<1L8WASQzBDM%qDR510clEh}MTZFJ; zuNS>RD14%5tT!}?&=X^=G-_9YW9;~N*o5mMMIfVPO-Q!DOg=x)%J zkv@WH4D%(l7(`|~jVNeilkffh^;+y^p8U2(J>~%eE5J?WCS49A9c6B#AQvcWqse(wON5M?`yu0~FPw$kV%pSbAEI=M)1s2^detjS4fnOi5J#&vW~ zxz8|hY^GxDWD-YmOyZcj#8IYlIk$G6rRzpr6;dlViKF!%0U{DdGoCtI?_J4@5=Gmi zNL}CHR6QIx6;$OcsA`xrQCgZ4&9n|AALpHXM$d>H zNp*=2m7+CCMGKXbg7D=~1#R1`O}I%Jji68cB)g-2Kb`vaw3K}+McPZwXHu?jIm~P568oVB{c|ZzGH+OH(1nl_$Kz8vwBgh_7m0grb2+_oXbOU6?+6NVRU#Ic>3yZo@+HTCnxt~Bv+u@law;5! z)TF&S*d~If-8p_NOAh1bQYJF6iW1o}wP>m=8ZxwHz^J?I8nP}lh~MHzH#6?emjoW% zl+=-X%#FsLx9NF#^eii*a$oF@vne3;j74*?`N8xur8czOw`Kz|5yc;I8@AJE0BAXx zr{%cKv)z5(6yX(YJs{OEASr|v{$_(aUo^wi%MQecpGJXA5_8ffq3sIp8$2WX$cwPs zD`BCIlqc5K8U!!bT#=$aYDEKwC8CIkvW1rPH>!sH!KxrQ>(>a9zehOBb;AX8it{*^ z$1%(PKla`Q+S02o@cbU<+;i_ex2jG;1xqS6-#s0j3Z#Z|I*{U_b-$ZHkoZ6an{FT` z!nmBO=un}|Vzo)?A|V|$YN!-FJXCIOdH}~{nMnkq38ol=Vgoj=@j)Z)iV_?|9MfRi zXakww@4xqV&bd{$D&f)X^je*Qd%kaf`}yB{|KIz+%i!WFs)|6p)dhui`XI@H?KL_F z16C13t?7eTD1>*XZB=^TQaMsA_I@PX5#Oo`%i71w@9=H%NXWQ{1Rp!T}jya+g90+7g`~zx)k)JY03(qP*ci`G*ms$&S6`eEhJWNqKfwOehoJBuX z=x!nE+dgMV2jBPeb>}L`N;T&1Ry7`B=0aw-loX z0@A5j0JyYcn)AJ~A_QwDj;S;{k5Wc9@QBf&-J)!9mDe=30Z9X3av95-W2` znR;4=3o_cHuO4>*Bx-sb3h4mYb7YHpsV;T^?3hfJov36wBQUB7aIWvJPt+fC<6bbF z?dFQDQ*s$S4+eASisIr3g}S?B^qP8j|H)37D}n3I;F8IKI$bi|N}jFL101e6D`#G{ zf5TvpYA~Lp7v{{DOV_7g=)%N5)9Hi0O#Cxhv1jtn%nfn)n&EBs5X9rIH~rkZt*LGU zGV$;6c}gN=ZkYdZc}muLO1=eGXT`|$ZwsH%I(O*n=`&j6GfKN>^p^YwfCXKWDg3Vv z3g-abV_FWZiEhp}c-q=G*C~E1-`vjg7mwPeSf>eyC{5h93|rVw2Jm9|hrMz*b!di7 zJU19qSn}9KQ1+AD`oV9T-TFBPlj=tBrdC;j`H8Dl36j*UA4`KSRv>vaLlwx|n@d3J z%S-I=0hnt6q&K&`n40bWHifSKh|5z~f4ml{vsqLD)N8hd9;g{~uKu9w&944NKeId{cr=}A)~+&V~Kb%y?6 zN&bNv(NxGk(6Yu!Odc1ADm}o*kB6s|;F8#{kf3m*%90P|$q`*uQRIYe5q6)|*TbKq z9&He1PGL7K7Ui4hi>kCT>AXt4FF?ZfEK7(>1^Mt)>rI?>YtVG(XUb><7u2EUZj%cr z2`9q=UVqNx2ky7w8%pY$wKRH1-7STf3R>9(vgYU9STqcE4*}cdNDbkVmyc)w z)+kuDaZICK_UfiG{wriD^J<@u<7%ku^IFHBB(3o(EohIf1m~C6H@0vn=FS{#oH-^8c&z8H~T~|!EPzb z=;WnLKP)(ADK>edd95Og*vs5tl$m98=ztq}@H`|XHqBfH#Z!0@A7pvMdwO^qq=CR) zGWFe&h_;d~Qgn;eIPX4cpNejpp5(o8={ELt;o6N`xI*~KGw5{fWOwm13L>7esTN6o zv}wWk_wzmOECFf-j*o7+$`d}YwXucSk-o&x$BfKHwUbcOFm9g5hGTmEa!Ce+9{Lvy zXw}}b4HdGpLFSuFZvje`hQt!8pu94zr?#GwGD(4a%eJgQPE~^qs2xv?s6E<`#%&|s zaxY#Ky}&g2_3s5$r(WRbafV*l(LL1_=`?v6JI>e)Nd3YrR)OC~e^*Csd#YDHM%GtO zv;N3qWc`t8)~g;P>s4m8r>_c#;aD++7;(s<5#7v%i(As%#l*!4dc;2d8^qmOJz)<| zi%Meb__}HnwD8}s=1@rHRb-5EfI+e07bf1@I42HpPW0#|`>&^2qIi;zMVuf_xFq3| zCQkQcnv!&TZ0vT|RX+3cJV}7NvY&1gosSK)3-4z>!obFo6jP^_EQ8NW2-b{)h%^{A zV)JUSL(@T>$pc>GZ3EMa0^y5NPRT0wiWW173lAV@6?HsuoL>_Nk^`tgcX6-<3uC!% zMg4tkF!Ccq2(tKW3mLTzLt&} zlYCr$n5zucOj=bsw-E46D}L`*R+8w|m*iaT)8eh;8uwA?mT%mn zq&La}H^BSU;Lgg=Xgs`?=nPzWeR08mFJsPkoaAH*ok{czCE+vlRJ~R8&2a`#QDTcw z`0OZr1?(3-*bV-c$HOhQxB||CrSgR8I?&9Lg+T4ckE!fE&LZLQjpI6(6{qsJb|B&` zoyEuSg2N%Awui@XwWZy`aeaJ`H=MO3iNQoI_74YDt0%4m=ai#Crk|4bXwjUw-ckf* z?Q!-Dk8d0&zq~8l-N}C?n&xaJgNv@{gG+b|2Wk-*9X@f_9Z5g|%6t5nO~-Ij(9L6;^tu>sAQaWYKr7z5K9#6 zbJ=o^xjP&IHx)sEx_5SGga_*0S-u+GQho;y=Hkc{^J|nYkyM-&s(4}5p^vD@?Gs>2 zIAs8fiU6;AL!`|ZU_Qu^1_W|r&OmBiisx5Q23KNg+jG&P?y%qmMnuc_`_UAlg}=qXnZ zVl|8JKm`XjrTBC89S3WQma!3vT#>41V;Q!(NgDK}AA_c%wjX__!qda9_9P!hAJ7ZK zQ6%gdRs=v4F5=?ej@%lR0P=K%&4`Yp>CMViT-OmaF3c5S1lq8w5MTI<8u05I{TVG2`xD>M zWw1K*HzI!GY#vcQzX@2Es&T0avdH&y$Hc8H4R&vmSEqh7J#II2Wgr@^5;m44u?Go9 znUdy6+MSY!MH#sWR%n1rbDcdwM@vMvj3fe7My{G%M7=cEC?|2JAt5g#i71|tt03u| zl=Q?%YS>UiBW!vGCG|^N_0WEql=`LD?9hIhl=`K+?9hIhl=`Kg?9hIhl==lENTOdR zrGCvv68$nM^$R67x#*WksbB2tI7C!3cc&gA;_&7XaT83XOL}sMD8g#L3;Ji&lhWuN zkc!pM|C`_Y&^vDacX$6y5kWLo|LRZP@cDoB;ZMBhVcx5XWovYg1$f)l|M+h{^145| zH{Jki$ykV1g0Yt#zupnVnCvv2ab$E9l0|S62TDW}Ug+iPjd_v>&X~^mDPy=W zCW z*pwf<9{GWY8pPB8gX2wcqhH^z%Ig+5j z9({FF-hY^gA}1G&b6Te@*qape?AE3hEwbcq)!i=`AI=m@#YqLXDq1oFF_S-zPTV%eufqoCj|rNL-VVM)J}z$ za<-YNj#oP7s}e;7%u26I`4vF@qE)wn?ULnx}J*v#`nse&T8_|>CjKkFC9>ZiOk<*FlPNVKT$uSIa zsP`X|iqbj%jK$)~|$Jj5|hw5ggjTmaCu#N7e;aSw8YMM44v znXraf4Vvao;f8@g3PJy~gKFXE0?HuB-paxD3g!VD8{$b^nxLQq)m6};E(IMHxq=RQ zB?TSSP6|4PU*O@~@o0bb9G-XVCz@c{Y&W8MX$#;!cyoS;w%+hl zvRX&~kzajA>dXVf+lJpsbcP92`WoG1ro&?TBb63@LGb>ozRa!K{eci)e1 z#@ZL_!@qg!t>`~Tfn3qQ@%XacV_(rCrXP=(N%RZ;i$5IxTDY4$(;6d4z-*1g3+QT$ z&;g+P`Mb$8t#Ny^V{;#g)8Ey|BYpIh8q<$`luek{xUCu7O`d6u z2zi@p+}5PyvW%KXYV?&F(~mXEKTK;x_jNaUrZsZ(eshiJQzJh$@<@%oQe*nDMpnv9 zjqsUwlV@5ZD%s6767aFBkwFC2&vm+cUIlVpxi_EwiRt22-uzXJ*U!m1+Fa&LNQ}?8= zclmfWceDmD@0z%nVvJ3~ish4t)hSboa7a~3fe(d; z@0~s9LBvyNZoY9IOes0J`LbK^u2oa}WK}*@)`JPf!!$Gia$zi@&?O%=WPILqzI&}p0(G^ce!p&DwteY?7uRZ$+ROyl8Fp$^Hw|6!DNlv{KsG6b9 zxLt~>7dn7!(+m!UHM=P#g&KLo%{PpNqqKin#00}kUSJ*P09%^%2z*`Yjt&a&bCZua zPorlPDn+x7`lJ%wVq&VFfNQ=|McjYzb|MH*wES~eyqT@d|AJC`$YUNMgrDAc0BqRb zw7@F@8q4S}(ZHM!UB?^Isb%nbl@C3mp1n(SWn5YHEFl!_%ELsefjo#tNGJuCx z)NC7+22F!2O&v@x4AI`unG%=~aoRvW8v_JoA~vQAFdNWOWMy6cxIToF4&~@BzFlE9 zw*?r)%h1N4@;)+lgP@o}roy)c;3!kotk;3Z9_E~eup@xglKVAc1*-6!N*7cbGL=U{ zRO}~VL-c5Ks0y_spjF{5jVA)Kg5D=G)x_oyT~o8K#$_vaEF9C4wY=9XBx^Y%j|Zm| zAOfraRg7H*m{u97>q-0{6BzFZ5y7qz$B3_9O+m@gO{HWdP>q5gndU;S8J^G@v;(ER zeBu?vQQ{|u1EU1YvN~{hkZJs}xUSPw79~6;F}Yx)$cx-yDmr@@P*P!qNF~UIsa)s< zcS((KC13Ehq>4yAcowNiyH6^tL5mRq3xHfw`H(*1(2xHTJ8W3U9Q3&L;r+70> zyNakb?JGRPOlMc3vj}is|K6^A)!fnW=lf+z+^ZJR_bJuBaTR=6lYTDW{YBQ_#l@pX zFTH&CvrDc`N!gk+W@FK&Y@;(~L)J*ymd=<>x6tU@{28-J0wP=QjM=1`kqrg#8Ae*9 zY^*F-^qF%0qnva9W9IaBEShF9KUSSj$~iB1%$!fmIrltfPHb+`dh%8|(}>Q_Ig|g& znR0sLp(EP$n60D#j-2UMv@_MYI6T&?78B`%Q|d(&S!7ko9WxPH9SJxm(qM~5FKK#D zE6!FXFG;KL9xCU)&Ae_0CTAsfCtA&AC(Ke2@*wm7n%N!%_#&i!Ow#BC>#_tuG;? zu!Fd>Sz2vwykWv7W0LlhV@adRV}S>aqgoo=*p;IXl#oiOZ^{l6Gc>zL_7LCxWv|*1 zZdl}i)dK)O6Ry~$NJ~#FNr~}*U>$D_0e5BPIKW{<&@Ij`;!%Wy(XD#>_$BFA@I~fy zi#}7N>FKnr`rzo%<%mS{?aPMTDGn^x>8DH_Gu=h!!v9e(coPl(Ah29Q2SFXYe0(;pW# z@Hzr@0Lip3h_sE**~Yz>KA|&A5*U=qUo$}3avC`XN9oo00H;w9b-;xD89#S zf;uThbxzi_8e4}ZkRnT>|6F83$s9?=a0g7~ulER4SzlXTU#;YS*qeg~PTteuCyDgX z1(s&O;th67lGet3SzSsX93}Bz9yLyVbD9>Rhff!T=n&$BM+Hqpg~zmp<})mPxFIsj z@FF4m@R3T8uAO>+l0?&l^HfvsEsA!#40C}#vDPK6X4@#aiLFNQG@nKj_=zuY2!jn? zc16q+U)J9?5sQoB$_Sn^c<-2NLcX7+wXm8l@Cyxd$$|m{;5oP9BDCb(L~y>+g?LiA z7lE#DS)FG3p>3+NXLSv}f|v9GopyuwwS5Z;YCC(7BZM@@d!( zAZBB@>3D8!G0;uTpYzkLcY$Yw+TEFxbXL|dj^(Ubgm6YkmJ-i}Y~p*!)s%6?bm3ZciWdXx2x z?TPJ+P$pKc;s*Irj=#cJ2#-CTlX~GtUx$-4=V+RWU=je!Wd~N%Z;24_K!n2>1ws4` zSwvJ(!Z?h3`26xl|A6iM!51{WSEm%htNVSyQwll;;pPK_Hn;_A#w5^EFdiC?S$3cQ3W)GCq8>5kJM~yZAxqR4jvr zjQD{n=m!{XOLJMu4mvSWk#)*4am9otWD+^=nu_e0zjW|ThhVC9ODC!J+^w%(%P@62 z29de5E{WS*wrg=6PTBT}Q$DjuR^+jvHEd-30FE?898iY#tgjl#l5HVTiw2?QLFou$+v%PTB9Kg~Rjr_oF^xaMj>KziWH)Gb&mT^bxP zKy_4Qa9xy(iO=&d`k(#xRxUN?rVnRmaxxUuNbk!xXMA_pb6$~HF(~8hZYV%ftlu6Q zuVN;X!0Np@1v~0@=~uL`Oz9K!X^QT{r_>)hvi`=neDk=l>4zSD^sg^{1waj)n%*KB z7Fw3u-V8+M>_{{BirxPH(C*uFe@}e-D?kpE>%IGaW=n4u5g3+@@zh3fEP!CiWKJyshwo3e#@sJg2M60=oyQm(K^t zU_F_94oJs_N(U~3Ip7{$mru=}bh{~;U}k@EsAPLWtQ`;^#BB@Yl@gv*ue7o@eY1cf zFv)T)(37m(Jro`n*j|fX69-kdD2s^yf5-0NBB*tF zzGfBYcIL$v;3GX0!exk#%^yOYHV3a01c+A+2g{z83{R!ka$_n^x>SO`mv|ouH$YRy z+w~OL-kRai;bsBonHr8KM5&9^tJ^gmUUS$TLnDl0?5${QYy0RmNc=Kxe}t(`gm<5K z%+8BAy3R*z9+p*fA5ARST`eUgIPexc4nvRo>)T>TWxz{q>taH8hE#(Qj5q|8 zvhIYsMr<91C(7@Z4_TwSs4o=v$z_8KBO?aUD8+Nf z5Qa_QR*yK62*>iQ;+uhM)M@t`+{S<#`#Pzjw z1xNrTTl(A4ceU)PhF~L)5Nkw4#&V3dYp#o8weN=7BXP?8e#61`LonZAtZ*X{isnJy z&reZeG+DIw&%XcK^SJBC)d<;RY9Ukd^D8=4D(@Edyi?hprRk?^@Bb{}a-za4?xNsV zFiuKy`mcj#bK`2Ih#OAZ?e4Al4(9VYFbB~mqym^qqVa?acyG132*!)BdAB@BV|#eQ z5$Y1UPAmKQVI?q@=lk>wU~QBsh@vvg=*w;lm?A+5Btl457qIK1Vu^0TKiS&|eN!x? z&^JnNOhlf8G!$1`#Gc{GT4Ks?rPY3WUG=UnQSiKX+*`fyrqxGxyl!0b_j_59#U;D; zUh<;2s>U4=$XL;keTD|MnZhP=EU%utdYe#%^`WDp!xbIG6ycXsYXOj5W^3-l{Z^{|2w?O3!nUGtc^&U6gKbdfLOf#*L#tB*5TDO+NUjtHPfR83NZt%@7*n_nlR0%^m0h{3pWLG_tqjz&j zWCMXU_4;_hU>Wk8f#( zud3)Ds0xJYQNLur0xhGK&>t6jr4}IApRfQSDnTFPQl0%t;Ci9%X9O>O$1?IWkrf$k z_}OK1IJhPR28d0&pF<_km*C-nhwLUIrZrtG@eRAE z{z~9T9hEfKyoq336Oph_ulv-kub?BjQ96>lB=ps+MMrYy)M1jQ#0{2R@Ut>i zc~Jdpk`!e&9YoZkqJa^UH!4s(?nVdRjR@CrveA&Ei;~fkX~|rXiz9W1lDRfYrtWaN ztA;ixE~~D+`EwsA+NaXTM;_*$^p6o*?5!!BB6o*8g!qNO*&=j(u{~ZI|j40SQ65(ei`Qy=PP>qHp0J%yq5LsP2c?be}AG%QX$Neint^n)&Cr_6Aj_ zn{m=O_<_E#>?v_m72+V+mafe-Lx$9nY*lm-0#6r#O0F4-P0P5O)-%o7z8CEXh|JLz zNV5zf)ej(J7*#eO{4(e9#WEm&f6ei0{xVh9Bk+z-W+D(eb@uM|XLTIEP ze}kUsKXZfJYK_Wkw!!I*)*>m+F8}P~9$zT;&N#k4x;k*}q*J?_{_Y|E3=nmLf~H{x zrb1W!_!|xz%^4dmPieRWux0EhhW~u-z=PPJ`fKKqlwZvYh>8H+AmscJI|SREj|vGQ zHFwq$KWOEkUGfI7i(z^i{Q}Hyqskgy%=&;w3TOx3B_M%0X;TpYn+}rqtaXsNSepoRAVT1%U43GYG z%LSOc{)+l(>kXEdVy6}=Hy7gdR}`sIAv$AEqF43=G1Bu00u%itD~Y~nvEl!CnuJ=5 z(Mf;mBcYzJ5~Dv`$bw4Wa16~HLQpU%{6s;IDd&QfV26Q8e#1Dm$jQ%ZkTd5P^-Ru- z{tircZ_~T|wg$l2HpEnj*0*iYYx+FvU{__JJ#t{PlU$cx6tB=puF3(~nMf{aod9}9 zlk&>lU#z=Va=j8Rv>1N2E=TH5;3o(0lL!HLUoM4Ou`LN*(-~Os5n4i1qSMeaXWLj3 zLveToHwG;F_+*dg1xovAq*2d|J`5hmiKM-Oj*eVQZb_>r^^^ZlF}bl5B!Drg=A z!;O%#b)ZpICma-HeH)N3OexL6Jr}=rZSC23lmzHq&I1(y@Q5KY0@qmTJ1Gmda*jVZ zx5QndxU=l39%8S^ak8=Xhaap$-u6+LBMN)?L0mqMpY29F!rNJgWnKqzjRT2)(L5nv z6&e-nN);H~f(oe43NB0)P%91KloheNJScqxYu{}EaE-4TBA4c8lqC+G{?c+SPPjh}0RWa)RNzzt0aQS5; zSBfCer1&$iqn?(t*i%w5AUj(OQzNJAQb8u#qSTJM3>s8N4+RGfW2C|wssCp25Sunt z844#_Q}0A;@B-vXokR_0^W73z0(YKr|MXX4H>&<@!y3=p;#rcgHS z6Dn6cmVuuZiW0OEq}q~XydZiJKGoyY3yh~Vd%7B}+Zha_%#J9fW)0>Nsp@^FR1Nlj za+t)79A)z;?NWzj*69etlkA#mwB z0mIg)pjr~_J`xOx;sFDK^q`oa%H9#y$e2?pKaoOe#n>>*F#h46)+q#Fr_PS8IYW$n zr;4;u)nX+^d?EaQB{QsH(Q4A2rG+_OY{!ST&s8P=RVpULmjyqnki0U&HSw$Yo(Q%S zSl%rh#yA`R#+7@HIDFMgz!V=7RJ5VXmF$MPo2eLbV(HRW2^pq>Bd@y|J(_iE%E(|r z6IQdpDs#(xm$qj>sIHhFJFQx{bF4{(nEZSdVesP?wY`)jd|U8*z|4IDm_0)?J-&8`DZPtXlFhTP%bb#dog0m#SxRlF6EKFm!^H&_-0Gy&yz% zYMZtaP>FHbI_}7{lVTK8C6PB=-lNstsdQJW^rnyGO1DmJz_BduSQDqoQL|M?S5lkD6y-z@ z5C5tz<6?vp)uHhMi3_qDGa~zfUOY1rJ0vprh+R;!kkVle7QnX1>1!dU!?ecMSgIx&5o!Ra;n zCSSDRejxTiJCZ#L`5c3ifjU7JNcrg_n=^pOHOMNkI?3U!@Ko8WV_ z;;yu7Y>cHzn=X|LlVm>I(u{0Q%+jznNo?6CscwL0_W>T=|LQ7EkO?`X&w?Ph{)T*Bvpm;8wXzqplXT`S>x z2g{(1%mlEkF`?NMxN=;d9MnCZ_5jGR#S}v46ErTL_E=pv_ULj1bzk&^29w$ab;lBMgaaGF+=T&qb5M7zVmYY013?akxJ*ua zY!%c!2tBA2HHBf`-AQzSMRC$;k1nXYQ;am+W{eKUmYo;p53c?snvMqbIJ!T4B@?#G zD&RmMq3Zyme0M z1@VSG3W{vBB@|!Gs07@fjx4`mTMDH#1}{sGaZIf>yG8C^Y&trg*tx_zE?osX#~jm% zn*L`;r{FhX)fk|UeOXU?v;;e0S76nm0fI>JOZ_lfK^JM4ZDhCNXG^A`MhhT!1`Ff_ zt8Ng*@f0IraY$hBTI4k|6h-(hxiBV2GCo+Bi;B+7HH3T?^3FSTj^Q%GdYch3fofy^ zG3C-jfQ?om$y8y|Cm|WmlQ_Y;Sm^EsSUA#RDNWZuAO_`mi2(|Xq&1;>I?SRl-bcTU z13fZ`Yy^7~QF@trVre$jcXgNrTY9X*r(GIuKu)*;b?sm<&*&)QJ0WVBaw>=lRj9?H9N=wz3|b)qQwgyC4XCUKV^A+ zeQnyS2`>k?J)jgEze^MXis|rRyC2^fI9H>W;?H(|&4F5G;HmWfD-`Ef@VmljieCe83DYWGWIpXdKuS+Av8<+b#OL0o zV&+1pLZHY~l0_@cwv&=mf53IJigU43p}=t;Aw1@m7SRWPAC~=zqyHB(Suy+%HAm*U z0E)dShSo)lE9oy|O(ty(IR0Kbi+-j!%VFu3fvHwcmN-5lRttIp=+w%@AqO%KlGjDL zeTd9{0h%yq$-D_J8V^_Z-}DZZa$Kp=Z-0J4WIEOg3+=Hk08DS1>QFePu(PW>Z_Kvk z_U9ru?4CQi_Ank3Ib7X$6K3!hX9iJcJ7NvB-_-f#{q%!H41!jq3SXFg zXNf&B`~Kre?*t{Z!YoIg> zFMvLEqZ~{|IY^^in=OJ=5~o*HsAW972ZDLid^_>(>S zAA0&fpoGj@U%C~+HJ*8V-1mh*E4Tj46)|XpXoy-<-TE_4KWv}SgcrHzOCwFaABQv< zSo#!eRD8r!*6zpC&WjYdP2*^m$B|%$&TWfJy_nEtiz4t5W(_6lxNc$d3id7(Y9C@W zKNmo%`Psw%;paS6ZJ8NhxDc13tgwsm2}1BP_%NOb9>J4rYLL2}V?IC%;?tN<2nEf2 zN*eGZ2AO7rdz)m`W1Wm9kr9^tDT?d)X}_&7|ECTi^WfT28XT4QaqX1u|1S4uV^-sE zvb8oqz2xu}1C#?jHoDWD&M8?+^{^PV6;&dgxiGP6GWL& zp^n$W1w1idFAPfYLOZMT%|%(QmHS%R44O zC;vVc8tgz^FC9}*Lg2w;FarJoVe@A^*zmHm}!=OE*>8B@Vn9G|@gHf1IPw)nFKCuO3hWD#W`FJ*DA$#=`Wd|{_2pWz! ztgWF>lS7;{gaLJ(iy=ZDPls(PNituKf|NM1SRF~JUL8uY3Rnc-Mm2^?EKoPR$D<2J zgf0KP^|5MM2@$KHs;GM6mo|-g9Eb_YNrhaJ_2A<~_eguJn$hpE@j#h2Mhci5bB;8% zb7&3~h0;h?iFSFTV-f}=)U8+{hCk@y5`be2V;MrAX13R^#U&zm*l03j187R=Eth!Q z)Zirqp1l#>fvl)eJiEq^`$y}!klG&`YTfpx@k77Z?0@`MBqShVo|W;;Fm> zK%@YaNJ?E1pPG`8@To`${5<9(mvvKsOIo6cHsyWeI7C<6mnr_}#70xyx3NB+&k12; zZ|2|j?yUqEIyrYUP)i*ko>LjI<{vmdE^kIq?0WX{G43Tu8#mJ{o{B4^w$Zi8q0u6q znqsEUDNpnnBAojiM{|HhhDOxP9MBXMmsbF*o*OPzp5HQfx^J_9>C!TA@@t%ZstQ_HI=w!UUNJxV^^yDv zoP7O@Po%FP246p!%d*vc{j2%-{MdrC`VacN~`5~KF9$tAu6?DVVfD= zj4C9C2kpqNsNiwdBFe)}OeqL=KKz4a?6nDUudtxRCM$^LoGDVyl#K`+#DLo>XiSsNSfv;q?}4iDtD2k9@WtLX!#wx zpH(cN+hHF3wrxOA1wf$@GUj|<-Sc?S5%QgbkhTDH}w^$Z!9YP=POsN2oe~N3l&Ce30nbLFPga(<#vlWrUHUxUuORTXk6 zZnGtR6!GPl8G%NXU^mXcPam=K=2U+o2q)n_yNtI?ABp_grQS4s zykYvdHhm<-(M+WVDJ77Ro!)oPSlafQHpSmJl2MT2AL$a%n?%A(x&-1EMZ)vD1VR@@ z!u~Gdp`5U%O9(NAR(9ot$Ug7OOXvx)fFj|MmD~po+(g1hy9DA0MZ#TO0#Sw{;g&9e z7(|h9MVEm1aBL z8OnG&gbOD6+c`Iw|C-+30^>(uhf;h_S+$+27=p6yzyJcZxl^(D=>;rDyAbj9dxR_b z)}mM)-FSmBN0#UDF^$7$7>6A9=EG<@fX*I96E3rd(OB=B52K;}fO(oZj8I_`4tAOTZ*RdFSe`8<*!1a0U*PlW79LQH8|e&gMmj@cgKuSy@DLmL@9) z4sbt(aCy4ZW#SQ$Fu>4%q?uoxzp)wI0E=~+<6OU26H=~csHbaD-HUZ_E?Vw0m*_Hz zd&VFKDd?OpEU@DJg!8!gAN`ZNeiKth0Yfn!%zRn6_)mZD84nykhM+Ki@uxoeX9u`8 z>ezB}`ChpA{v-E9g4KXF7W~DNJXX-c)RTPS6i@OBK2^lkX!&D`rVYJUhWU$CbNIK%(%HhX5~uy zPW|w=D;xkT_D^h0EqQ4}#ioLR&_fGhO+VuCqRyZA&_emWBLEgtXDb;67#o&ba*`zc z4^o_rww=NJK+p*p6xKykN>6ij2zY}-2Ba7S$&hTYAidKflmPrtsDW1>*wL<64ZyHZ z>AoCzoaouSJ&Rx%a5Q0e)~gf_8GZx>a4juV8s$&8JJ>U94fc%sFfosDbwY?v)zNI< zo+0T_9eMx=EYFTXan_;0@`ayg>a~CWzT)bxn!UjuOe}|cHT*U7u!2CVY_H)DX;Lpk zbl4fVsA>U95614@gRi&qD5CTu?%(J6g)6kfrObc*I!p=JbyV&ppQBftvCTh z|B+H3eKpR39 z6w~x=RoKF>^W`aQJE+ZqgqiT4G>lH{-Orrmu@w2X0;Y8}Am$1oNCIl*d8Y5P%~cHkX_h z*`MJ{(1=NJB^7zaMANYj2AD(tfpTvq4WseKx{1?(zU%C-o>7OUhLS5$%!9a2iaYer zV`D(YT;u6q(mvLc2Ck%7eNr*Q6~PTmGyPDmfWc=)<)-rUCzb!_DFDKB6qXl{+@AQ6 zV4GBNYIyL!M-E&W@s@fs6@3x^Wd8e42d-OPcoD8F&VW1$RGwomY3ZnISFcK+2NZW599J35@7peIGNdjSV&Fqfc}UD|WFFtk&>f zc3Y9|iY47?XWEB|$p3vG{+HN?Z=BB}SRmK0=fQc3w$vQ*k7%ucbJ0+1FAWDeh}2j?DM96h}h*T8bMSwo;Y) zSo6F!s|PB#CYnxIUj z_G@JGDjB#Yq!U!`|Hk}zS*ImiLu`|A7#D35E)-Z@+K2f6(`BM-`OU3k{4;zwuaFGS0 z;z=){pC{+qzd2VlVJ`Hz<2uzC47p=^=H|S-$tfuu%kDVjVRvr6@-~LgekmWF=Oe?| zHvPD5^GCY6WBPH&=8yDn`}E`X%^&H~()1(YUnXt7uam}sLH#ON!cZ#LzzM+p*AT`- zaz3LlK9QU!!Z?yMLJ`8as@58D1-XJ{)E$Bj8DvH{53%%&!Z}8|lZ5jgO;l9M|4%EC zN7v6Nkx#llk;s$KzlB6Tu^1#FdshC|>zyg76mv%0o+Vm)6NS-@!KusMInMtgh2%rVC!Uyf^(i#IP9mENXnYaf2JjuQYp zz9~HxO|jmwf)A`uqsXkR-@aTR2>~ypN8@8LD;?MV$V|>h4y@mvH|N^Vt=XlvUM?q9 z62phD*y*OFzc5q!3kNp3tkg41O?K6-ea`;3M?)OTCq5s2^nm7&swv)W*b1=Y5|_BL z5g7a_0l<8<+g(TaNtd=kB`4$HPzj z$6x-f!}t66;9tJ!&2N75@9?NsOjiTaz*!$3fAU#(-aXE-RNzn7sv3bhc?=-}|uVxmzcj)5snrLC$&jVj`{F2sBqNoEqXC5QY@ zQ#;em87s^K5-ddOvXJ*NQ8_iy2kO^<*^3oQ>gu69K)OYn8O{oEbSj(`kZj_hRa6^R zDlH9hEDC1@W0|NsAqCk%xs$g!`Muj3cT1uup^EM&SIed%B>3tZ|DT`wE#fu}xN7#> zE74aRNgaR;R9bW3mT0YXVepQm1+7ykP83I}bF@fzQTu{Ug%LfICT!!J0?J^!zNd5B zD0|npOg+7<+Wu9c$rK*eUftPW#ZaUY$ia-$Fp>jG;hZv7mi1&HcCt*vuN;zf#&DYX z#~up0N(Mu`h!{((CL3@dY#`4<=El07zqaNqFY1k=Jx>k;2XuXWd|Kq`f_Rd)?~A7; zo-T~1Z9GMI{e0PjCE}tBPvs&N;hy5p6044%ku&KXYWP%mhZ)%!k)AFPIFB zO=g$`W2n5qqdoPC=CeB64#5tHHlS^14KOulYux$&;}qQb7*oLat)_tFt)_tFt)_tF zt)_tFt)_tFt)_tFuYC%B8~1Z|K_zxk!S?QPf2+d}sDifiDhgfOyT^mA%k1Kq#nxY% zcaImg{<7!Yp7SJ+z=ZS}lyy<70H97)}WogiL&DtPx6 zKOmirORVN{sGZ`(fsN(GXc(K5L>HieJV;#XRb z6~DJ2WT7iF{WIak5Zmo@MOD^C&s8Dm(KDkC<^z5a5(|;ON+Rt)sPmJ#V)W4Vg{nyZ zfp*|9`acGkaH0vurKx_bDVyq5ctT6MtF+q6BVihle4huPaf%TE!gVD;h>Nxku+cJ6Id#bL1L z?OtADE?^e`_ze$p;$>f)cu9>7wbZiYAiBae&TeyARRSBQv5jHJR?B>xu;i$7xU$Cy zZ+4WcuaILBA8IM(thO8pCCz>lo7tS zoBHauB3!xO zvC=}HBRx_e?bKkVDrK^+R4%?#-{_Xan>$S$DUMhs1%0J=TI^GBhNz-9Z3hb-MRhO4 zqb#>AgBvbGoZn0qoStyLRV)+a0Q#|W940R&&1Hk2)LpzVF|q|SEfiwE zN8d5vvKU@+9A)!rK-2Kc1OK=$S_XC(sqFs{hHnF=#%p zj;dBU3HC)oG#6}e3%oG)6=yGW<_q>Wp3d`RhsAM{!Ig=%{S*#h+6kJGu?w%VOZXg~ zT+G}r3KSiy;_yqM<=HZ~cGtFZE`|&tBm|)S1KFV!|Ma4}{^4nFae}>@t4l4=)0dpJ zoizi;{VYDWCEI7_K;V2w7#OcgM$fSMJ5(RjYfpd|`J?Dg&~h+4TiJ8f+dNmjy%xVN z8SiPKz5kc+ab+E|lhK6qoc^>5WkT4~`eOtSU`^YEPl&D5k2j^U@>r)jruLAqdOBuG z+3;lMNFoP#&rheU=bP<56*zHt${INnFW@K#p^j5^)Z%%=9fTqFe8mo;FVnrn|FNWF z4d!IStdYRvz98rviQ(6QD2mOUqkIbK!H><)o^0gIYd+bSsWSXe5BjX{?4o=7Al#q~ z(}F}bLi|`w9-1?hcR7 zXE`>9n;!%>h9^qhd5zawdW{F()l}{fSaSLbOt1~XFPK^R z1c*^485|>~LviHc`w}jI;mgyqM5EGzH3EB?F7x<``z8#x3FZ_h3_@S%%M@#wB{bvG zof#w9Qi*wi16TWPvaR$u;tj1$byU5y<{7RUrWz0F=gnMsGw1y^h5(#nxVX1p18Tun zdGwhIrdW!J9>i`i4N?d?ks8Fg4uoOTbV8miO=Y#xuqSn%so4pVEB+DkKyPdM24+Tp z4N?*3W>}b673JaEbf6Cfm!tqxPFCncSnpZF>D)|qXQ4lOxd0tq?YhIwxo`G}k$67{Q@*WY*CqhGIjUwU0Taok>>IQB;PICj)GToW8duYF@O z27t-FR46C2iO5)7hBG$-L&AcRc)H`UDJ%RHJ?q8=V=qXKAY`?`hiHd@A3h!kFf|LN zuRU-q2{;SzTuJ%yfKIcVjPdJ%V?&a=`q*MJcB#E9l0+s1j($)0*_OXdRg+`i9*=>} z)sVk>T#ft7XrPgVlagzYw=vRViz9f+#qDh^R+}3WL{L{}<&FsKk7PO5)sn)p)kEr> z6FV7WvBo)(-HoWPA{Cml#7~Z7oP?3s`NIbl^npvdx2K+9)O3Kvwo9~A@(y$uGZjdt z0$r1^Ofc7k@gOoOX*|fZzkvZ6#BmI76y;0>b_a>Pqpep`BMl+Eo=fe>{!SoBHV7om zFa}9Q3VFtOVIKTuOa$VYsT5dXsC>tH50FT5K!hV$M0$i2gCz$H*Uu+P6lG%s+SK_5 zjDQ`srRW*`a(XD|XsnE)J=Ab}3n+?A4sZitEc-43v=l;KUvkSSK}Gpvb#_9MyS1RKh@ao*m1X3`YPT|eRkzNR5v z@{wmB{o!9)|Jwt%6Wm#o!A4XDe8;}gi>k5Cd5_jR>5)wBxlZN+B8B?T3TIMPO4HJ` zPVrF;ZoAdaVd^)-^i?i_Ws#M8QVG7FlrnlKN9gJ5@W?!MpuqZ` zZ5-ll@dS?^h%Ha84=TC2Pg}HbztqJ(_QC0KL9U29{rgZ=&S&xBBv&yZ>efFOde0As zk~oCR7SAM+{hq!zT(ec8VTDKFYr-F#(*Px89D~v!bQq8yPhh~N=P2VL6LG8Mck1!Q zO!ny4}0Qdm88rYPa~y4A^}K|MjHs0`OAgR z-G)LNB$hP`Qm;7ocCI3Vs4S!%$$RnxOQ4y$WFZlJ?DN?TZ0poi;ytRhyOk((5*=n| zsT*O0hg9e){fT?AIny3bs6OmFSO^jXoapWivlp2bgK5?ROb&+}8SChh5?Px4{=F!6+RS-580)*b1Ls^rMbKIqQ}@!iOinnsa+-a%FKCX6!XOJugmhspDG%P*go!M9SH}8iN zt6B^G?My82HCzO0;O`AxdA z34D{(t-*H=&^zahz`NHTJpRS^)~vd2BD`;~i=Z6zcb;m-g|KFiBH+SRv&IoZ*$AG^ zsvs9^&{~^iEjpMXFqx~-LcnaewefDN+$L=aGVirJgr1dBU6Sv#NWrVHSEP5)UfBF3 zK1LbqsKzzsRcg}HOkyePfdCEZN~TaKuo^T2M2^FlER5%&4mgi;6awa*J}!Y5L+@B7}pEIjbf66X_gvQE&6b&qxx{>c5-P# z#SFXC&BVr#J!V0<(@GITR>Mo#Lt`Dw9U|w&d4ykMd$R6gd-5e6SWKU63R?g~*<~UN z!wO}cP&4bv-aV-WNkki=RZm@HWknay&_TCR>R{>~SSHvAtTSClT(u+Q*FYAurtK+* zAE+e6n>6YZ-7PL5Gj@&uD1eF)^Cww2$`}Eafp;WsJ3FKUYz>}>;3(9jNqjwuV+{im z!McIyAAFBV#!twb#;utn0kXT?u`#$nYE=XX3Mg{sw zDptw0KWJ72fnw2i4*!=yg`uY|*g8$JdTf_6N@VE^iU2n;sw3U?-A~?{1O?_NE0&pm zwgumd7Oz75$ld7%xbrHH*fX7tQx8K_%dw*3Fu*b*0j(f^47jOWK0b9UPK7sA)flU< zAGerG!jgVZ%iaojOO+njB(8z5L((Yqi`1gl7CMwRa5y%)ZO;qJiF$=K8+a|43lwaK zrAfgC!V3l4X9+WN9hXa&Xk3W6fGGp}#<;$?zz|_nKVIXaPjoRLI+7=jpSVwttH{@+ zAMdV=$D+XXlgF3A7jG(IWsjqfuA$RrDD*g50tK>@LzKkm-#M4Dt$9&sX|b1cY@k4m z|0r`t3r8>3{9{~{)XD6%dim}zcHb}Gt?lVGjnJ6p_6^*Ve$36)<~hsdyRUB7zKqb$UK`oc!RWMqTWZO4=@j-OIZ87?| zVQcbR8E;4zoi1ulQ+Kw^^wWm&ugjm{URq5$MHIbDwwW?5wB-fXVnW&}0p&_u&<6Ay zn8k&#&3I)DwiyLtmZ1`S-nGSZaW@H{%%su|r_5}6DVrrX4dQ)RU%<&|RoLZ;eO{Ei z>(q?uc0y66bZ^Tr;YJs;u|<|DeMDQj>@U&S+1^x!M+wZbRJ7x-6Vom4iY{ezNizT| zEQ0BW@VSYd2Dcjkj)=9;&$v)xA5uc{6OaaHSD33PC}zONjgu9a6_&VcjKx-B`{^!e z1Ow=_$q&9Ufhx4BsT8&F)5@JOlWPbgp@2KSq&q6Zd}tx>@0gTNhi)cLZ9E*8KQKP{ zjAxg7q>SE3i2BAG2~qPIU=7Vq;FW9L0-oXgetMC6RU9~z$RCI#mkxN9qVv_B zwiR{lLFl6u_JOU~G_BY)tJ)Sci=??t?8}g6McVifYp;vfsN;P-*(C1Wjp`L zx4iweM3ZjHw{RiuZR^WL_Wmo1q@ARIhv90@!(H-} z@uU>~=CgOhKhIbOF?_&A8L$}eXM}b1f;X7q`R>(JxpgoR3$Z`?jY?1I5Xaca?A(66 z0ve(3ZH+hyN)h*U$jbGqo(FZe8z^p%!?8Fnd>waleAoT23{CkZW#NC19C!t<)I2v? z1Cxj8aZT3H1URqoghKaP6tCFrcz=jPdQH8&K=&{%i7biMtBVg8`goT>Q)(JQxIm|@ z1DZGl0VG`E7BuRh6a@@!;-I}Kp+arP* zm4$wd{pW96bH@rEiiRO&yEc`p77<~_sAZAp&95q-Pxc}tZz&`tnBl~J!JQ+fC-w^! z^)=uOGVPNtF71BXxX+oA<6uy zeNOUv$X|8$;OnmLYaGRl7t87e!q=VM*Eq5{`KogWU%9z88ckl?ldt-W@D=l4`Wi<- zCtsJ+S8Y~y7^bW1z3r;Fq%1R?zQ&Q#N!j4c)^J&&+*jyf@djdSVEIR3i2?|3aJ_Jz zANKHW%}sxqS2ixwxP750=c~HcpBvzzG|x0PRhmm@47Frdq2k9gdM}f?!3M*{`*CE< zDEcAJh8en72GS>RyHA&V-@X6n^?%82nzxe{TqbEh9REEt(m>&nuZaJ?FVf(0X3};= z8oNDCe)j>hgN647+iw~+i<-f*vtG-1=j*cMe`OW!|7APGIiltTh@77sm~atbBNH9$ zZBr|MT-gY(o5zvI_RqQ=bkr^qgpTZQQw%Y_h5`wZv`0dZWt2K2aC^w3*)5p9Cnb-r zPN9`yKf@U^l1{yp&w`T%JHFqaXO|bsZpg8+;pA9*X2!kPSq!J*`@mzWYUZT3^3sE} z1biX75+RNCAXB#1+Dxsp#X1k<920DB@$}IB^!64Prs{TrfT)OjfW^5!v5fiIIo6b? z))(9nJs@cD^o+P0AfJPqD5K-%_&L+f8G~xPmWeSz% z94WywCiOmsC4ggJaGgl|5Q6||Aq+j$hEHq<)mCav`iusfK;#$?+K0-}!1cUH9*%^+ z?fr|9gj(ep)w&%o_ZI&PumxpOjJ0AF?ahCWng4$a7;o|67B+?1Mz3>sAOO5WUb5Ti zN>~xh7EG=X#Z-%xH8-#&f*oVRh-%4tllCPci!RhGNpk8Q0Xwg-I2XbqlG8GwY8B9& z+P%ejN%VCwO9})|lpNy|t&KFPnRJwg7NLfeno!>b^Z@6rWjd`F*K%2{K(`=RB_H;O zc&Fo*Z{fJ*;jM5sgt%)QXZwV1SI~ho<1`=)_#z|Jp>UAQQp_?tBD?|xX;S2{EJKmQ z=0uG{u;XBk1bh3@c-K%)-9-jyJgDNcKw#Mi z5HK6l34u_X5zP>7$VdcLhvv?lT@naxj0^-odkPR@^!Q*1iwp!XzCf^R$>c;89EX{h zp6S;afY5%kKqzB?2?)G!0}1?V@0#}4-}3&DYeuhS>?H3vyeTO|>z!3xRqfJBfC?8s zY86CM-UydN{DF`jAs~7i;4#RWL#Au$pwpcqRYoOAzRyb{KLQ*8jnig~L=0oaOB|g& z+VlY@${5d{vF<#3HWz2lDrv4~+jX#mt;G?STC$Ojr~r^R=3VvPVm!$*xjBKP+Yl9^ zI|;VQTyQ@nf8JDM8I44=J0a72Ei|Y0KxN=c_ zf=A^<{&KCP`Rs)EAlTta!cCC?tJLLy&XHr!G{O5AL{O6)=t)S}KTY^xB;XQ1$pVcg z3siKHf--~@MA=Eo7a|3Lcari*q~Pa1N%?f7Kx(@b$9cs?^+OCU=|iaWR79r49h+V3 z1>f8uvPwiY1H82|pkk%#JT?iACwN?;-e6>bVAr~ zZnT&raL%Am(=u3quuu}Gnd!9LnOsj(xse;l$Ar1 zgoh&Gp_wf7-Z9LiOczO4&01w17_Lb@tO!zWnn^)HM#?QSDR)K6T{9^#T;zG@Ov-ws ztWQ%M?3>DqsyDH)z)E9Bnv^QNmBe&_dQV+^0I7+!Hv_(VsRn0aYy23GFG-JI;PEw7 zI$ZT_#-$fTI*ZoRk7^qyWT83VCk^_n07nWy>{0@J72pGIUk&(fLl(Y1spkMQ4NASLOh)e&TaTcVr8mnU ziXhL82wQ?E;R2F~%&$uG2FBo@{YQp(MG2V8?Q{LIsQU{FYV8Pxgz7nrdB{bak(wW_ z_Et5Y_pU*KP+aOQ)zpZZ-ZP>-wJu$$a#g3zWCrAm7j=-!uVnNaT9(z)!U}v`mRUmx zR_iVSAq&z=idpC}9BotG+4SzbzNxPt*Q@_Q;#RyUk)3*VaP4Y+)3+0a=1%}oFtgf7 zzW6#0q#j7v3>-3>#KLotot(rfJ1NPTI#Jyd#}4DF8981L?!`4Ta=5<46*F?QzQpx1 za+7K3f6)Db5fESz6Ra`AIEg? z5@GwQmRpH&L@y6_TrVJy3H7AkoSpiu=v3W)7zPm6aFae6j(g1gvx*PHo5A0eIBGN{ zoX%qVuv{`4?N1?ZBb9N|VOYt+JX*dwHy80GLfo+-v@ouJOKocJBQs6GZ?pbY36RZj z3)5zqA{i{ZH`_FtlxUhSAOe&>=^D)8C(6n7T+uGjG2kJFJpK=M9M>53TU-~AK-r2C zTli=?xUFO>lIVCnD6b%gk7UT9>C^$9neeVrPoMKEZU4w20%U}DHvqwdyzO7(ernei z;}#M|#Qup}1)2R2J(`k+wfx9-o!}ZTw4D_`bk5Dw)kBD-vN|HiMTDVFekC&f>q)Yn zB9I8G+YSzG9~Awvub!4FQd^=AR(PTjJ|b|cNzEyKo`^&mO=^0cxYqbEy3XFD(&nvr ziSr;nQdN94QVg(DKIA9M$C2WnIBnBKnn)5je0`GkQR0Lwj;Np3BaoK=hpbsNSLI3_ z=kYK>7?EgPxXj<)q|A6h{kFzT{PsXiyKR!l#WkN-Qule$fIh2sF zv^AgT0^e)r(ygV+@kd+qvd7v@HM>W2xSp&)40ghie+{_)KuXkL(I=bl{EYo(8 zpb)tA5{2Yad3XQ4PNa~w7!?ZNwA6Qnl0|cG8CE2kV~&76v3eVI{LO?jme<$2qvMoi^>y3m-g(I)5}12csexMPR~PsyUv`oj7~Y-~Z-jzsh>+(efo-+SjtG}M}Iz8Hf4?_pgiY% z$9iMcYCgnW*cGk(>4Zhdj#zADGzZzdFetbQb+h8YEXBsUjkS-uCF=sBddlfxoFw;T zBoz7l4f8R&l1{^cGDfbnWmN6_R^n>sxLdUohsR=gvp`}^#rliJ3Ec)-xMkaqI-RjY zZrMfz+O#)XuI(L9P z4PnGe!d8;&RroVTWUcO<9WW!r8~%p(iIh(>=hu5Q+w@$a+Ok-o>e3p3%L8(3JvyNN zXn$v1*bjldIyrE=Ci7ad;Al*V&TQ1J1}kePZrsK2OL7gH6pWf$wnVt$OhLcn{` zBzmb9z8D4>IQfp&EY?KEEHWF>*Pw|FyBC{$`;^f=q43%XgeXVX@y(9n;qc8GY0~Oa z|3&v{fQaX44BKD$`%wO+lNB_?!JAF(dHF#Y^m2Rp2p(*oI=Uk?)944c1$Q6rt|WmG zl4dA0Zdv=q@ZAp%jx7vqTr7!<>}MB%37QF^;7AW&gWk?k3PCVKDL{yBg#BqBUs- zmQqZX+6Cmx(HVlo3R+1lfY9>Tt5;b5FrBEITPa>dWw?hRP<^qKADvMbOka96i8ieim7EN7yy$b)j*(!OTE!Zl=PuVKI zh5)sRt%}0{q6nr_Gq7{sR~};qSwa&#?_63IvYkxzgvpv?iW8IQf^2%cZr@&DOq={y zR>Ss#zl0SU_=Tm18UkokFI~t}5xa_g6kJCzRugyreprD&Q+6>F@tUd61B}sPLiqtj zY8rd}A#2m)G0Fp-(1RQFDdF|F;uZIs_8Y#74PQ3%Ib`2%%_?$wus4L3ETFEgh!tE)C zPU8o_Mt5W|@s5mV2Zg1)jFKm=h$-{UxbA?-VG+nF*XOcnoeb?nc582erw5BKM;9Ug zE(RC}xZR;UG}GnV5B&D{Zjg2NoYJ4%7raWK%i_;u7ZYAMDDAu`%?gd|6wF0i<#}RA zdy5?j#Lk_ShxP35OXB~>{U@FMi~+@*2lefZ=adUwoJocmz}m*34KUD;ODYn1C&mEy z<#RBMEDL3DCKu|DX2BoBzh>fHk3Jho5Py9Mi8iWddl+~!6@Uo}HVoWG2vIroqD4a! z3oZpuWTxvBp|&#vvZC>ZPojcBjvqD}Nvi##dRG@0A_5TJ`?(LKNM(1G`aQ4)4>kWE zb#DPz#rC!hPwW6TsVIuI!NQ^>E!>LTt>+jZpdu{Lguw=Z)|8jc(?;X4b5{*IM^#Wj`sm(56-tI{6>DLRuj&3pe7hrxy8#M3AIZ zgskC1cLY{Cd6h&D5k>35(Mv-{6+eyQQy4{tmv!^JJtEAeU(ij?@RAQnn zA{9-vFQ8OS$SoV*JR!uLGL??HtOUq96#{BJz+^Fu^H7!qk*p-G3Vx-jVequsX2gW7 zhDpxK8&{&fHt*X<6S`UT^zWZPHa>cK-Y(@DluU@GO}!SNZIs3c>Sm11($ zV*Z9I*}M&zu(NM{Y~>>esK4<3=hPq`44vk%mFh+)%T&)u2FMFi&#A?L)F(%hOeGA4 z9nFxsE~yA3-2$3GbF&JKZG)jeK!&BgiSgdjv3Aew8ooChHIHRj4E$x{5%vaSzQ;Hr z7%3<8J*+Q9T#70!A+tZI4SF{(mH$b#q=v}fsFp}9QZw+D5(gn;RLj3^{6!-pvQmj@ ziBcR(3Z*$||7QQM3(Wpsl<1HGfw}`wf>Q~A*q3TF(qP~}%#=n_ zbbjb+q?nePSn@m~YU4;LhW-WWcGe-jaH0abAW`5`b3;lr)C#l~QRhlNprqBEJ97jS zRSOUA&jD7VPqMsx zt{2yj9NhZzc>&9Fv?%@hl8<_!z)W9f{*WRDIb?x_!*$s^WKg%19#ia)!mG*Q(Z?#F zu!0LDtWbWSV`CaFnzOiJH|QvAx{HPf5|U22P)5}qmZL5(qN-j)f74zWM68{Q1+D6 zG(?E3rb%a%lk$f;jy5nu6N}~r!v(SjDzQS^dR=WEvmh;w^iryKp_S4uR&at^FW9S{ zR%GquIdc@FKIE}ed`+^W4=vU~O-(IEctI}o(Zod7ph>?d1|jisUlBA)@*@YMI+V}I zIkcTEewf9EdYtS~p{%6wKIt7Mq@xw8MPW;JP)Jl#fiA)b)IpT(QgsiV)?KO&EW3h1 zeYe!<@+jSBlykJaQdY~5VM#<3KNFiu%q$ECaji&LSP}VYNEQ(U$}FPpjIiJ!p;@8Cm-nOnO*|*(`MM_MO6c;)`dD`Ke;H2YFR2kBhi4)LRxsf>f@hIL4(!cwZ$C-TBDhb zVuMZz5T|K{Y1C1Qn^v3-RUK;?1yW(J?A!)jflSE`v75W9>8HHw=d8iw{Q_^S# zl?qKMxpl?+>xRecgnsTS=#QkJOMa$5*xiM^48@rw91Q`IaP;ictR-4>iJk$7nsjoK z2xGcRkW|v4F>w{+80csQLO)+cyn+oL@E&&8a2$h{i{vZKcB%sqW9Vz=B|mXl>{;W2 zF89z<^GqxZPvTH+$}oJMDE1A?{E6$OBPcW)+MtNE={O0kl#R^7#c|ljXRL@-#iS%- zNIBc2roMbB2pnc~k?u=>uqIU+;OLiU8X}nChKS*%F#8C#U%Zc8ZY)DC(50Nk^)ZJII=Pl2r?tPYMDfbnwk1y5RvlR|60GHm8I)Z?&6dr zmAV!2-`v+ISK5dz1Qwlpn#t7n!&8>P6cZ6rNTnhgdzkh?Eu6e*AvCOmypYEsQs2Xk{Ta=(9mGIUq`bY~_^wnlR{-fyQQ(5#?jOfpo;$|p3gW*LC zy2;5XN2fa?5GT7*FB_*rZ!E2+Q`F|Lj~LEAk?vZ>^a%ulu^^c`r*z2}KcV4ojN@V_ zW27vUD9nxOsjDIl&A=YMClE=#JnRR6R}PkuAZdi}mBGAk_#}&bOTLl|ir+<>r1y8x z&U^M#v>}2P$;LEW+JNPEB>=-8lCV=R+h2tpk;iE!QaJ%1CsQy56yEq@+B1eQY1%WS z>ep${QWGATjYJbAA>5@>7ea{=)`~){6tx>Kz&&&Czd2j!0v!*CQqxt6MoJ!7o7c&Yn9*4~UWS8k0nJgG?|>dnvGIDW}*%w>UabXfDLxMjQM~5r=_V zbaF@=0a&67c?UH~Ua(Pxm@qU+sUyYbFHuBhkxdxmq;ya$A=_y*kre;v>*?jrNt?C6 zQ8nTkL8qoI38@>0;0hu=6Xl&%u%!wzveYGmJ|sjMNigL`Gz+BmgryG#c1t^g%%t$j z8HuM{jVvtrhyGaUl6g#t(ur;y+(vPQNgdEJC_!Xyt5e0;i##WY8l5Of*757;U#GnV zY0ns>hA0L2`dK_xnV(`$G(ktD4ae1bcxThYS!uU+J?2{A1Iml$Jswcu{)4w3bN}Kk z5zAXSQN%n9i^ueL-~}2}{>5W&E->DO$3z`^(sj@1soA@XpAt}MAg1IQe@HvzF6_D^ zAE1j8Q(nx9GLEL;Rm31Cm3<1VKQ^OUm|j#A4?aCP3^fGXOVDZAwAlpB{i9NjkRy=1 zV}uouH>Vl!OQ9=i7jg+Jx6zcpY8SFEergy0T*N}%AngLa`D+o|J1?+O-6IDUQYWeD zbg-ZcMAZ^XkwS^Zlc=QRP(q4R_e-G^b=DM0YMjZTB;+E6l8`x+F{Bdkx*=GeLphlS zrFao#f>bvni;xr}BSVI1G!vsB<|kC5{rUvk!~gaKy*wn>G)rFUCXJCL3u+Tnt6FMJ zQZ6ag%(W`=tQ0ELlJtgZNzA#HTGA+bwD{3+uk=_!a}*GMbDbti+Kwhn$}Dm}D_+Ao znpQ3^<)<>0Dy_8gkUEtTsCnem1!w{Uyl!4#L53weFf)f5vD8`(qv};PL+%Tn zK_}b76H2Uu$F`Vs)|U;me5{A1Vo#k0Q>rv{;cDpIEGWjL{bRpTQq`gNlGbYmDk$<= z^>otAdmy&RQpAYlHK|-MpKc-dAELOEql9KGz!KD@_?nIlhN_AO=0)Msff%wCFr*b? zDC^{vlNwFZKV|rel;4HF7DH4h+3M`55E3|QUhBqF-gQ7e*KzgGkuGVhC~uHbx|KP2 zWhWN_Otu~8rm@-jRQDf;=EqZHyy@{>709IS$c0lBPgON(&NR$~<)Lnp_0Zf&!hixLTlM!WNPJ zZ6_5I5I%ZdilhY@he}663LpN^N&Hlgd#-)@07u~?I%2Hfi{?BfhBT9-g z#8qcbDkxA42(kjhL#FVfg8`xUK@Frgd8(RO1*9=!^KvxAy0i+;oJA!egJ95snb6_F zNN^=-HCr#hdi-ELgqzeNMr6q)vjen0mc;>-P_)d>?0_U-RCve^^!e}RNjX27w>qA3 z57~{B5LqpxMypf=@VdLCh?v!rJf)A*gy%U&EgPxXjaE2nSRSe`MIs1}y`ey1HJ;%3 zo%Ax)o}>)JkgaS8?}BvTAZ3&?9rGqJR!HzRR5C@+Y7Oa#Xi4%)Ai zlo~hqoNiK~6BwO8PyKlCgyp#=FwYwb z1%la=87@G-89W5kYBnEivI0Nz}J6eVw@Cd3r*$0228^8(k6KSSOqavDZ0-{`~ zDNv-qj1D?{3eWL8$I*XW@?Qx^&p7F#H@GAd7K9ghkA5QQE&C_$8`&oME59}a$zf_> zOJkqt5<+UZ$1OkV(=^t;u5P!!x3&G*2ti@><^ADqKq$o)4GyU+1+}>5>|#waRi= zuYgvnrhZZsj_B|-i7|0f*P`PCK{lkWRRiNo)S-)wirv+OW#TBY1A}R zSG|HhHE;NAz2A+45y2k&MRE#_Q9zn^tj^e*ZVAi&bl6EtrRPa@ zTOQYB&1T@0m>2r}ZsuT+%pe%)KZ60;c$r-HKf*+Abo}dl&O{_OSEE4g4B4Texn$LqiaV-u*rm)uLaLu4-C%-{opzX=g zIVHjj_O3t$@$);JTJrmMkUi?IH%W8PF*6%|GHhrO9H9X^d8KgETrDMRrSO{F)gt|{ zX|L2(DeAa}=n<1dND%{HxFp2UM0|>){uEiTEIFxP+&+!wfRku7+-it0EKgB!vylZ% zPSh;-d{P!f>dBcxsm-^-U4@*15NEmPr)rJV>~dl zW-c)>jv|{AU1kEi3d=%p^d76WA^`ne1J-O;*9(9&#fSJ;R7_5ETr z5KW6aS_~ZF3nlvn+R->?(fkDj3SUU|j@bh=4Ei%X=D>idTQDb>-#DZ%}w!4_B(KpJ7DL^YRKv}{v`m~4q+f@GUEL)Y3YL4SluYAhU3P_Cg2 zDwod~XP^=q8(L>j245n3#bzF!2sFVL9CP9=!=N0MiE>C)j04hV%AXJ1?2v6Fhd4>3 z1bczwQ6|BGJXd~xpY3LcQCo|&AnsF=lP4=kXP1&;G3M>j+65XGqw~Wp;Trxk0pzer zv2SC3TC+B^d;~%YC)WTIc@cJb3=fqY&Y36K4#6g^ay($q40zZ%QFnTPE``pamuKmb zk~eviJ?8TP{CMSw85=q%DO3nck;}dN)fbWsASu;4Bl(sF@yKs>DvCsNl+#0tFEQ9G z4^fBJEATZW(;Z$64ZYjxn`V9M8kv%$nBBP-Ld;CgWoL#;Cm6K3jPn69a9F^I3Q@2i zJ2Tx~lm2u6e}q3nsvl9dU`HKHvn4Ua3@!>QRAOW=n=EOb24;R>l7<$OG~B63leUIC z_g$_P-EA}6?JdC#(b{S?=}X)l;aAonh_nNu=$+*oCwSMv{E=17bR-0qu64vA$5dtI zOMo}Dv~f4~9w7-A;(C(n+3xn488D%NIopg3gv?!&Nuo(fi6$HV$p1p$Hm%dpW7x@% z%+RQtC#E+XeTI%q;C01Tg(aLP*rd$l7Hy>12{o;Wy}7;jO?oO;rt2YKy1OkKPnqua za1<_JclW$lw%VVrb$~C@-ECO26sUXF$KD{dFz&3oXAUuiP-~x&5o!>t+>&0yqR;%F z&iA}(?8{82gh|&bcKm7=(nsr*fv{@a;I1~GG~WgXIk-EJDBuLs3>?g$<>3u@4w91Y z4y7sI3aPZRl<~;MsR|k`r?dr(L5_xE!)ZSqD%fpnv%{m`%o%! z7G>z{L$LzWqy^)>TnSLNG*MHU+#%1>Od+9Xe{?ILrbj6aN3}M1 zNm-xonWz=|Nr{?4VRp-hQkd$>5US<(b8#q;6*1^4fp_5o6-_7~?4VKoj08ES*YqL?(Q`?ZkhubK}6>JEmzYs%V!o3 z7+mm~!KHo?cm-ad7$)B!C;E-f&eUYOp)RvQ@ei-rg)T_s##Vb2I4tug!Yh3ApI$-B zu?y|+@!P=?eU|Z=Kam>;hcq^F+XYP%jS6YySVX=J)u_SfseD&x?6_Lv7jJl%ymI5p zE6|;|T4{HuKTpnC^~FV_q=u|U!RgqB3|66{^`_bNO&P*Tf~GN4@s<;b<8k-FkLAAL z%{fP|HSVj-?=5`mZ+s_sY5cs}#7D)&dqwpR@8jhe5gyk))+;Wmdvtt4+(57RxCpQA z(Fr{gyLv{%_O9d;6%i5O8ypK)Z5Av_^E zwvRS0Dj_khPgJBfypJ|2E-p4svJ0O|@rPxrTo~LcgnKRci~RRje|77f06%%fCB`R2 zcm)M@^9ha!hz#!<=o5h02=WQ<78u~|8&%o6o1ahRs37m)2>;+fKQD_t5wUSmQt)7n zSMS(JSj9auyEz8os|GhMd@MMnr{&w9af9T*hi|j9xV}kFFu`$&f}<1$jLmXwzx_cjr)+W*Mi13IWtsyB<33-p}#YKfDM8)a) zL^kNtH!-1Uto$k}vRPsRc&lE~5mD`86MIG05APqJ}c| zD=M;zHcDHgx;7!aYpP|5baR;-ToP*?0z@BGO+15RZ~pzi~Y^c>kW=hghn{p*y<<)0lKf2r;3fkNiT ztD$ZE(sXs^*j|azy`9>2-{ezAoniuBy$%j3`clZ;GQ+Cb!(}7K-`jQ4z2oFk>)Jot zH*@awfL?)9J#$TyL+g#&_WiqQOM$sh9#qp0pR%sRxrvQ(7k`>lHgr?5AIE%#`^>!E zQeSlV+Zsd1cdz=W^O{LT*XbHA3~0MK;#!ZU?hg{1)fgi@Sp7$X-At2RmOYwNsirBuQ_iH}MaK^B@gq5Iamk*Gh2V^4W7dY&t3Bp~ z`>Lx23Ohf~-F9O6y2)$%Ei5_2aqbqEoWm97w;rCpkpGfW-X~!dgQbs8~2==@TTMd_XRJyxFq%;KQm)mV5fY}uYWYy zG3ryn4l4&1eSER~`atW`K9jB9&K;!*F>XH5lk1+7lXZ7rtuRiPab-g9R!KFdHaNY$ zL62EeKL0uVMkT)Upn-EIj~$ru`P$XtTUKAa?|b%4m$1ua&J54ESGD7)zWeWO)FZe`?qhQ`m0m>*PI{NHn&N@49A0qD-60{d)JH)fByNZ*U66y zX8XjIwaW5N&Dz)0r{Sw=k6#6z@4P;LU56Q|qrS|Y9_s5##yu6?F=*xn4VU;JoUg&qYVsP@t9!GSa2h>Zy6<(yl_th02 zjSKENf5+v(PHT@<8BzMwsD!Iok^R0dy0~)mtE?v5Mq9O7*}YOm*Oe!`UkKZ~wEC($ z$s?0q+D&X#Fnnp-ZY}yg`*Yx#FL!@#Oar@tGz!LWbi%HzE{6{)^y z>4hJWu0BWKEI+is5SBGy^^{MCs_j}^;PTe@pN@Q-P)X_JGIz(jH%WCbcg%jgw!F(6 z8^5;>YX{jc9-TZhf4jmL>aM)E`|8@oquXDY^IUbhWa|MVO;fG1E0${$Ieh!cHv{5( zRxk0W#^>^5yN;edY0_r@^10oEHv5z~^yz!b(L2LGeh;eVRBb|+zCraS6ws{ipQbAO z=ElV9Cta4Fy|nV%n7zd&iZ&O&tf~;zH}&+GgiBRJj$XKX>3FKm*#XB~Y;u>KKGpjW2%7M(ZkiDDcj(z`l$BF_DVV`H+S>|*z z-_Ff@+d5pC>eB7*%ULH%@5xylGd;KJ+vtO1>hAnu6QkHtuKkl+PYynCaQ!-YdV2iL z>GwWu**UiPg`I^y+>37$H!{B2?6h+)nnpG+nYAHxS=XVZdab<~x1v+dtV4~)HFNr$ zGGyzbHA~vWWzG*DePwjwm^!>6|LCVJpU=|i=d8$Bu|(gZ>hSYN>OZNTf7II%Uv6}< zYu|0nk}ctZ_n0otcQCvUzr6Uwh*m@T>^^yHa72$HHqlw%E7fpo zu{^xsf}IniA3OXga;VJvLwBZsd+>2*|0*#ZZ}y(k&DnZ%<(A|24ev0a`~Kw>-n?_! zQ8TFi%^9z5KWbjrHQ(-T1&Tkunm+4U*csoqqf2$3x-;3ddgZ!p+n$7FU(Q#!J%+s31%*`9A9x*5Zsdyj3w>6levFtZ92t5s z>fK)d+Fv}Eh7_E|znEKP;@SDRDUtif_B}LWQ0CBgZOZJPnl`HGtd|=+w!ba&V9(>5 zo0qKFc;iLviDq?U)*qjCYR^L#)r~5yrADE-d~;B zQaxlz=-kW8rl(eVa&q{n$vYqKT%2`x`Q|buR;bs_KIfejf4tP`&LgU}o${m7@GqGs zWBdkwFTV9u*65V0JIZ7j13qnh;=8ld;!vMX=^;;EADuBYVeHv1tG*4*slV<1&FJ|> zh57C`T8186a!|KsO83hjmKU~;*&TLdwnNw{<@24}v+@Vks8_Oksn@m-N89$_A28$W z{FRfZ_YK{3=-{;YooO?l?%q|k{>K4XQ#@8SbbWXE)mGn@x3#@A9uK;-8b70?y2Hf4 zXKM$(s=r}l9rr?W$`-kKE2e-$_P2Ld^M=eXBI)xK$?3glKVba?yV_}2@X6i;0G$2pI~_oAjX>8Ggt zdF}AQ=Z-!InLE47yws$dle33@-M_5uh4{DY=gleGKVs#~4hM#9YBeO^o{jzPEbLL_ z>T`SbnyzmB%1k?dyv?3yyN%mbRV$P~?AY%`GS9_J(_4bc*S&hmr-#sI^&bs28&VJU{Zd7qgPKvMIx%1a9wK8i|o#+4g z>xGl{C%KUywv92=A9io*j`InNZZ2%!zqBgf(H2METwFh9*4I{56GP89@0(Y4{Ir?e zyxs>kRs6a;nLF|R?cf^;&C`p`e(CBoEz;`o-euu4w-0St{FS;>v1yauOq(T(< z)dP0^dB4fweKTf0xxRK|m9ImJO>wx^(c1r3sjd0#w>GMk-}CNMc=n!U9KJ-$36`^xs{UK^BIful>N)+d~W|)J};X;SQ_HI*HHSg>!fCd zU+xP$dv53Xx6{@uMP=EeYjzYqR{QA29kU+y?f7DFj_zt`CDwaUMprNY zdv)#z%NAC5OS?L=w!Ly5=?=&C;L? zmv!&@z3djTWK_#uO_$fKX1k)B`oY=ejn1A+4}G1IZ*t0r<1>4>U;W^=q{<%QWm@cu zQ&v3>mF}x~Y^>ux&!tS+W{a<^PG0!-o%^x0%lA?%tb6%wz$n|wRU1#Ae|h;?Q-cyo z2PaH9G`wipf*;#expB7Nwb!#>9Y0rlQq$*IWpfW-^2v;N{k>>zsV;Ro&j@@J{AT-= z#9g7Cj<1SreDP_cD#c#xb9gl6_SmIM*XJ*`t-zWyP3EdwY|*MDpnZ7gtm%`tr?=j=-3XMGVe`hRudFG*(eB!Xn^9|ACs`dE*)pVU#-@`ymzF)d#=5iN$(f{Z&Cx$PZ%n=tJZZrD z#9Qf&kN3OWdwTv8U8>|XY>?DGckrYAIh7i@ESy)YU#;)OIvwVt?4}QhO8Bhp@@!Af z>>hKU_kYl{&fA08OPuE)DY$0K+b6G*tG;P?Ze|IO@RO@Lh3+XE_r02PVu2U!pB7nO zF}le#&-&5v4XC6Ghw8*#Q z-2LkuM%6XNWP8tTwcN#2_wA73&(8Mgl2%}Sv-c?t2fUp(cS-NeqHWgj$+p&~BFYyO z(wm(!47<^UKkT%4QSlZTy#JNDN28Wm*E%@i+Se}Xy3rllJ)IXgZuTLsN*M=6#SGm# zILZ1$<%pc-OWHx|jAm`9!_l(+j;Td4JFKl{<^S>UF)m z&(urubn8?^M0{Ceq|T6e316&IlrmSQ`e21B5M_M z$#A>1dsu_G^@^F}qVL?azftGM8u7}sY0a;GyK?Zz{6D9S{&RHY9V0#j^!TvC6j^dZ zsPOiDi4y%^_YC(R`E>ckl}C07OEace21ORWu<2o!^toA!>)v@&Rgrw9O*3|N?y}`T-;&pIi%D4A*rR)f^YgA zoWIQLtvcVq&BEECpF|Wlwo38zap3&!?XSeXY`9SCX!R4cV z?4K7_zq##IZOw<#ZF*j=s=3lGA+c+e^4O@}=kx8^cQk0l@ljW!`+QTKU$~`=Q0LF3 zBT~aQ)+!j+WXZCmju+?WXiw+Ns(iebP|l>Qq0NfU7`XU+lO7chTem+}H+)2(zpdx@ z(?d4Z$~d-nzVT+K>EphyIcRL@|Lx`1wjb}davS{dkAicqtbE>K6}#r`K5%4AQKx6=&U0^G+GI2Jc!%Nn8g_27t%`Sv*|)Z( zKPWXU{?4j?ODC@D=P|RkJnY!&{PmSX(u?}7tmAmG>7%LIaTQ*S4DYnPN6hv|OLu*GSWES& zSk9-UoaZCgUr6?Gsr9JTALqF+}E+79)W#y?`*lb;<)%bx^ z4=-tdYW%CK+dg-5$-eS&`P8`~xBHyl==ddj@{IAOTQfesy}n?337hKQW;%v0UD3F4 z|2@uaCZ6wdx7CY^ZN5F2ACoX`K+o+rM~rsbQ9!wLTFGaZA5|K;ylTNs%E{kKPC5B! zv16ORR`ko-{3z+J>w=ow-%eUH!R^qwC2Qhlt$+UUa9Uf3YB%~7%5|AFE^6$gJKq=P zz8tpNr)|=xAIpnhzUv<|y`x9vQSHRKJL5kLUtTe_-EzmbCC)9_{H1%(&-q8x?(&I0 z@?lP9{sH}J_4f)nb?uVf#a6lYM)k615zd`XENYPRU`U6pgOA=!DRL_|!}VJ^pQ+Cu zFLj(BKlF1%iJVIZ&fWS@Z3W-(gK*Miw3V*U>=Anxu4s6^LDrHAqgpJiv*1%6xof2+a9uZb~7_*NZn?I{;gytaRA6e$J@41f&o=amlhaC3KSLMv8vnvL5 zZWNl_{ZNa-0iD~V>-?54KD4dp@fHUrkMWBb_2a^|U6;7d(-)|lJ+n^n-+Aan*RGB4 z*INE*-_WeHr=LHaQ|b0vvF0PU>?G$oisqeOyg6liS7qqEE>Bs5Q^po||^|SPI^$Yds`X%}m`qlb%`c3++`W^b+ z`hEHX`osF;`cwKG{RRDH{Wbk9{ayV7{S*Cj{VV-D{YU*5{SUoC&lwa3wZX<XO*45bYoh6)BRgRjBg5NxPs2r<+))HO6PG%++cv@*0a{9)*12scC;x*K8) zeGL5!iH0P@V8bxO2*W7DSVNj&vSFHGmSL`8fg#B(XiF9!?4@1&v3wS z*l^r%%8+BYV7P3!X1Hm%Yj|LIYM%lv6iu}v4OF%vAMC8v90kBV<%&nG1A!G*wfg@*w2_? zOfn8O4l|B0jxvrlrWq$2rx|A%=NcCn7aNxtmm60Z*BLh&w-|RAcN?>e2aJb}$Bd_p zImYwG%f@TQo5s7w2gb+7=f+pYx5kggFUIdigOM|dCY8y?WM^_TIh$NeuBPH9H&ZE- zhpB?e)8uRNHwBrhnL32X|idWX{KqeX@P06X^CmMX_aZ6X`^Y2X@_aIDa&-gbl7yvbkdY#I&ZpU zx@Nj*x?_4^dTe@TdS!ZR`e6EE`fk#js5e^0*>HB~_jl%8I9IMX=f;)d%5oJrPmEmn zb3t5HE`+Pa)!`a&jk#uAE3Pfqf$PMDaS>d1^k?_x`f&-|0B$fhj7#BCxv|^?ZW1?* zo5{`L7I2HXOl~pwZa0_3?dJ}2$GDSR4tJir#9iZVa(B1~++*$;_mX?d zec(QG-#I;J;xK85x5lb`M?OFA!n^XtcsITjUzV@Hd-6WKKOcmnT|@Xy_%-CGyWz2mjA$i=D+iL-h@4`RDv}I zy&Q%7LP5b*D273`QbJjwyx=ML2!2A4P*tdb8S!<5`a)x&nb1;bD|8S#3SmNo&`pRI zdJBDpcwvAr2y>!Rgj8XSFhQ6kOciG0RHOOAVj)vlCae006c7{`6ciL33@--5`CwQbjL(Ac$TB*VH?q_xvA0)bRD^H0UI`dZ>mD12A-mof zF8b@ZN@O&K^WwGDw0_?0F`iN!@pustN^$zPwsys+Pa;{xabscL5$5LL?v8t0c%SZ3 z+NeH}<_NYVh5Q`ja@u$r^r6&2igZutq5Z3Ol03UcCv=ftdz6E>0x-H)%#kYz`*rxy zIFE(b1}uo*-}=)MdfBsob%?xKNgJOK9+#l4R$X$&VlRy|k~{xsFNP+&^`&Ugjo!1L z)0`~&E(D+8DpgauaUJA)&B^k8>>>Hy^P6-}PW7bVaOd(xNcYsMv!#2~nKN|Pc1ag% z;r^_D{Xn{B&T#FGd(FoSyfbm1QvC4VE4cfW`5a?gn@heIIPj3JHkW>FR6D=^wYlR> zyZ1h@rZ!i7YS^Rp_iNWo+m=*pLxIrdZy#KFqy||n{_hAR6lZ8Jp z^M8y-dHnNFPfyQI9wi((4ZiU$=P0FXcW^ktIfC2cUL1EC^L59aa-AqKUxtiA~UkYa@Du$H|2ShMucxX}mZdhT@|mqqJHN`XpXkjzl&r ztS{^nV4tTa$E^k~0vv^(Gk)Gl$Om{v<(9wLb2R5{gQm^eb?Dq>+@#5yw(rP3aP-(!r-Ckj zcKq_yXiB#0-S5s_dxsKzVv82*GIZGb4SV+fDCknWMBRE#o3;O=W9MPRw;j23`PRGl zpX1^uCnV1D>QctjYsH2g*~iXay*sbw>^a_(OYA?8V`|#$k3ZE`4vuBL-n{J-8(2N0 zR-GwRjiy%J6OW%bcmCS-r$!Uk!MHDKhl(qKBYy3Sl$@j#DvH`zi&mmq6hslHM<_*&inlMItRgz8RZ2&7JGG!LVAotx8x@Sma)imLkd>EHB~k0>=8&AG7%{uBroh-4 zN-t$qwP0V!I(bW_1l!~*uC~f#lQQ|P?HfBWb)pz(ozl@cd8bwKsq#UhjVj2hu9dAS zK~r4(L(#!Hd1RrYHU+I4E0V{n)-1JkQTSviQf`z{+bWgG%bZerJ0^LQSK;kMMe;te zi0ELKCugpZF`9$Hsd#L9qYxm-f{jum*ee`)Cn29QzmqdxKyVQX+Z9z7vns{+6k~+F z!g=A6?PcpLq-XH=l=q=!ywSc>d=tJ45M|!BY}Fb~n@wJ{Xt7Fd9ZPodu z)f(NRCr^v*^5*RyUFXd&>(ORmdd8BaD^{-Cz4x$6V_TqDm5@3umajN{CS6_F)xC6$ zkRwMG+LEQqcvKFmQomv2=B?VaC7}z8i0T#-pEPv%_@%2iY}|it{f2?3`@~M~>^@j2 zB8|F*C4^%20)U`Q+8AQi@Uv4=XWG^%^L((wyUi6w6aMl)3T|DRr$6> zon5S(DvCSQwlA!N`N6cg(;2o&wDY*a9n5>PmK2k+o(H*$Wr zL{0MH@q1IfCZ8WsFJsq;V0C$g5LU*fu8oH>|A>u$Mm16dtDS06QqTTom3pPTb>`QU z5%z%nQtFALYB>}b)x1LT7$U}-C_}|0Iy=h8o+X7hHp|&opR$Gg9>T=1aO53EW{!#`f_KA*& zjg0c@8yAf^LYQDewR$AVPSPy~;ckb!thvagxKyIYYr_*{jS`xKM5M_!BNbY1sxpl0 zls}!z=aOFBR(r4b+ltx><-OA@#4Zo3D6G6!v3TyiN}Ms>f05~)zkv_Ox~q(UQg-2i zYwYg_c@=UC_AVM;_ha#lhVOcYH*FT1(RATnw`Ni2?>FOaxHaeQ-EZN2KfKke2N|u; zJ-gpp%XzkW$7i>B=HbYBz@IJgtAQWams4|MkJlRR!frA3^qCznIW^tn! zT2=}kR`XVT3+xwbYt@w(tTn2JLJ`=;^MUp}+*4}!Qr3Jo1)6I(cA~JL5FN3Dnjoln z2OiB!v_Xmq#W6*aS6lH|{Q}sjqJg95h(&yd^#^$6_8?+ z=L_=oYEgN}ih|%mF^SY6Q@rpJ{!!sxL}+70PkK@;;BAzMWK?q2yzm)m4H@94z%2!) zqk5>M)KLkdCnA|sBO3UY1qC(PHb?~r5YLbPytBcWWFjTVicZV6SOPgb;%9}=$eH*KLlv0Y;^ zL2*DW>2DpHt0==Ji3t+x7Tzl!TB=ryR!4ccZR`s_xZ!8v)JCRo{H4?*&9iG_bgxKE z^+cStHh=#I%>HfLM=AildPnt+=t1)iwS%=4wc5cpWIx3Z>E*%rRl%<+eifl~(mQ%i zKbq569X~3YhH8g;c-U05>GUVZ-GaNMN9TvaPHAl6w&2tj{ab&V=S(_QaO4WWOljOJ z;6DDF++K)}O^l0(GB-BOElso~BV(b;lhQBER@6pD#bc7FJSS8x-7Q9`bol@B;&jul zp-EYpN{#<~LF4@8QqYCt2v6zzRIk36cN-Pghw9Iol^nTZuy+K0l%Fh|80A#|^9-7u&l*A34|k z@?MAc9_7p?T2c3glrvk!_Lf1Lgl<97lm6koq9eN`_C*UjigGgbas1|1E%1$KU_y5g z^0{c;vPy)x4XGIBrSwj(Tp(TR|7~e{fbH^o0mXB*ft>MPE$9xlc^kKSrR?t4TVo&I zz^hP3gQ|ty+IknwX#26a+aKP3_dC7o>DIYfYTcMIcgWQ0M72!{?40UaU| zIz(jdN4F@RTOaj~H$|025wGD(Lj3EY9-z7a3sU!^=I5_S8kLQP zhj|;)FRXYQUg3tXB>h5zZ}~!npj&venuQ%|>MFbfx`Ok6Nw1&^33>(eh2ng5XcfMH zqflbqPbx2-jsI{dqcnY&svEST4J^G^pcWD^PieY z5#CADa{bSxUV4N28dU1qP62c>Mi!D($u}JP*L*5&ALlE zI;7I`-%}+Q)mjxSk#4oU)P8HOqBeicHEQOxi-6BBM~Uty|&rLiY>T z>=W+FUCMA>e&xO^_dKP9_xo`7@$Wag>s(c?UX+!1r3+sI!vqS&Ilh!yD6S0S(eNVG zj1)0ax}5n|`~<7zd>QLFilqp!Jl+CsPX8& z5L5~~Xy@t#Ny4Hiw?l?RC2Xe)YA>EBlu8Bfq!k6ukMn{GJ4&Sx1zX8A&NE-})NW8! zy#?#?(44snyq&r^hrR+1Vc?pFp|#7Q(aP1tzcwgRpk7P6_)nEKG?`5laip-@|<@V&wKY1td;rrNQ~DY4`_-(|E8P)6C9Px;n>0P z32H;^+>g#pPWMhC)N34pwKGrYO(;ktr<)>?Iv`P;E?pvZLAr6ejS{H`(w)=omq>k( z9;j#~(f}kH?ntB|NKd#U5z=B~;LbC0r!hz`xFeA!Aid#^M4E#1fjbgu1`-Q*B+?wD zFWiwx3y^+rM(w zhC32D3i1T*NaPsEQ@A6M;~>xA&P#IV1juu^BaxFJFW`k;o;GPjE*fmq9+m z9f@24`2u$&at-7g+>yw2kneEkHMw&Ga3536}f@@8+Z-6LV;5;bZe<1#Hc58(8I&jNNAQu6)4x8SV^RfZ+v!T^L>nxG=+!X}KZ{FA7|Y;l+VVFdUhlb7QzWa7l)j z0xr$)GQedS?g3nm;pKrVFuWpgC5C$fqd3XCyn&;^)YQ(ya?=V0Z{{O@`}$Ycaewa45s;0M})BJ>dEbZwTCo;f;ZtFuW;nGln+@ zMpHiTY6;wm;jMw&FuW~rJBGIh?!a(by7wo;I|6rNIFv4~3&X>J!x`QcID+Akz|dRs zu5Q5H8Qudpn&CZxV;J5GxHrT50LL=CFK|DG#{tJPJOMb7;r)RJFgytua~|@pf#8Ff z_k)3lFnlQRFovf9w-WL`=SF~!WZtI&k7D>};MR=!G2mmF_v3)uGVjNOw`2GO@HEE! zB;eZ&pA6iAF+T8rW6bXa-^IM&3!KI9!@x%we&jcP4EzN1{`hbF zB=~9O{i)yh8SotD{aN613_lNif#DZ{FERWw@D+w%1-{1c>%cb{eiQf>!|wp!W%xbd z`wV{o{E*>~fFCpb3Gh>fKLdWw@E5=@8U70RHN)Qkzh(G);ExRd@EiXG{+W6I1$ZXI zzXE47{2TChhW`N0Ww;*Lz;Gk5iQyb%1r3_K3k`V=N_^g>09GO3|xTW1%X`{PRqgzGu#!p2*Zm47h`yF;1Uei0xx3X z!yUXN^S%^tX@-{pF3WH%)2HJi@-A!z&sAV}Mc_&d_XPH0xHqs5!+n7(GrS6LRK+~& zxvJpRnD^Cz=P~}T0p5)GIUp%?Wt>qZo+IN*4O_Xi%p@ZrE889o|#EyKqGuVeT);Pnh254?flX~3r$ zJ_+~?!zTmhFnlWTCWcP~-pugnz*`uOVGM37!)F3-WB4p!nx18Uj!rhN1H)~A|6n+_I^q6gxGiu;hT8#mVmMB7;5swh0k{jp9f7?W?gZ?^ z@O;3&49^c-nc>dBehe=F?9cFmzyS<*0S;t%A>bf}7X}VyxGQiKh8F>@%J8DV)fiq3 zxH`j&1J_`93E&WhYk_Mr+znXAaChKZ3@-^>o8hH^Lm6HgxDLb10M})BS>SpM_W-WX z@N&Qn7+xN@A;T*GH)422;KmHE1l)w-p1@5R?giY8;bFkx4DSjY!SG1nD28_f?#}QY zz|jov2^_=lUckK>-Um3A;eCPoF+2`9p5Y0=i45-#Jb>XzzyldR2zW5VhX4;{_%Pt% z3{M75Vfc992@FpIp2+Y?z>^t11$ZjMrvXoA_zd8g44(x&o8fbS=Q4aA@O*|Z0A9%O zMZk+0o(`PB@J!$(3||VojN!|HS1^1f@G6F{242JPwZQ8bz8-i3!#4tNV)$m@EeziZ zyp7@8fp;)`C-5$Y?*`t(@V&rU4BrQw&G7xeXBmC~_#nd%0Uu`g5#XZ?KL&i9;U|Dk zGW-0DO_*mw+!b{0i_@hF=4|&hQ(+HyM5l_%_4u0N-W!J>dHc ze*pZD;g5hHGyDngQ-(hSe$Mb0z%Lp83ivg{-vGa5_&ebD4F3T9k>Q_!KQsIb@K=U^ z1OCqNAHcZ`*8>|EZUiQ9%uL0bL;UU1W46g~?m*G0#ehjY# z9LMn5!0`+Z1x{di9pFTU*9Gp+@Or=l7+xPZiQx@^2Qs`N@F0da0v^op#=t`u-UN6k z!@TK4ihA#uBqpB^}a&Q&HSAeS-z7pJu;j6%{8NM3ahT&_#H4I-1 zZp-j>;C2jO4{p!!4d4z8-w5u=@J--O4Brf%kKtRu^D}%axHH4Iffr!-cJP7>-vREz z@SWg=7`_XZVW#N?#}Q- z;3XM;7`zn2kARnE_%ZOZ3_k;2iQ(z_k>A%?qy@Sbct3_`g2yp@33xoimx3oSd>MEm z!48f9|fPq@MGY! z8Gamm4#Q7?&t>>Y@OcbB1wNnQr@pi1(pS5g$PRMtlhU2k{Z~8RBTT=WYmIbN{zuz{7}R!6S&{z@v!c!DEOM zz~hJ$!4rs+z>|oR!BdD+z|)9R!83?ogTEkt1D-|v7CeVI4LpxH9lU@z1H6bh6TE~t z3%rat8@z%z2fT_n7yK1*9(WCLK6oARJMaeL0`Ml{_uy}cKY+g@E(C8OE&~5RTnyeu z{1Lo^xCFe5xD>pHxD33HxEy?dxB`5LxDtGXxC(rXxElNuaSa%*i2wgqE%+DWI`Apt zM(`QpCh%Xx&ES8C|GPdP6ZZesIcO}z*w8qLaiQ@L<3kf5CWIzJObktem=u}}F*!5^ zVoGQ##MIC?b@ndLf#5T~ji0z>55j#LTB6fmyM(hIZiueh% z8)A2855!NQJrR3Bdn0}Z?St4C`Z;1hXn({3(1D19po0;IK!+lJ0Ud@o9Qq~VSI`lN zBcY=ZM?=RTj)jgx91opF$0{5Je~!ejW`E77jYhRKH_)K1&H56e?VLa zU4*z8`Xk~J=u*UG(B+6LpeqqqL02QLfv!bd2VIZ20lE=!6Ld4;7U)*QZP1?(w?lUz z?u70_+zs7>xEHz)aX<6`;?K~7h=-tu5syHRA|8VtM?3*NiFgWn8u1MD7sRvBbBO1m z7Z5K(FCkurUO~JH{T1;V^g7}V=uO1mpuZ#Dg8qSc8+r%vF7zJaedq(khtNlekD-4e zK7sy)_!Rm#;y=)5i2p+WLyZ65{bB#@|Fa07F%c6&pF>OpjfI#P8XGYQG!9}?Xk5f( z(0GXHp~(@Sho(Tx08NRQ5t<4y6ErnqW@sA3SD;xCb3tE1d=;7%F*h_DVjgIA#Jtd# z5%WQFAm)eWL@W+1fLH=r5V0h*5aR35!iaA`iy)SQzJ~ZFv?yX}Xfeb}&@zaXp=A-P zK+7S%1APneU1)j4s?fI)--p&f`~X@Du@STm;z!VWh#x~6BesS%L2LtUir5y~46z-w zIbwTg3&al4mWUmptq{L}_Cp*7?THsV6)9K=P? zxrmFQ^ALZ8&PQAWU4pn4x)gC8v=icbXlKL?(B+7`pV;&0Gih`&R7Bi@4kiueTjDdJzyo`_GOpCSGY z?SuFa^Z{ayOaK4tv95w`|M$%RK5~PL2yP=m6_du^8?uA}O+z0&?aX<7L;sNM&#Gj!z z5D!9cBF2DgX9bY!XEC7#5ubw=LW~71j2IhQ1ThZuHN?2kqKNUJ#Sr5|iz6n0mOxAh zEs2;2`Z{7_=o^ShprsI#Lf=G81}%-499jl31+*+;N@zL6RM58&Q$x!mrh&eVm=;xmAZCQVgO~~WE@EbARm2yd)ev8VR!7VNeGl;^Xbr@y(3*(Z zptTUQLu(_x46TEh16mg`C$t{oE71CgxuEYOz6x!Cm>c>5VjgHi#Jtc(i20x&A~uFL zL2L?bi(Id52KM>ytcCxx%>Og;xE1&@?EfumXdA?~&~}LJp*4_S?*Mj2>WY z-$553eh>WtaUpaO;$rBJh)bYL5tl)iBd&n1L|g@3jkpH77I7VPJ>mxFM#N3f&4^o| zTM@TGe?r_2-GR6hx(jhPbPwWQ=sv{#&;y7+Lk}Vzf*wXZ0zHa&40;^#1oR~0Dd=g$ zGtgfU&qB{3o`+sQya>I7co}*H@ptGg#6O_75${7EAePC4?+>v5x8$I2A(n@}jaUI% z5wQ}qGGZ0zJBaT>t0Go|R!4jfS_82rv=(A*XdT45(0YjVq3bOPc;=p@9+&?$&hpSAf&IV54t*Ih2Q(+* zE6`ksuR?Pp=7Hu#%m>YnSO{7eu?X}v#G=q*h{d5L5KBT|M|=ZX3h_;7X~Z(nvWVrN zZy}b4zKvJ`S`o1lv@&89=sSq-LaQQHgH}g;4_X7UCbSk}ZD<|Dy3l%v^`Y-0Hh_MB z*bv$X@k8iGh>f955Sv1qAvTA$Kx_$Zh4?YFHDViRTf}zI_J|#z9T9s%dm;9Qeumfw z+7o%d;|qR{JnjeWk2nB25OEN6FyavCP{c2xUm=cwwm{yWM1y0H$77-65GO(>Ax?%) zL7WQx8u1(Gw}{iA(-CJtXClsm&PJRAor^dRIv?>n=mNy=p)HX=&j+v};zFjtt#kh#5K^hi0h#15jQ|LB5s0iM%)Jd z32{4gJmL=M0Oa%Q1VA7Zs*glu>kZv#DdTo zh=rgv5eq|WAr^twMtlug2eBx$E@ClgJ;dVB`iLc;GaxQZB#MZ(}lj1A3$7*18f;6)5)En)B>hEqo|_z}a&tZ+Zu|NZ?5pal^VLJJ{= z^Vi^hw*UKlI8GYwXZybA6j~H98MGK;a%geH6wnfgDWN41Q$b%xObvYlF%7g7 zVp`~%i0PoE5yN4%a6jAs{rt~E%OYlgmP5=4eG4%Yv^-*F=-Y@dKr0}=2(5^i1zHL5 zC1_>Dtk5cm*`V(rW{19u_%gIAVh(6E#GKITh)bZS5SKzvBQArUL0k^~1#t!REaFP& zImA`a^N6dV7ZBG#FCwmmUP4?4y^OdXdIfO<^eW;;=&y*Ipw|#LL$4!lf!;ve3cZQA z4f-46Pte~Hw?l6s?tuP*xD$FCaToLs;%?|De^hvu0gg6Fz7;!B0 z2;w;CQN;1kV~7)=#}Ow&PasZ$oXa=pDo*(7T9Bq4yA%LGL5Zpoe*Z{lAq7-HJF1x(#tQ^e4nQ z(CvtGp*s-gL3bj~hweiB4!Rq00dx=I_t3qFKS1{(E`;t!Tm(IUxET5~;*ZdSh)bY{ z5SKy^BQAp;L0k?!ins!L3~?p&IN~bk3B=XVlZb1erx4ddPb02_o{RMFY^eo~= z=sCnq(DR6!p%)O#IACHJ!~Wlrg*HJf2W^V@7PJ{+d1!OQx1lW%D?nQ!R)n@ftOWfS zu`;wZVijl`#CM==5#NQjL#zsIk5~=b0kJx?BjS6|PKY(2oe^t7yCBwrc15fW{RFWN zv>RewXm`YV&>o2Op`RkY5ABKA0NM-j188r=hS1Lt8$tUZehBT0_!0DT#Qz-z#flsV zg$d1u_#8AlVl3#(h_RtL5aU2|BF2Tjf*22)3o$;+~Xd%QD(87o*p+yi=L0>~m4K0e823ia;EwngdI%o;R^w5%s&qH5F z%m94@F(b4TVkYRDh?$|K5nq6oL3|Nf7BLI79O6sRw-EpD#}oW_1{BNxd67sI!1LfS zA>FRiAV@jiZjTprXybG(*K9L8!8}dq#TU|?npw{ao8yZwrbm*v?^Y2sJ}dRbeb zVQ!8#C$DDSXDP8!a;`m?mu(928Jl7FzB*^GQ8{+l6+9ZKn`}qb^3K-W>zC=-R*yxv zx*;a@v>mRQnH1US5ea@oH;cpdhve3GS7nXIU7W45hF7s}D2`#@ISVEkv8^P`J$+Ys z%`Ul2Zlb6Di_EWv!WFwIAveQ?+k+$%v-hQjKNJc~b4X&$YxrqQcGH>+HCG;1Tw-f4 z*G);N8zjqZtVydmcLo0i&ZDwv;!gHWqSDZ3j{FpNAM1Z$HffdOwXBMkopr}`{({-S zGLn3ie0(P?xYYS#WfgAjYIC~qSj|RO58hLeUl?SO?+6m+ z8k(&gYS`MEn%FT-30MTHVVLg!NWiu8&c$SGJ;V>tYbQJEoG!7rw^>d3t)}Vavlq30 z7MSNum3e1q4xWv^vba0;Ti>Ki^|MB$}7%aG1=S&mC1xDDf{-}oZp8Nqc)q? zxBg5!h$y_UDjKRWo^j>HmjB9(CH&|v;rpIvBy%^MaqhjBJ;zB-PSg~_Lfmt?^08id zupm}PDHs>x^4U-J)>d#1TqlZQ$w-c5GVNtNICC#m4OZrE5|WLMY15?J%2s=PUs zc)1EIb)@u(gyQ(Oj~*j$X*j-M2hz^EQWBZ11YI|eziDGn^3K44S{vz^{_L}|@N*WmJHL)=>)_5f_IHtcG|a$jhP+>8 z&dPD2_SdhSrpQ}O)pX;LCB_@s6BE91!Gpk+hGh~s6^<;R){9>o1v zibVCbwC7m)IdF8EuGe*3A!;m(HK^dmwkbEv|2NqtI5<@KGHsfNxp@9TNt^j=j(xMO zH`z9BgmL!g3UCSDNQ;tw54OT{q0+;^2~cTHp!TX+F6J)v7H6y?ejPayOVTv{wR&gv z*`JUY6xGDkkmc7#|zOb30xYYa*)1j3oZVxPW62vGf1lsVytWcs{^X zROpiyFE@6Fo%!uU51){H1KqAfS#|vI>2Brvw&C!NozuSQ!xdun%0gA&;>t+gz_dZ8 z6&bJ0?1l#eCFjm12{X$xMksfjIY*83X7GFkXK-pZCv-`IoEjyM*YA}$+9+a>`lm3cDp)B9Tqo65oX=87F=wO3AaQ>4;S;x%#Vk4vP z=?d~!`fVMp&z#(gZ3QKE46d^95a1Eni!)Ikh$<|U;Td&0YdifAu&_P+d2qG9s!cG< zEruyfBm*z{cSAZ|T|^M6=X}9s@tv|8|2z*|o0K+ed>A`qZ(N<%$5Hp(mG?E>4CPgC z>txdYf*DQ|FH=t%5xBvY*ETKQOwy4de)q8cQdE8-;pfB%DgumtLnXn<+b>N|9eTBv zJhYAK>uBsUvL~b?UL=tw#@tJuoTn)0?;1H>+KTHtJu;j$bzxrfw4JZimPrp%zpqb8 zN_(D-hHS=3oc*;dn^eB-nZ=sH+Ox|9eR}5NLu%Q@F__Eg;q;gK^M#Gi8m@j^VlUbr zlCIzlq)fLfBMAAxuGI65Mr(*m!T0xL4~ykvPig*YC3ev#j0DWru2N#}H)!1{k5JNd znz!&2-0?O3d$6|N+;;Z&S=J#V?1oDr0Fo z4(Id^ciQ9g+jhnir;j%q@QU9>Fjd>m3%_3?BKHC^UPR_8zx&Hq+rB`g=Z(u&@N3Q7)(lfMJ`$03adcdx8>AR$G^|? z?!^vq|A&Wc$#3&X%V!g5-ZNroe>D(P|C3^BIyt4~`I%0ANm9fAB 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 streaming ? x : x.arrayBuffer())); + mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer())); }; return this.new(); diff --git a/utils/wasm/tiff.wasm b/utils/wasm/tiff.wasm deleted file mode 100644 index 3c04a444bfe464fc77da6a173ce3cd97237ee172..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185773 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 *0)}bFg{U0HprdPzd4>EQ|!pfxP8D z8373}+T>m?(XE&`QSVWa!Z-5?vYGkQLC3;v`D+A%tpsA)zFKbRpF>Z7)=GP1*}JUE}sbgKOJ2 zJVV1@irtg(nfyyM?#c#~`IY$n!0;Ukjm&Uh(+Akf^Q?i^5$#Ur z7YrUvjtBsH_0dpZxk1URDdrg8A?hqH0})&eIKDgnGTXuEJ84`|Ql@LguRz-RDmV{J z9X1=ORygK%?27nzjD-U>IeGevd*;b-7mjE=dbA zWb+k9qaP{WjBf(=vRS@xt4R<ZKA+XjD$;1wT<>v& z+Jz%i9!EeG;RrPeM{qqsk3$@>_8Wc>!o`L+Z9qk#4*R}+6ghhwY2-_BMvpeoP6M>u zk!>Y3SnD>fL@0}Z-B5!0S3N>Cgiyb_8lm{wygBY=U)l6{gxdPX2zC7sp*9Q} zBa{46YRofCoxp{P?yA(XsjzW+Lg%Y_aJp{&auq3j?e*`1;9(&h}I zLbIz7sxd$)dt(HltgTw{)L>tLz(+rx8Dw0IQn@^L@SGB*S2Bt96Y6d7#XRcOivJ;6#kYi1IRy_d3d^=#jf`wB3MdG+i9ZF7 z#1}w?ZO)@0yh{kly4xDu8_NTQc&*X@@5<&uJX8ySddj(z z*(Bn_>UR^3IJN&Gr0ImD?KN&5A1z%aq}omC@Rtc07IC(RI{2D!z7-EP4$}!Vggr8? z+2_6lOJiUD^=K}0T56rh4*J4UGgDbcCehR-V3Th{{%ljH#q2mns>)Gp40eY*cnp>Q zpuD_IUBqvju6Nb;%7Zdq%ut!v_%TSetG4D2>R`5-+rwFG%7rh%hsCYt<U zUy8GXx?aXTVoe@_%j}`aF)o4~ZcpFkLi+3d82MIfA3$uizI#t9P&Sx|>+NRp;SJ*A zN?uYj>A#aCvr^>@MZW%=eZ>neRmpiwoSVSZa2C@^wmC7hIeA{b0u%VW3LYe9k8*hb zEAct10k)GxgQ<2!{V1N>IVR&c<{K&V;WAltvYeki#`DQL*x{5@zWOP?F)M;Bohh>b zsAOgmO0(u^VP*o)m=&ps00;LHBpRSa=y$N#w)roQ=XP0WeEytd5}&pfD5fsC`Agim z4VU!foSX1RPF(T>X)+Ky5P{ElHBMi0b1JK0!Z>s1vTbyl+TI;+<;p~C;eu3~8V+St z2HRK=sPHQr24dEdj9{B4aaIN;yKj|Z4R&68u+WdlZGgSo^8;r7CIxQGG;2W6bpp%?`nUS%8|fs^b# zNSngYdHgQ=vT-phktilqhY8J=^3Rx1-YnH8kPTK+WJl3sylQlZ=O(5Xy$iia$JvQJ zp@^-Ol_C^)OfJYMwGkUqTV?(pK|w!YhMqc0Azfa2AWThOKa)0;py51UKi!2(R-(ojSmkYZsfkuP%e z5LU7&Q}3cVu-%wM70kSnJ}9&T4X?xxinKaD_2oDWg|lFEP@QaG@o`u8%>#AKr9ab8 z^K3p6iXZ_*7pE_I?GNa=JFH4~)GkH{bQOFa4&DeuB9lj7YR`@)CoW)#`bl3K+*z9L6@~TTOxTMq0oI@TZyS^tHjekd)Zv;AL$n_QxRk z_Bp_OKKYOY84u(e=k|j+r@)iDr1cOG(YqB0EdWCsXr#>ac5N~Pmvgat;zC%>kW*fZ z8ep9*vQHus>TZ(fpuXRzR%NM(EU{KC{b59PY^ew)u$1jA&#zb8_ZF95;tOWlN=7TQ zdCZd2L>kM_VW-WpOTNb9Wjr58SbnfQVIUj(^ci$(i*vdfa@SGU?QZAsZqMzM+(Y`i zonF$}O5slUC+7nd-$^{j1Iu)GC!3u40xs~MEP7?lINU?!Zl~Lc z+IokUST{49YD;kN3)OhPXjsge#&q!V+QwpQ3_+#s^*!5OUsVtg-*I=mGRL4+R$c=^ zkO^^CaO?Y0j@1o%l$1TPB_CGSb{_S8+R2J3d?s{^)l;pYzv+(IN6**qSgMXCBORM8 zo+av^lfOX+%|Ve`zq(9=Uy2I-+C&Di($+7Xg~Z7kZ>e8)2+Gy{+7ST8lGh}C2mk|d zOMtOo9qgDa+_CP2@1O@96TKR6>R<^tb?|KhT-iYbTxHn7wE*j^1=#cmz%2gb?E%>K zQGiuLfAA3@l2BkJl4Q=CNGe`JXX}#bbyd&ON{gLOC`+g)%Ev> zYbDa;LhMcc!;6whrayV{6+}|dl@Vr=OeW-lWxq-`eSrD2hD$|R`+Va9Ey^>~=P&@e zLAODi^YLut)3Z8>&p2=9D7Ii)T_>9m_tgsw(l2RBs!3*RfA8o^@bsOO8pU;@uuF1GRuX=4`MW3T5<5VWE0~O43Vb$XR@6_Fo>3|Zo0V3)x=8}o~ zF^Rycs9l_p{Bxm_hhu5tYieouT6XIAl-*WY9#b9jZ#Dcn&cju#`tQ2CnCOAwahDk- zmtn5*K)_YyHZ^_!7O=?J^9NAcLI@Ybyh+3(--Vsh#^4FOGmok`?xb1xND2AFVsTp{ zm4PlLZqH;?>`w2Joq;3o&tmuS)i%uk8e_yz^^0+a2_s7#`@_zLtuHI~v4#a;9@s4- zrhwTP&xmcvz<5dti~%tlnHf*$ijncSt~hCbMOWOR<_tsczMy-;!oH|0TE3(cff>d= zWheyep<#?j)`Mqv*{?B#ebMR;Up*v01j7&14y=qc#>&_N>n_a)dD5(}Fi7=PELVNf z96x4#6Qc|;7_dwFy1vO_uvlep{Mv}U@stg1oXtR~Rs8fzG3Q8n#!PUc0UD<>DdRDmhum~-TEpN>Ub>>5+^=6aSkJ;jY5nA zYFop@8{iW#h#MFvW4Qrbg$3LoX=H?tUgPc=68=4OIR8kXe)Z`t z->3KaKHcv7blCc|FPg^+5`C+ePg*aHb`(gDE0SKrLT--!1y3}BM_2}bPRlopSZWW} z{Ammg;YzlPOXD=u`J{%ZbE#;157}IHvj<|kUrwOw9N?49j1GKl+S%Gn-kE4cGcz+W zf2mgAe?3@>KaNp{rvS|dms2I1;bs?qlk)fQCflpavno5hbCE8=vGiFsm<-xY@mgkH zv7$1pvAb!j72P3gvFwh!p`4E-#fXE!X$BHACp8SdMlIXqI^XDfnZO<1PRqqkc3?W? zN4ht;d|)~O=p18dhgnYBT~3+ZAk;S z<{ip=NmFv{~ zY?OJrQLDALb4u&yKDToIkqaw)*xf+Q1J;6X(S_3id9IVo_p)I?UJQSmI&R@o+rran zZc&nYymRHjUD|WAQ7ey;L8%)tU&K6T-r_!Dp)__Db_simfp0IyIcLFg_SKw>MGQ)u zQefTj?hUfV5kO2SbIaL>C~L6ll%&hrcF&d-=PSrO#KQ#rzsAeY%bN%=BB(#|0a10XX`2 zuZ^Nw$j~5r%PKA9tk{x7gB`FFnAWW&(;^g{)kkssa^yD2FKoX|-$P8)E6IqrI9`Vf+6qhpkjyN02P_ule(b$kBvgna71XRkyL znoD;ky?llE{%H?P(Gi}T!kKehZ@&Yz=n_0oAc#n8db zB%EN!2Bg1F`ZxIQCKg9}HF4<+bjoeq9}@|6Y2oZcRQ$lX2YDSvy^n@3Is)`3FxNP= z&B`6Vla&d|FK|Euuw!)lqN89h_9-lip@WVb7r30?cna_QtuaM7vaCwZDT3^8jfF5> zkb`iWcvr+jT)7;XBl?=agRE3UiZjeu?cgCn`>Z|>sVY6pWN($!vly-kQrVm)Sq`v# z4qCFs4`}OpH^;y0p{+SMC4UG^a)PVjsQg3}k#k{=D(!3wcuELo2TrEFDf&;LQvgnW z2#aWsRW11z(N4TcC7Z)5mS{DSOT@|tfSK^#ZY^dcr)^AD!g{J>MA4^JA5 z6&pLAZbB{N)MGDMgMM+tW;|`mH4@^s^VY`OXCCL=J_WRn9cVec>$SJVh7G6aNrTsW zZ)TJoN5Cv@v@ptPgp=lDFiK2?Ijko6o^5dKN@H*wOz2_8Rt$U_hGOnUJJL_X_8S*Q zCb>NCQ+^O8S@XdpZ)Jx-*KK8zyG$~FOfos6lS~m!a(B!m3D8Vs#XkI!Zl4M%^4c$)J&fzGU3MmB+bU80eU6*!}hV=@_+rt|1Q< z(&oKjie!+99O-z+P-DGF)5@P{Q7h&fWl)$%0kwJuB|%Jbd1|%uS1D=yfR|X`$Zn;Z z_62}8!eC=@z%Q_ny2(;oPjnZ!*=sj3e1@gqjd&pl^AF#afx#omTtkXPgQJD83?yx_ z$O#LG2N`>n>4)PWF*}1(!V^2i=^JMUq-tc&UT5IEj<{AyuV;jk;+qHHOSqH;PNx{67Q$p0S%YF_u$9XBcV2)qYjb_MYjml)NWz3Vo5>&|1!c&># zh_^CnyRpSRuVG8}AeV96oZL;GB|cOp?kW?vmx;q9Xz{l4{uT*&HrknSG$Gch>CA5A zf*SBHiX9N%U!#4Gw~KT?Yjd5$x7*TT28QD3bscuSVOy~@|T2LCBrVSGKdJvI4oPWvf7)ArihOE|8e*3QFc}Lo##3CQFZG+s&194N=21G`<&9FgjA>iA%rAA zr$7=QFxbXkjvonrByp+~Vqvx7bT9}b9Ncjn5|fy;?T*r+1D-&_O#BCHn#sr$PcITP z9VKykXpfWDN>~XiiYn$0{Pu7E-ut&%W=q~& zMs*t2)+L)EF@ErSBQZ{Ui4ovTxe6WV61d7hQ6jaNC`z8f^GPi1rcH=k%NRJO-*sMq zYp$Zbzy_nv`Jas(=rwv7E7kbJb0`y;}SR(_Vkbw!w17kHt%ktFCvg zWw5qoIB&FIAB|xFwxR#nfm022Uk!3M{*=}QQVsoAHcq4wr216+9)nuDnyFE^mX>E{E)x<}D zV%i^>fl#r9nJ+}gL5a`?JAonP9cuwdxD6F{7@cKMl$Dj&HlJk-U>55i9}k2XJ!kPh zRthE%--X!ihPf28w77dkSd?6C35%qYW~8 z8#-<4;zs$~#+LjG`@rdKQocIRP^tL1N6m$L<^MocD={>S*#xFSy6CVqVH=Z=^Yy)W z3ov~*pmH^Lsq6;4y(6`u-IlfvVK=$bfY@+zT8cdF=5FSmMu?HCx=Y=h5hU&_F7lKBfU}8$$5uQbM?}zyJ#BGvh4Io%eT* zn-ep&!w%l&eV+3!9~ta-q)-Xz0QxLtNkGek19Sm3^(7B>&;qk4@o5XRv1VNfym?pP zg-=6GGli3P8h9lW1nI<*P4GzErwW_|&0r{63#H*DrkI~Xbw7n_$sV`V1Alo>T}qJ35qs0HDL))HESXPDQ2==5TjP&U~Gn% zOtaE5>Ne68Sw6Nwv6}s4PVG~HvGHn5bVNoeclslQm9r>M&Qwi+Y{DBM_fjA#&HuP* zi(l(3o{&9NTs!v#)Tfg6w}ppK3Z|Hq$s}TTKa^G;1Y@*SxQF^SzM3YJ@$!tP5_p& zPJ#N_BeG1h%{xYIk-3h2TJce4*(Ml4);}3BZ^eiSZeZY+b(ihJFDAk-#VEi~JT0pf zjkVu9XP%Ia-i?sG1Uzdh1v4Cq8yaPtA2s@~`9`<|A1%iBO3c93v^#pFL?e`lO6G#& zikD)pox<^c|E@jA`Lj)1T$G0pp10WwMwXev`w_{KAIZ=a3CWG{g z9o23yoHw&Xib6Gaw1)!)^p9k^Z<{{^Y*YWV`N+F~%!22bsgLBO(DEE(W}zscqb9zproJ4%&|3n=*vozsEIe_b zmt=B z_(O6>kqbp%LOK|v?RZkrv6+&DD$F{ znx8AkeP|shjr3e)0}Q&4-3(|bavUT=pVh9Xwu%m?IXD?6m0*f=gBwSrbX^}(3M1xQ zH)1k{|JIE>Z8MSpLL><~$c{CkHwtW2-`VW#WvDh7IqKehs3l2llr&D(G#E!ZB!`kM zEIAV=Z)LRE1w)ErN6{LBh_SL31AMoS2rUfNOd{h@1HJs^KaF^8t%+nv>sgfj)t_1} zu~GL{uUbAkBZYHq_B=w+dpW-LhlFXoPbWK2L(UWq@J_o1RCY46R>)j1ZEb>7*x@{GBO);D|+k-L@Z zz)-!>Y;D{yo4ECZwTsuKm&~l$0(X{9fotxVSYew~*UH+(8idK_r3@{A@%94SR!0sr z28|wzv0`>GdPW*}f+0j5WOtC<-`t?2F%s(p(c7{b`Kd$^-kS{}8R_gwNa*6v zeCl)0zIx_M4-P7->Pkvqai{lk?II4+Q^z0p*ooTJrPDKR&*DS>;?XBhpZwCts``G9 zzF%>NI#%47T5$)c!86-Kzzw{S07U<>d@r{~wX{W`hWQdwTLtiNR+HZ};yVNoY$09X zs0ym+)iJ}ABLmin=A0(Vg#*tdaw^`DG^vyAK&?(|NZ1Igrt!8SyQ-%LH5=BZ^wM8p znunl4Id0+GG+90zA*l${1vki=V_$7_MbX;3%R=Id(sLa31aj^6=vUq%+}puwH>S__ z=(BH;-uGcVB(3$?IQIbd`fM~ag1-$UZ?5+M4|^YlUIwgYbfm*{_d0Yq8{<>gf%qs_ zn_dURVFH@Hp)js)hpVv*DuNVJg!NVPPM&EEjtmIaJ9QwQ;isy3DnA%oeh~ws9_q#Y zt##R;p17fdoDR^uORTY^u(v?Gc2sL(ML zVTsz4PzFBq25Tx3u<% zWF>eXyyj%dxVT|^HblGE@rB|h6@#?+kdy=@V+B{*!Z`%AqcS@qZ&9vMD0*S}_X1@U zLD|q5n!qM_w=X3jMH?!ca#JzpuGx+0B)25*bvkJ1u4=s{Mx8vGJ@Q~I^B4?yP!3#I zJ%YZAFrueMzIHT)(uiS%sHy*$wisX-URSd{Nfol?L{rTar~>6&qtt!X?1hinayHd3 z&PyGGNBp#aqDs$}+=u#)2ohi*I2JItAZlteaBa3m_}`&dgl3RTjVa$?IDNo+7xB7? zXdvkv-R#l#7Q?Z6Vx2~7CZ;#QEV;`#VgoSHh44g3hkGr z6LY25+@PCA^v*b$p-|W((ou*=@WdhS>(1mQVKK*K(pG;@JUk-Mn70`!v zXxDmJm{tmK96DxfII9cx7V-n&EeoZGdTdZPYk{_>)4W*${96suMxX$i&3vM#1~m)G zhc6WSW%n5aIdVhwpkhKrYw4~7z%4CE^ za>Ihr6`nx>vyx%p3Mzxp32MbqTALoLXMg~i)tfE<93p9^6DS) zv^gOofPxXTi#W)ep3g8YQDSm=u9nMl>$uMv097Mpx9fevh-sP#I%95Pg@srcsb^rn ziPkbAqeCe(ws1fOcQi;*qnzjCvQf*LO_>FGfE3cr{5!%Pr3?8;kti_?%FA4-1zMR4 z1dNsDPmcs3#qL5y5(BU%9Xh&)!ip+8#dnDS*;<35NvJfC^+~29=F$`f){&e%b>u1| zGtR^)CTDfokeKOCLQB$n*n$i050h=lEi#knfcdwW(`a0>$iq@a2Dl;4xoCKk3u_`_ zIa5HCnB%QA63f+2+2K}$L(9@uh_`5*T9%eexzy2q7uZDEtTutZd7dq{z6Jy+F_kd` z%V{Q?3O^cR@ohCx+`NrmN%w;+!Cf3Ste`hCMG{$dRJd4^jpDJ})KH>5Ho&yK008G_ zL7kO-I~<$lE+Z7oa5GejQDu)W4~|c9Ycd1_$yzeC7?;*zSC4pWurK6V>Z*#}`f)Mo zXF-k$q0h3iCAg_WhRGIbGXCjFPO*Wm`?0f7aw9~c|H`xVDTYj?3H}znse}> zD)jd|Cj=F;rJEhN`#v zcc{Pb^XsJk?2IR5E~tOeWh4HXm?cJE23!*~(3C*+vxJ8u*~Pcm;}M~Um`L{GLneHA zNj=V<<&sGxrnifYl34R7)Elr~zi#B)(TjXLGL3+jRwTg79ohWOk&j;5yvSvz&%+tSLVYHle1amZ3MIfL zg&6bJG>#UJkq@|%BxYhfhG1JK8;Aj4%RS`(>MY4GcIt z3<5bV!GzLFOEg5xwjSj}Vi#kO@2na**p_sGN# z!oLRzG1(G7n~0qqkPx=-L4v{71kYxdxZe>xSAc|fJV;phx=a`JZKA#>PA#AYzyNxq zxmg$RFDdlDJ46GeTst2?^-Cxo|LY#DZV|!+MM*LOMQUWN>!)F&k!azs3xy z9HbM@Y0RpY)GEhE3BVnM^Bk`q!a-nr$EzFR>MO@9@VdSThp{1yz{Qfn#p#4*YBWA^ zgGFF-2{A3)$hq8lQQpuufGv4NvyPtAMOJ+Vd{n|NkE83tlw)jw5C}im0U~-@kgx`i zID*RX+SKrHw@TT?Qut|*1PAhy$n@?!@3HWJ0cGS>PqFVVv_&*|XJ$f2dO*Oy)ZfXC#CgglytUshk#V4jnLf zP0J+i>7gf2LI)VAH$I%5{$P0U=z!?bMSq&TiZ94#ifXvg zCvtVJuohl|p6mr93^a_ttdGnXDgMuwB_?4=@MZ+0Dwr}8qiL!K6XO!JTHM+4X)D}m z&@40zgo?<&;`^p~)S#U79JG+QC7c)TNn&I|HHW?viP6lG8skB;B@70`jPyM>Bodyh zs1zze%=A)M}Xja2(7 zV6R9sqE-=>jwyf%rAyzYyR&D zqo-x=*{k;sCm-PYtnWcSi33YqS*2khfUQ8Uh_;FpY&uNx62>m+p0f73HK+Ui$7^Xr0tz` ztU9!lOWbCEvKd6RJJZgo#HGX$?Dc^qe{;Q?)6M174kDgn9K=u?wg7D-ue+HN2wgX3 z-;{;OF%E+=NMJ2?Zdnj;gDblY9`$s4a8$0^_UD<#07eAw-E zHy+k<7xjl!kakQ-8g_I!^fq0GO~Gyl$RK@$w>=P9l5%t@`;Bk2?Gz#m;jzq1h9WUesgOiTXsNfGz_|lpW zr=%1Ko(OA}HM%a@p{mU{s_jU^5qB#q@6~zOY#?JxcSJ`Z2d#zbF}Ywyq6{_ECpAYN z2Ofe3s8iqJ^>Sehe&WTVlt&l zq92H3oW>UOQD^KJNOp6wB&t4wf)`9&)kqU-yeI?S{$)9)wk@UG+^Ed@j-%Pq7%<4- zyft6B$0yX530G$vS*=SjfsLt&G9p|v$u2rMi1w&xiL764|0WT6Xzx}!!5k}&HM>UD z2=|-e`Vt*kshidMz#u#BvcAbWSO%Q+OV^>L!hIjW3Hlbq_B4I!g?IRj6aS#Xh1vCAx^K(!Wq4fx0p}Ar%2-Tp z#URI?lAtn>ZS{!&eh*uf)IJj?&cvOlv6n1-EQF0wKXR}wq0eUhckIWlX3gx3w)$2v zFFWB~4xG5l2Mg{}TVa4tyD0@Q5_DEX3#v17J4rQYd-_t^)}2w5J?`K!^<=^A0?#4t zR?qLTZhzKSbc#iK&h7Bgp)8GUSo%YXdMQTC_a6?5@^CBf5HU(o9s@@`vpXZ-{!-p8 z7_(228ankAMI4?hFTnp`ad1$A?`VlVB>8S)nnWKh$c^oTG&nkE0}Xt|KC|Q?)a5)` z1-$Tap}%f&cp!>5Y$%mCDA0G(T{b*0I^G@`TQe(SVArL}K(kg)<*Kn9t$EpcH?lMi zn;UL}*hE%4KnkBt`BnQstEONU|I8g|4Jl&BU!95$w1(w+?|PW#S9(~-KZt~OmKr;C zP~$*R2Q>~Bbx>ois6vId6eZHBu_hN}(VU^C%P(t$OJEdmTMo4{Mr4drM&cc#M4d9e zNMGtK;lt#l1Re5t$+VL(0u-4dS;mNPrOn9(k2FsJP|F(uv7J&xg0H-Nutk2qEzoo} z$z%6Dvf<=aj<2e6{EbveFhS`3!4{zisQZIF?L^Cd`WDQB) z%N?t#6sdjPfQ6>zqk6DKM5^kVxhl6q~)pVNQ6NICSUG&Hc;rU? z)Ks9&S*B)D;ZRXwT_jG@@F4qtrZrbXB&IrvNnRvQ2c@QHX;!C$?XC`9S=6@@V~hG~ z)+tL$V)YP+8Gw326dk|b4PIJ`KD|paq4hCTiGWoM;Bp- zXs`Qg&_%P|)9$Usc&((}s7+z&fp7UFK@W=WVD(~1nEw<2Sb3SuBrepYH$j3iI@LQUpyD|A#c43lR zrWB6v>NJQi&%i|yKxG5LHizl=3vu!c4)^3LeZaxr&`O5iq=i<%*>XS@h5V*+KsMYh zY8y!&nRT}S2>-ci=f;40hN>+)*;OGsSv6!Q3uzpc_4=g6ZusnE()ujBp>-4O-NHb8 zrm~Re@e3%t`p3|jq@WE2WAv?_gk!4LQiNex`hpn=&y{(MYAgdW+g=dWWJ0bBS(W`N zC?zyL;jRk8w9hUU-m{xsZ~J61yv||_zwSdzZ)}-|j7A~eP$$+^pVSaURGu+6h!;zF z$F%MsUPf+ZU>ojD81?9{Fwv_D?+`85nvz(CT0_$xqcz{=d+0EW+`DgX`6S&edf3>WWdX{~dO!A9 zpJ|^ATSRg*UxmBc;efYDweH_iHUh5MGB3ZL)AgKu&6bu|2+2 zR)c|Tqeq;KZGnU^>WHGNl+}bhpacT*>b69NI8-KOyf8H4=`WVD!6eBd)KbNT+KN+r z%m-$$Sg;fhZ$?=r+NWY6|JLMcH;&{wfu0yAm%~U6)nvaVdv+vGKZ0{u`4aGOWzIF* znpqJwC@Mgsn^tR=d-T;C8y`ix)!oF@e*({8?+Lo zbtUQ1_gm7Ml!!*7L|lf9JeV;ud{ILo`_es{Kinb!w~ju7#lsC9&3;zsQdir{5YBUc zHPrRRkVwfn->%X9q7KYl@a1!UfSA(t0sPm-!UNq#1$~VynrKNa*;{s+F6TzrvB8bV ztBk}YZY}!_cMUaU!%c1NS}NO3${1r6)p(lZvPDsTS{~y#!~Cw8q#;{}W2_&MhSi*6 z9egXf0K-sIRadbNq6VjKr_6T)a^U+0$=FYWSRQwq4F91ev`UdvmR*I5(R zspNGIUp<0N(_M15mLYg8rFBbNF9Ea&D#9Ia!2G_zH#)(r~|W5_0#$RoMVH?mqZ zGVW?5=Ut5?1@w2Jkx(YruGhbi>F+PjxJW}$>b#2g%g=0Qa=z`g9=AyrhcSgaAr1ffT#rC`b zVa}qB_PIkMmW=v7k<~+itlBkX_fR0ab`3E<6v(n&*L3ZPH`jrJHar88-KWGh%t$6O z%B3a?`N3{<~rlnOg;%gBH25r`#k*WDwf5yORhipaK zip#CySbbZdq8ZcL&S(q8(nXa%x8yd8l39vpv!dIMBJ47wdmxbZb<-)8AM8|)wNCd) z5zRO^FdK3~I}Nj%g5u@K5gh@_V5A5TsGk1< zIC{etOX9Q}W+b}+?qLFZZJ!)KQj?Tsd*yJneR5pZ1Ua0Aqs(bSb*jkOq=XXJR!-^K ziq+x`pVq?`&c77XTqU-2u9hB1NYIzu21-G&ER|~wAch>SPSq)gt7CTz<&wITysdS{ zpr-g4^e;iS=Kk3dh1A?H*+#pUBnPA=9K-v%-W|g~$B=8-aSM%wk^v-0)$5-N5hgD9 z=aiLn4BKF9)f8p8GfuWel)cdFEXYpn0E{?CE{5~7`|5K9 zyX*LrmXvb*9IH%p{ABFkWPBOM@TMJk(~i7p$4`Qnelh&7&^kFH7?&SoZupy@2`l9v z3&(${m*jVWUn=4DJ`N#P>41+u0rXnTH{>0qa0d7Abp+Y`q%ZF$J0%Z5+MpuOQQ+bU zsLUy_SCc~?Om;@^+$_;T0x5Tv9_Fa5t;co5?RZM}f0+kp@CNTM>H#C3Tm;P7Jtb-J zw~@aE{#eYL%<^{?fATBt=1;Dv4g6ip-;Mm;&R@pgA^r~Xr&JtqKFZ&H{N2yram|hg^z$+OJgA=&`guq{AJ@;%=;vYmd_q5O z=I$#NfcfA@|@mldLk&$Gm*rqNFyG=~1t@+d4*K?OFlv z+XKNtDLO}GnReodDJ9MbSorK(lc^%E$cp*s+AVp46KMA*iz_;GqPY6zWO(f&c=h71 zgHg{^t_Dr5Q^+E3&)+J-Hn#U~cK_vs|A1ln8tJLpw_^>T=&Q zKQGQo;b&Ebk@`>S1tykcCKT)T6!+ay^1~edjMe!+2m4?rJ$ke--EKLanP4c_s z7j#0#yyPy9WUEQu%kdF7(+{u&R@uQi+M@!_Lu1Em2-O?>@jGe6>B%K`H~1i+mLoQC zxEn6Uz>0NN+}(Ej`ALoSi-1wM#OZ&W#d&Io@U>Z`9DXww#IxREqwgwPqTipqx-$Zd z2f{!l`=d##B#IO(UvVtR%|F9~?BkihcJZ*Bk9D8Zh0cAQcmK=Z@4k1z=N>S_?KoOD zGa0QZl_#dh$Ja(va7Kn`mdPZ6rm~2^&yeHP+JF{l058-81x-1UNq{PXr?ft%B6r#I z+VG~m!0}IjGf#(1LNeG^wv?YAx;pyGWPz|%-q{j85AcM=2DLxTp~elhqDor$^Pcx zk$Z?7Q{d){iV-9{nIsEJUHb|h?LdS45H?4UPreG4==lpAIeUJx0LqJloS*jhAFc{O zdbbBaN;iBOW^&pBm+S%XzS=nhFETVSX zV;wdmt&Bv(7$SX3_Um7cFhp8`Q8MYJp=$Q!hY4;%i_0GV1%mw*W9X~ojaZU*Nhh=+ zV%H0vw3(GdS%rvx9biNpYFhfmOKg^zH4pKGrJy7ll!KUt2_=ovd-P{SugPhBI_lr* zBGH#MsdP) zLKScD6}PAupuI8}IGZ)&rJ^dD@%7@0W_-1{dLeJdhR}=+c{8xae%MW9)tm28Rr9{8 zCRJ@*%04~N=?4{ms<@*6A1|(`_*=#JQ1O2$uKqS3t@%*#d|vTHRzA!&r>+LEv3z9U z%#Tnn`N&Qb-&5MRp<9v2)@b$*;goeR63oUpYV3jLL^ggn-Ad~bSL@lCFKLn`o7{MZ z;&6(^K>@4USQBCd?)vMN+nSBvZF6{vLN7PtVP`V*jE~J^Z{ju<#R#pz7gBap$mIlg zm-i{K5Q$#u+7_x9U*cTvGTGB$h?`C&g?={5Pv~ zv*@5}h%{awuu15#F~*$ud&u zZ7DC=naI-;$tQeplRqr@1L1DE$qrY%1l-vlO6ABHVM?!rI?mFu_EoYs1U*Kf8w>heg+Cok2524mfkGgM6g%xE?w zOCwMhWXE^GqlyWw0d%ZFiUmY+FyhkI84F|(&U8~r)gs8e%^VKPvIV=b1N4w|I!iQ0 z@t(|sO2(dqFAs1u=6+$~X@?_piKhS^Ove`T-4ah<9uU!d1LCRsDe){+bfn803$awv zsP_DR0w72ltt#^g?Z(u&zXe8hH26ZI^Xesg94WgQBoamjwSg~OmQ(Yx%!CEq$W@fD zg0LNGzM4mQYR-M5gI)CD`9K4qg*HW@h0MgHuBKAwQNsq41Q24CofJO)!+L?KhD7l9 zxqKzVaP~@Z^-?%R60n3Xmx1)D(&r&fT+d>PDBYBwY|#nGcr5uT*Aj!?uB9Q=yquMe ziFqJOB;))|x-H38w+Ui>S-K{jN-lS!G8lsC0hG*$Zt*w(vs*lF?~Yz$oryR{pR$@; zCB4UPyU(n^G+{$u2(X;=RUvcLP0&)s0Z3E;M$I{Wflr!7RNc6^M^&E4Ht*vDth%<0 z2KIK>pyh(aNtB;+4BBg^HYuuwOOg5#vS{2<G%-PrCgcjR3OWW(VfEBb-|Zbd%;jLAs= zv*-u)9+TIz28$8+mFx`;3)LE860LEQoo-yfh~e^5H&%@pq;exQoW+`#cVlZ9k)Cd_ zsoIKeY(496;A?BRtziVlHFw9|Wv-e|9%v;d#sN;}ww?`~3|x=O@MITOA;t--`iN`f zLE-^gz$sDY|JK;zDan*?h%NqeV~b|3xxJSyP8eGpGqwmpO&TPtg1QMDfZ@+K`Qz6& z`s3F&a?F`v??U&GL6DiFiNW!OA+%l1s3Bu+ zvJBmBP=E{|fOQnMo=VSjReDy{060^v;aX^n4Wm~L%sP4g#%MTb2pa|;&2VSB2{DV1 znOwdSX{qr3|61;-3h@5dimO+{DZJlX0(^n?r3oNelpR-UQRCcF%&JSdq1VNPps~y? zGE@j2jzT`_9z01$qUoj^K4BJSArCre-9tXNdO|y)O&L;EStcgTjD5t)hD6+I_N_=d zk@##CCWF_H-ZD_nF>sIpYnQLjB<PTrXF0y=<4AmFmQ2cdMydT zU_hV2g;0Z30eEzF6}%XNR|-I$U&{XX+{hBkOn0id!tnEKafRXMnc@n~?aAVb!8uu6 zJr+)B+*nrw)yY!=j3q8LCdMd#EIusd0fTd-nJ05L!==HKi`Nv(=Y~L&W$=V)iN{&A zQXR?q5p2YYzV`#@WG2N~$Kpno014D&AL_TB4kfVv{e}LwFYaII*8Xp^cR(MOnQiEQ zo9uY~-oB#mZS|?2EL7anFx+GtPFJ%g;e5K@m$psF6Jjt5O_{D(9VXLN1BU@bvxZ0~ z5ie_b{E>t}zWDzqSJLC`8~Lf}>pv%bJwBJdzK0YP!NKRf4xu^b3Zu4Uhcwk+jv-?x zu5Uq`X z2{_5x9LEt}%4^l<)k2WU!uXMc;}&SX|AaB$Y#L~Ik*mO%trjJ<1>kzfN*MsAmP{&F{zY<05&wW}u^ zsaw%0GH+~kyACl5W8Kw5JVT7iE}oNx3o#PZ;j2-j%ixRB$RQTj4-lKX84^Rp}tUM>~&!ILV7u#)M)Euow=#lh5P01%3B|EakmN{%(a*cWK9EB2U z@=>=C7ac{DPd1Nqg6T(0b=_@nYCW3lU)(S4Murw4ompP;v7_ZS zhU$UFlB10?c1UbMG&mqh?Q+Cl{LXdkM}ux77rRHJ z2%xT6PPfurQnY4-8}*@H5rm}g190&SxF{*Ov+XT-#Ld<4TjO!3m4N+9=sOuK6YFSem7VQ-_ zbgWac(&^j@!*-ROXPzmyDm?5&W)b_FX9!J>%EJfnk`mCbdk1C%bn45kVr{H=g`$j ze@5WRCeCDl=u3DlCa{a})&#$mgtzJmZ$)CB$V{@;QW6<0L& z@#2ccey+HBG(WY*K0#w&J!ja}mPWR@Z_^MQh)ej7a!;}Kr0JsG*b$<5;Ic+9bA`>T zYr$@Nt}qpXZqT5Vf%El-shF)VgsGU;yxQQQz!Z5-n1|@=A~;n=!cy@vI$kxAdAeJy z?}R3SLr8$bBN1^J#eXq)%4gasE{Jv@xLg64&OF`%4&-+qu~X=-=%JDXv;RT>Ui-bm z)iPE8H0mXSBo>VD_#f@@OnAg(U~VbgB(IAhHqv2UFPOIKYObs+W_I}6z8tX^ZNe{{`h3sa_`eHrow@Nh1)~Dp{-U@7-M&^_(Uw0huKpmLVs}P% z!iKB1W9a#5(Wf>W$Fs0tG13Ay`Lv!+pHWz?k^C>jcK{E^x`R3^T+-i)b^2Q|J9;T? z^C5C@*13eIkYTziWs`{1aL_v-k-41N;^?>hu3l9IhEvfq@jF{!7Q-CT;|J12Msb!Y z^N2Uq6!7A=;*SbFs@VglB7mb-Q@*k7U@Dl%N(%qkCgf3eea%!tI}WtAawwaZURpLI z129WBBbA{^l!Yio0cwL*sUYzZH305t?Oa24>AIWPjVhMk!Desoe5P}Uc}W+9CfoW? zPk?07MqV4$J^}CeY0P()$S*s7-;qXA6Akse1~!j@GqCxI4*&5_=|5=iYODaLG&hR| zlX(xX3)r2x7C)#Fujd1& zR`_C@PO?WOtFIWy5W5KqdTMdjFvD{W<{RJ>{bc4{nTwI;WPb-U`5mS{9SG6%RFS4c} zNHF~(;BpL6JB0_l4t8XbA7cb<=@da&XO5z-4N8;r6Ew_Dh@=fL8E|ZHKdR9)CfjF_ z_Qa2BhacRWl0zz8atJ{+3Ve`xRDtI5`xW#1bt8m#?7xxOZA?7O?$_biS8#m4e}2uy z6qA>YnQd`~9a(Z=N0waJF<+d4&Ej21;r>lK@}?bm(~h5n$C^pVkZ3E>A!E{IQJ#-r zP1~A`mBoTB@)KyTvVb3i@q(+JSTa8`g?P4im{CdB@guxKG*l;k_c7raH{{Ojc3y-~ zB2N;{d13L(3YYTEi%HE73n?<|5}^Y4ToUN!u%}4aN@OJdH@?pY?t(AB^&g$*BRxs%Ctl5y8gekv*QKfUYUX8%2O;nIf zXbJ^F*3rS%R$yvdDH{Rz`RM-yKJ(Fku-`wm->=&5pV;po+wULQuY#NBqd&CYe{aA4 zhy4oj^U+uA_Yds%_wARK^!`W01>|K5(A?sI35meaYEsu1%N@%UQrA<#@4_>ruE&cj zq^{2uR}iB|i>ptDQ)&nU@_>vg*=1CCnXeENpH;YNDf``0M~|SwXNxN;e5Saf!Y7L> zDm+!73cfMwio#uF9mxVbsbUO+OSW#nJR9#m5x&?~AK{mlrh=+D?1N_P1na z?c%mFDdyaEtix?PKA}=R-8CMsRdW-r#~qIvXyer^YD4N+AU2DSn&V5s#(HMf&kAg= zqq**;m z)SMNna03n6GYaNsS1aQ;+Dc8R3v1=%g|$-g0Tv@x)52cMNUNpS*g`CDQYIs-F^7n^ zRwAi`7zBu*1u&$gZq#`9cZwRMB?_V~QFDsyR2`$zEv}XE4fW!#L~`_}XwqHoE>>Gg zpy&1nF+bl0F(9O{l8hUoumH@hLEGYw02E|9_WF%AYN=$s@%=5*lJUy;Oe1BIij!f; z>DvBPuO`rbH!76{3NJF}M=}p)826Nq4|%sIE+g0SI`ON-%A=JA!kovisyPZ^1xyfX z)$l5gZPB!s<=|eUVigt0itCqjqw%zXM=2Cv)b$k1jvz^vci7d_7KC{!;xWF}DZW;G z)07Yt#Ko&BN6MH(22tWGATmMVQ9la>H7jlcrfv3|-_BxAfsWLJg21CK4~a)w0)<>Q0*2m~qwjOWvY$)y7Cd4Pk8y+5CLTZ9 zl7#1BLjg)~y8<|mK|)tR=U)wX8g@SDtopi-ML@o^srAp&jc2cc&+ z3qmCip{EoAo@twae~gmbZcbKSq>s1<~px1t;P+81ng#C+-yMN&AAd~^#Rhen^ytpcjr1l zV%$2DY-68Ew(9Ff*8Md=+SoJ8zPQ-~=^2h0ANK(g3#2Djp%HYtg_)%J&PKK+>qmq# zqFVb{Pa`R~9VVf5!!Qat8z61c5#bDHL=B;er!5UooG7MUSu5;5tnIYz?7<|ZD=ks< zmMDBUmtQMC$C9p7lRJl&+Pgdh!m9|w2_{=(5@y?~W}oz1W11|W_)bN(BheJHfH_R6 zMiCU6^9UK=Ehi4;-9;v8D8gO(OuS0js%2!Ne7lkz9+&FQ(g!)fci?`WS@Z2-bUV)z z54-mkJn<+z@x3M|18c%>SNuCWe>AtR@)xo0nBYa)V8QJ$O4x-M<+vCnasmHX0ire< zqZ~ggqhv6oBJd&ao|{qTftaSj^fF44P)ok8oP|-c0EDPQW0chujB?T#CD1cQIoZP~ zq0}`uX{?MnCnib4Bc(lH7}{DWG%1$0QHLnOg$VY;1r>fK{>s}OE(pXJ_6kkZ=*xqO zpS6qqO|If#lRX^F&rEc)7@32gp>Fnv`D(?quJ(KkV;QBDIM|Sy+(xlKT+w2GT0qe| zD+x9=_BXa_RtgZXJWqU>S?ceo%vtmv?q^VddD(3qYZXzfiG_8&H@cW6w(JmtC-kiHxt9kuE9F%L|gTBwddjnU<`4xV5UkT z>0kRCdl!Y*9%<$8c|w!(PXFRlGo2StPUkOrsk8UR=jJ*uKC?N0(Mw+Wi*B;5T_;St z@-It8^6yTqYNcrso!9bKP6cw9m+8yPTS<9&E2jcg=zTG7B`@Z!oC=d8f6-0BLsobr z2%umMl-H_*10t-*Z(Fc;3-JoCl6m62K^o0pslJ@W#h6Of6=H(+D=*TuDpii86hzxj zWH`}Y9KXI%9D95GHP%gg>$Ut-mAUw@W-aO`{)<^uQm+4e7GBEnYnHyk)J5`cylRF> z>CP{2Nbb||r47mbI-c2(95)%^>l;Y%;&I!3zUzzlZ#I(lMMeJAMpD1%5l})6DQSmQtA~lRoUfPsAY$s2@N@-t0z` zcM!#~pF~V;a>r=8VdGRK1mfoX$S~UK)=<|imVD_J?7j0AtAn{kP5CYFsUx>9i%KQ( zH@v9Die}!Un*6;Aras-Gn&Q^;rsGmgaf_5NyhSznEt1`stY_T3;&2rzWrRu5IwDnD z>IkR}es`rzq3ZlwuRlkbg^FkU%+o-pEsD#Yu{@)e5&pR}&x)n^=#oxRVPF7$Et6#LqVZz-{i~juo0x7=eBEy#0QO&9wd_ z4Y$9ihxdgZ-Vec450B?ve1MbCM_~E=@8iAa>EpefKHl3PgKqaIevGczFh0nM_3}jC z%ZG|yf*#-hULFrgg3mgX$Ky^vk2AU696HMG1`OWE^N#*Z-qDBij((!(C`kWL+ffB0 znXD~)(pgY8&xU-~j-DtwdLnMJcf&>E@x7sY!IO_`7`7Q=%IK#!C-bMjIAMf{iA&o$ zjutbNuUJufqlG^7DvRzi7z)Z4#`O@?JGP`5H|nmFPZ)j0$FZgHd_;DL`Dpa8R3k0S zA(V|YROsw+*0Asvr58}jIrBU<@Gmjl;q905?nzym=jlt-Lp#_Q9&JyHOY-(Gn+q3P z?ubXc&RuLI0PqnEt5&3hmk+Y1K>jjm0=zr)LS6=}$I^HDs3eTObb?S>PF0E5MQm4qzc}>yhT}#<-55vL~0ajJi;SAHr#N4K2IInlRGHt}mK!^-}iN z#m6+^OmRgMUM#L?!s+6QCOltU(S%dQ6-{`yxOyg>X4lh%>#YgHnA{lcte-g!fc3x6 zEbXJzWTYqWb332iIzqzYgXyng7;`@Wjp3k_2`Q1Xcc(iEOeXw>c%A`Xw3XJFTV%qM zPY0yks{MIeC{3;@(FkcEc+g;- zJfAS}wRl&k1CKCyTGY{P_xETU>%dtdKojZfayluZX^kfoPLQyAr>TnIY^_NP`kDpZ z`Zk#qgl9|bkppMY+BPoT4?7jz52V;i#SH`u>#|y=_MvslY>%o!rC2V1BK|G!;}1wE zr1fqm2cye7ORph|Qphd5dl@b-{&2Oix-4>@1de(-Bby;1SLJ;sr)4Z02N?979(NXH zFhUI1IPWkjB$qY*LNj_ z1ct>DkO;kEF>?j&Sx9;svsy&p%Ttp4CZ}+BtRIHJl5~O;Usb*lQVIyQ$u~l_=2&3Xpj2e`dW;ltM{dG{f4LNH+dWXL(=`v1uxUM*=NR zJ{`L|H3$=KbSe2zK}tX+R)EOT!_XT#!NMi3*TI<+-Bn@;ELTC+#CXLS?)wn5E?XvD?~EeS|n%+y^)Z$U39|GAp6=kqU>+@BZst) zF7WHh$k%4_!CNp9iMvsouR=zXaT|I~SuLjLqBHT8-c7oz|46GjklIRoJTB{Qihbt% zt<)e|D=UtGI6M-amo~c9G920TQPsA-@A|lWHW-$?w zXMVl7;`7fIS4_)K7gs+UPAPMU00jzP-&X|Dg5SWk?oik14_+-lO|fZ;MBDmUtj6@A z(;t)^O-irnFgMM^C2n%I{vcKwVWB^NQnZr(e5JUeKfhO8(Vu@?T>VZswf+eHEWxJb zqwYfo(tD89YnE$4@qXf`q`wrK@BSyUn4O7yREEq^wx=-+3SUN$1U4CqrqoS6Br;v# zt!idr4oSjUQyc(FB(krwot*hpRmu}%Xm615iL7qm-l$AK$@QFBBHQF9x8N28Oc{W@ zAawsNt=KRMmgbzz4Y6W3u35yYKm6o}h$_&6A>ob1%;v8W+v;B>t)@%d_QNct<$qT8 zaetc%BYby`BxVHFP@}I9LUV&>UK301dVe;)Tp&a&F+=!eA9Y%KpvBNyf=OaAfLyma84=Y6;7~noE*`<`+B+X57h}QHGP6Jwr{%D-MpBGT6$gg(l6hqDBuVjcT zLV*&!a>>;&;SyU2TeJ}0}DP#Ld#(PVPtRvaaAC0WP?79 z7MyBMmFd->EMP_P>tZS7N_V}ygIB8jA$R4?5EssmBFumwZUS){`XU;m{E9hr?hq`7 z1fE1o#IN+m;69Qg%Q;PQyb^)F<8~*qQKffFjzfMqI;*C*uk0s^Z4zl~-kn_Ephc)0 zo7BLDR3)?+_J)=+qg`t-PDR%KN)cLTyb`#(CmFxgqp9cWHza-dAyjGsOp8$9o zVyMulX2(v3cQKPBdCSrC1Ix+D*!=|fYu3W#*JAg+&IN2TO5Vm_Vv5xJ7*#HQ)Ga1A zfDo3wbh`vSHt=;iRA1Ob|K36Co(V(U^u`h1qD zFD3sb=Aj4QZ%AfNo)BWmGXP?}C*auLrG%(!5L8X+`PW&a)^j(1=YINbJ2h-$akj*b zva?3H8xA9Eqm>Z80n+lcM(TlW7Ru+(bC<+ID9bV@5 zN4XwXO-)FOCK`@l5Y2yl7^0^$wl)_8+^?FNbeY?G8`JgQm|W2??f7;`yE2?GU-m6i z5C=8|7XQY5BZbxy4b;?W?W@Ivw}oGO#Z4-Z6)zh-iHf87Jj8iWw7PF7nr5iV12Ps=h#N^k`B1B9p$_Jp<#j9M*Wv%A9`xtYCcB)|ZC z#494^6{C`T5V{k)58{TLNsgj18$>~F-67dQPbKbXJN4Cw6p-XliRG#BRr2#xjukQm z!!vTkhhk@Ilc9Wd&6{Y6#8g(-{A0d2RoI_>qquq{obugdbE=Vzn6#q2eIpQ`?0y#? zWzW_m$xb21NLgg!7(^&oxY^U*ZlJIguzxcFvWfzYmv;k6Srb_zTEk}G;-}N!j6bfm z1B>^guzs8!a3QCH&vJJCk*6Pi@ClbJC5aF^)ahyLS%%>t`$OA%p+<DYHW=x(m=Ofirc;m~L&-3QupD$}cQBRVCsf6Nq^u)ziZu@dvqm+W!x zS_AdDLCORW5DCXkz_E?lL%D^&?hZD30n#Qah|UutZ}grJd29cFnoSO=B7Ct2&3UU4 zKmM&Udruup_UMZ z=>a?kAqD5{&3yD{v+Bcq!~y_|#y&IKfKEVOgwmv(lC;3%(AL#8c5F=NG-#Qq3!<_K#O}D(Arp%x@Ql$1`d*b=TNe%Ie|=JB<^t| zDJ1H_Rv#Z2w^LxVPx6*D3K|D3cBB+|t5#GEDq$ntX=DRiw=)z{kv6%0g zT)6Hv`V73SDe6TPAp)?YAE3-G9YL9^w1?t*N{TDA4yKZGr>VH9Wh$s&xk|SfhyyCn zmq$9*6jY$+iYp}hFBVr2j;D&N$HOUQPHJy;Y7?DwL+7Ciy~9hQkQH;(`8{3FLK#T) z?ObxsWXVazf|g!GZPh}9R1Rq?{(1$_~R za)AhARJTJ9`XbEvkj1kRz(LQK(xV!EBq4g*?6hLyJZKANR(k_gauYc)^Ko?(9cISl zhX)8HhB{2415ktC3U)WqgVYl%Fj~fW!)TAe?x+A>?a+V5q`lN&It1Q=En=|q5YFSN zw0LNT$ik3=SlA}70+C6KUN6y*a+3b2tQ0oflw(Qo z!zxw-RB&e($*&b;WrOHL6PZj2iloIxQT$)k|K`T3zgq!C$DYCP_omEUvfB+ z9p*r*WqdVP=jTnrM*+DKzGNyLTCMC-#?A2~sH75wgSZp98jn{EKU9wzk3}J*w~9?U z4*n9T8lsmp1@o6djWkB=9s{A%fU-8pd(x0h30GHGygVfuzkEN0u&xhT(8BHyeaxMetoK5sboRrGqHk(4XbtuW$<6`?Q7 zwuBK!mU8;rXkMwYt_C3HdDbvr91y_@_7FhD1j3Cacaa&ocXU)Ra*-M+r5ej=D}@XN zDpjwU%jELPb+R3%lkFgz5}D{GZbsMQJfb&~z})N_=HF#s9vcWuJ@`$a7n2MFq-+O3 zmNNsWVRthyay%m_lFsV80!`Z(HNY&Ggk;PIbRK3ROK#DR3tvXj~J876HSS71r`1J>~J|M$BHYJL}30hoxU`yS%TNtLQdzS zGqV{>%ncP^;w^?(o&a8ql-A0hDy@~Cn3Fmzc<_b#5-mNTUI)=Cw8EUy8S8wRQhvkq z06n;mSd+d&!l%;t2%+1AQ@V6j=+Xk#ENPOvm_1j4YzxWSj(rQf-;^hsWSnV~H|`)m zN9jh@?NgU~xB5o4n1wgYqL6lyF|n~>j6{~M*B94=i39sDK>fWVdZ#zW<0QpaDQhgilo&#Zn40J*gNC2q z61)|vDm-}^Y@pY{;z>U?g+L3r+|&*qC84waffgD$3OC2xS+M}dBP`JKTh*Uiv0&<` zjD*}vbpCb?+oW->w`*h*OKc2vBsHsuw2kIIugczp{q~3P{_~EvAlj5lhxjbCn=z36 zMeW|wg6Q*vrF@2Zc)*;2$y@t-b_D+%al~DYrt&=JoQp!OkO?Xq|RZ<#ZEd(1u!V6n+9*9 zX|!%qhyjRkS(+VFltXbpQQl9TT3*MVad6AJzZ~XbqSjrGtSF-yonw)CgXIdHYg;Vg zmq6R|t$I#;$WpSTJzUnfeKuTclxa_7Md_WSy{{fiVmEi~js`hgwL2Q%z{ZMI4&%ih zm;}}1STfgv&$i!_z9b01g9H;(aGRybg z{mMpTZc0q1nr$K_HT0f@4^ZNCif>iU6y+#QFy+)-X4N6#sAokHf&7Xdq2*1)80nOg-Xw`~p$HGvS^g)@oGKHh!R+VzbGSz?!;PlS|tGfOgxt zE7z`43*4nZ$vj3MAx#MnY*W0|gCni3-0p2iy$x@{_uuSNO{mX7XKq@A?J8O5%)D<#X z>0NDwj5%7qSPD|56356Tg0ehCxV={O8TrEYvWnRG1>=3VMJ!fjpI;?{ zno`i1x^^six2wC^-O;-^WV@qxLJ%3dAK;4Va3_a%?TO#Q;oW=UJ2;H(iQmMbwI{xn z16*mJ`#FYRS;w>m>08~;Vu*;?63zX%rVc4IOvz=tW6K=#a|#S_9sE#27SqH!B5NL{ zj>^K$HFKqXLay#i`T{1C-+MxRoDErJB7cZtIKG>o2JRZ#uiGd7G(_BHJJ3hZa zSK3_@T)I^f;nrCpqlCMX4PISX+MsNgNb&vFp=N9Qvq$X$y4t9XYGs!P$)cyf7JV9!ZgfUuno|(wWt!kNW5v*MUXS!Z%l6Q5IXe?;BTQ<4 zAx`FXJRK*Sb$lMidJwz8W~FzXr{>iI;z&{|yq_Ux2;^k)5^*e)v@_(brY7_ZU{j-X zwr+_kPnK-LKpZi!cZvX)eN?Z#FXLm+V~{@7l_P!e9y&%>G0H?3YSkBl#Mz$$ThY4Q zW?N!wSh8W>DtE_^W0n(mn<@Kh{YJT<4~Bm=0wytx`8E zX@_~o`1OG!)3(#Xv88Oi$lr|Q)mEn`f?va3t@d4NKWb!CI?tQ*(+nDh-Jqd@h^6PS za$M@659GiE4;$e^RNA+y$U;?lld2f(6kK*UQ!r9xr>P9dz?SkE3&oz1AQT3Oslsw2 zRWqmI2E&lOrj}6n6tq1w#yPcid(YGxO`W0e}NX#NsS13rG0b*3HU4eT`TusRU6aLU6E~2iC?7(h$usJg}Y))>DH@D>-0<} zYz{ke3VQ{GvT){#Y;Wfd7uz})lue`kekaUf(2r@HC|9lD7bR9F*Fjh%wR!WR{}r^@ z7rj)jR3lnN$fu&KNX}AsZ*4rr=+P#G6vy3d*1@-Fy9E-4>Qx4 zm`x5c*#*fV(zt82iv}dpm=F026?cWm_D!Ipsg)!Fha5HB#qGU3ITN= z8~E6ZCy^spr;1v)q*aJI+qRVXd-5eUx$(I_r`#GR+}^;4YJ@h?C zr-9PI{iXX#`&8}0H^b}xZo?EQf@Qt=k5p5aCaluRcRF4NGo5sUu-To**u z%p9Uc{h_S~TLk)AZ_1%J(0~=aDf!_&qtPP6@^Lcwi3Ou?EoV#^g6>_#4c;zmAK#)@ zm6;U~5m)Btp6vJoA3O08?Ol!?PSmM#$b2$1jqt$m$+ifbya^%65CF84i$*eAZ(9fe z(m*3*SD48itb-`}^HW_-)FiGv?dm7o&PJF)&ygsyCXg;gR;}*qZT)$+c4#P0y^m_>%Q5 zNoO}~+_ZUa%cWbl&0n^C;qoi4+;P>;t9MVs@{OKU4SL24@y`BEf5O=Qfr*%$u z_|pcb_+ZPtcZI*x;?Cv%bePixe>%eHcD#|icbOfmee?cQ?c3&0)jl>$t|Uwx-o4b{ zRU6rCfIFGm$ll00RU0?6MFsC|!X?gOBVp_uHps42YR)#YAr5IHt8>6U)ZpN-*>hOW zR#Y4=v4gecVt=Z(uw^I@=~S7BVLPQg&1rwCwp`>-)fNIl^{(2o)}Pimo%E-I*@Qn8 z%t#2QcLlRG{klQ?_?%yyMT5cagIp z?+jEqGL@lt*C9S>9lC6dOJL!OjxPmMa|tE@HxPjmqlZq%u5=sOYoXw`5qYc5@{?B# z9k%Cqy!3o@<#Xf{#031*x3{oi7|l;vrn83k=;Z2hq{>rHy?;3smE$=FmI2P2yvMQ; zI7AMJ5-{=g5#C09Tv6XJuk_T{7%`7nbOFErwha3~tUJSIo}~>@H&&RcEKpShDqvO0 z7J_X=0=UF_bO3t4rBu1Pyx>Zxprspm>*S}TWXs}*P`9&mE4N72a3@!#?1czX?+!cN zx4g6TZf+qunkre+7Gq6rJglV560u9!X}vzhXtKqPM%hGJtI%7^qU=GeymY^Pv6POI zSa(@Mt~8vWrIaP-<|-*IE=yj{RZ_c#rRFMW=#liBnky%yT*vxdmU;^BR|{|*gmNW6 zXD|JwxG)c~galETR7l4$8mpo=)DU&&Ok{F*HrH4Ee6~_5f3$qR8~B|YqA0rl(Ny-} z#?OD6t9|<({Y4JPfA<&Drc=O8y!<<9-PK+52WR-Lzk5debOPhX4d4Fu{kQ*6<$l-r z0xP7D{tu@SUS%HERcdrsYQYk9|DLQ7^)DdVKyNHQcZPEy49%h*#AUa?RnH66%QtqWMmD#r|^^;OLgAAs8|XCbI`q2%f$8^GWJ(160wqS@Nwt6(jVSqj=xULa1q zDdK*Q_Rz*?xpZYj8_>DQp-?`-YY_E&5*dhH^X5k7K6~f#?sw2%Kw-Yfb{%>8<0sOx zQ5IL%NP%N8nVqG*40D9FDV6f-$`3&;H5bzcm-oV(q+q5^E&w*IYTpZwsw}oX@laa3 zH>uFV+T!RZT;(B=FI2rn_X(Y`{%o=R2{-T%Uk!4PY*{>;_=LTtd0*v>kW%0Ph7hEP zLIPZ}j~q!2kJJR}qyp8iGoV5%bw&eeM=}7`K;=mluqBFURF%3^P1y~o-DPWI`Ciy) znHD}o0Tne#uekwh63Y|RBnqr?Oa?tKw8}}7UEeaw22Cs4 zH|?cRx_zo2tHZ8BD-K&LzVT1d3X1lvK=Ur3u&Nb;q4L=od}ANJ0||rKs=Kx}SkGA- z?BBfiJZ~y1oPYCpe4ba2E8&=b_r&?$^~uR-$-}XM?2*`a$_CE+sPdun?t4F8>bUVE z>t$>&W@<>9Za8zEG(47GWGm$bVl>_&1f(~im|^1525(*E_N zxD6Ct+Wa6NH^BqfJVM=y5G^00NEN`|gh#dT*bRuk$g#_|dE9d(=O|@uEjZpC5p7H5 zBg>Gkt0PbPrj~(8{Bo(0T>YX^dNqF>mvW4)kMkbdVeZ^9}@vqrsDmz;eD(I66MWojaJg$#Kj)~ z3t_1RM0yEC3;DTY=p{gwU3q(y?1^vUEcR?ff@p5=)|oeWBSs-|0&sM*Alnk*Q=X3; zv#GqLJhd3VMV2ZB>ubGYd3$`*9)_)gkWD=m%GPT&e}RC!#-Aa^TI5qjLb6$pE3zn? zp}9gkT{R4Og>JZ#VMc_0o%fZs_}`zt!Wq9eePx|x7}vq?S6>lKzBhfvB^vt5?En6Z zE1^N(o4&GYrfa@#=Hh!kUy=8|H+@~x>8s}J_oc5WgWsFJvRb8UzJ6c&ipKlB=__kA zyXNcnp|5Y&O3<>x=mKjnjt1+Afq?l2h7Yz{;-%jsh+vx4CM1Xt2y3psB^uJ++vRM- z(&EE%6InO|yjF5cSuqq-w3zq`ycp5J-O&OraXu%iZiJ7>G+mQaVL;{wO}*6Ko+3Kv zecO5f4!nRF0d|X>JA87M*R?Lz-s7OJTW@Sw)o0p@6jHqt_C1}fkKPd4fj}8`ei47jq1|2w@3my38e5k-H1sXKN z;52P;2&(BbIIGa$LPm7eM=M9PUrnpfU}f`iG@!Y!2Mx{y%FvAl=cf&jN6lU)algr) zlMoZ%POGS)mDkX61Nob`o|Whjo>LH=9Ub}sB#nNc06_{+alfzFwhBd8Vq3rF ztwPb2eacakKE4qYWx8}I)&KucbQNh6dU^_XR`fKw)ggdqLrvZ~A6oKCfs*xrl2|}M zNjBuW5R|+STK2lIYt=_9v8!M6R-xpoK8-Dw-qNb&m`PV(4`wcSsmc%&NudWRD=TFx zR(9u<&FH2?3(2|s$XUYc1!W5q5PGPu20G*?2tr6O9XdB4Dx@37EHx2lQ^)S%hAYj8 ztF4xSBou{rk%{zfNb|t^m{@`^gdF$(wf80PQB~LfZ<&3vvO`#2B1l-Wk&pyXVFE!= zHU-=*49NsyRwfex*C1eR-Em)9(c&(xtyTMLwQ8%jw$|lWtF^Utsr}WqR;}7rE5iT# zJ@>ttH&!CHa8%QDV3RmtkT|C$+*yJ11lPPF&fj)IykbHimpX;Pv1|_o z&Bg*uy)@BdG-7gsYGKJe23a8}6^kBxvNBNc10_V^hrzR-K7QC>spA2IpOE0EPdXKn za}d2RJSXjg%#i?}wjZHVI__cm_B}S}0jM*IOuaP=sb{&286IU+7B7H@RJKocWSEX= zB(SZ=Fd2ks*&mp0vHxr!iF^#$!cmoo>4V{Elf~xdQALa0TSK zT>+`|Sn8%+2M87fvrnbZb-M!K+!sSUO$;=@V?qpv1Q%;(l}Pu}zKT#gyfWqIB>sfo z1WzY2S9-g0kI5co4ZIcpC9K$izqy@m_T(HJ;U@v64ezKMb{4!BSh|fZAIG8=MSgC5 zJC0FkI2@y2D)G4mYJB*Pf1~)J4alqduGYl^wnpVV;rZA zO$4B&^DbZiyo>E8^Ap|`a0z-u&4MY=C4s8fo(q0ie6EU@?Rj{&wrMjS46`4+GIJB4 zfP&r`vuQJ52F_#Z4|4fx7=Q2d%SXldz02g&+VeIurEq`(_JRx^Fk^61;nh0ACuBJ} znGhOUwm%IO+37UYtQW02yq}U z2#2wIvSqMMQ%gufbaxi|QLvYb(3Fs26cBo~+Q_5tN>nuDH4M82!w?`fVV+FFC1}9- z0_t?d#u5q+tWaSb4}vT}lw7iizCbOAL{MlXfJN3c>iDs%19zmN;~oA)go8k7Ky}4$ z$pPa}8)V|l(m33>j)m*gWZ-e_8bV$fDl`EhvfyVZAIGThm;%R8l_ul4IwI|XD@6cbn_C{8r8 zxp>NC#Z!uj##Z!ior(h=DA5THr>@=P-CdpIAd=j2g z(mzj`v_C`bK;kJA_otzsD^JP(ggj-kHm@jr*8#y+5M1H!?t`;nNG3T8#>1XDOSa-C zy*Ud+FgVLtMAIKAoMo)dS)d_605V2jY2jn{PYb6n!=9z|=_bKDS|7RmrR=yPjqFRtBRV_{oL zH8iu{du?cu-OwUwXi?G;2H2&)?Xx3{W&uRxj-$92KNx;Ev&vrG%YH@oay|&@-j^-9 zm!%u34!`0$0P#}E4I;mnS%6M1+GuPi*GMGk+gT+$i8#p+M*vA&cMg<9i!MMR48Iz~ zZmpp|GU*rHewRxt6XpB#QK8*Wh0;%j$$kR7AN_=J@tOCNm~XJOgXWw5`w3LMw?0CW zPuf493aa<1e=NIyEa@MpoXN>p{$3_yNSi(xW0;wmjE(ptic@j_iqpaSqfZ=2iqp9L zY3S#wIQ5#0F`Untj2XQrV~ETHO<*R7d5&$16GuKzp^&qUa9#`i`I`<1)#@{xv0)kl zy=n}W8y+Zn)fii^!Ym1T)fgA&$lc473u)7*T#Q3ioC6yJ?YkLgeE*zdzXsHS#5u+u zFr1^;lxx2^M^Sjk4-W{wVTB)wQfxbhVPXAULe3Fx9wPDP^#Bg1V=C9xmR^>Cc>V5Nyo#*`tJY^le)B_nC*W0#Aq2Ld?UXY=$vP z7{(}@VT?#I3_RH*!@wu$41;S~6vG($Nf^es{u#!8jiUpJVHEwBVH|)A170h}O7ADb zpnJAHd!%x_^l6Ly&tMoMZH6&Y7zVawOWHMpd*KvFo6aeQBsm3-*V|_&^Vt45#eNN- z1Bp`<{+Cl6fSf}1;oWae0d)(UqCoj&|ARS2fz2rjgi~PQY?4#>_rfWVHl0%pPI3xt zy0h<`;-LOH#eNMSa*E>^Wf8%y1Mmc;7W3GV5);hhiUu+sWngAJ%D}XEl!58-C;*f3 zC`g!$M?o%jJPIkeTWluj}L zlO%(LNs>WUHpw6pA(=s#<$x%y^B71X!7%{NO~%I{`YP$ghJ9eqUhICSJ@8$?+ByQ> zU_`PEVk8TLSg`4V2Sb5HGg_t>&l;rS)EI7Mor@g})nTT+)1_h&`wX4wJrL|znm)sG z=%0}o9C4Py7mVg3GAbi{W`xbe;CX>Dc7%(GdCA0b`?sVZZEkYPdn;n<29b#wjH$zk zz{13^iI%1I9FdqhgT7LUsnZcSDKT|$o%YAXfC6iOoX={=*q-)G9)^+hxyRJO%Z}RE zF?GbYp7gSh*`J0gGlt#Jeq!plSkdJVMu>jWNRW)#r(fC?Q-|uNCI;a!bGh+*mGJ*l&3zyRvuO$X?4j4p~6%F-=UQa)d;b;h*#-l zb;02hIGJY;Ru^pEfM`1*dRGV@@`Qv*h2Tjfbbldue%4~27EH(rtsOY3D`}z06AKL< z*cKYVw9w>PIWQk7-oR$HFk%ql;hc2o*aQnpaiLW>Et_35zP~N6!L_+OLs&AhD>?|7B4TY=91Ji+t?AEUG0E`czmH z95P^0!>CamxGV~Xi6N#N%@7tf%*CQ~vZy^o5hHE7OM5_aDu~Tf_kAj8^~0htlODZ4 zb04y(y-o!`m!%1e%2sLjsc;DW}5ZOm-T)^Sk&!OrBMCaw1>EATQ|6orK!MLKj=@BFp+ zH*ln-$9bL{v?VCMDu#Oa{%8|w1aQLB+dPGBCq9=EAd{s}W}bqcn{Utm@&&Q^oKl^Q z!|7o1Azna8Jbfj#iYy}v8Rk{1@9lW>!rTZqp2ft68F7-9n>EMI z<&sx243CT=?sv?G7T3aJ4He4cu8Z7k*fMbB1a@bXb4(F0fHB7un(%fxO^(%mumn z5^;=oZ{!{O^DOL1$(6qTLZ11-YUASe#6hgV!hXUC24+3{DhJdYLO(KqQH}3tYcbzL zesR>Mr{_@(>)_B>nnzT-eO4}ZT*cl=KqZgR^9#Cw6`wf^2u8Jv!fZ1as7n81%5zFl z4t8xUVug#m4;SGq)kWxnY*fAv9OXm|C#iF;2(lxd*miG!ADQ+?S+0+=BDwsi&q6#Z zJvInNYq9Sp@{LQw<)38ZHM=3`%G?&9%x*PM(tIAefSR2&7ru!|%b zZ=Xjd;S2WawzSnKhMFwnShnOMF>GWt+{#sx%f64m!?6jeC8bzu7r==L84s{4pvT!p zQc_^+yz~dyUoQOtHepMDfSt)-w$RdI#+Vl&VRTq5&X_2LiTqP1^0p!>EQs+vHNsviPUd-F3P^G z&n?mB6=JlzR^{4(SUQG11F^7cH7sVmOo9@KrGya}n=(I=Z@}KCR^{T>he?oU9=T0| zNWxXQV!^cov498(#Db8*4$II=#AN4b0Y?ucT<(T{NxKZteuv?YktI9*_jTr79}{No z)A8>!+hJiYltX2<3qg2rPK?@vvx2dtGofIZC%xF};HSIs$7e*d&}AWjbe_cKXlQEMxNO9)Wse^NQ{%BIriBR+``P0XWpj_K9}ZCH(l)4iQ);V@AT7iD=O!|e)j({93rc7+@mJ35<@vQuPJ?>!AC0}REk zl4grPjjBDAFwi_yL7@rM?6Y9WRQqHtq3|TNVsx*IC_$W#?;*LFf{u-vr22wev2X&n z*scI=*xMR^bcVQg@B!2>X>_vPq~_17;d@;wyZ43*8qp5O6SM;oq969!UzeMaS9mTB z&$7bM?1Nup--$jCtigAEKQHg|F~nV8hqB_aua80@#`;X%cNLMk&x4`Sw|(Uu!YGy# zND+sej|dHW7j$mNjvd_d;l4^ffg)nyN%H(5?&A(CL5L@>+KF%g4{TR*EC+mXnDYQ! zf(@cT=kmLlkscan|8($Eskc9bw_lFo)z#KkY9c1Jh-v zG%bp-)-p0X=aFjuJq~ zHQ<1xknMTP#O~8HFHLyyi@Y#;O3kni~TMo-dsb%KVJ+B0+j&H;XE9s8mnOs0Yqu8%F-v>#;l8#Po1Y4SMRcdVgOcr~T$T3f zY%jC|{gh-&2T4l@S(wKX3E--Hv<{>c(#tJ zVFrldgpMc0@E01x!@7i&!PIHsGuab7Wdqw0xTz3Fg$Vvl?sNl#hD~zN_#k7M8zeKH zkqVF$JweT#G|Y37v9^IHB(t*c#Ix$)XhLsu-4$bX&<5m2lL{&k!NIezst^O%&Y8jm zW)9igM~8?WCTttC~FN3!$-Z%7Jh2#w4y z2O=|jb^3!01~~@;8L_#U<$(*KPzLxu{E2f}>DIm{R(^L$m5 z#i7k!Q^OMK9!?VCKXUlGS12v~O;g7KXdHw-oH~Yc%h-P{g{UVemXJR~xcO2O04cM44id$HG3odq|pC=;0ba(*$+I1M=^msIR-|0 z2;C6?hH8(@)<7PBf{_7;0>QzyUUL=)1)h545vq-j$_1iK9w)5ll@$5YH(<|2M!Rv) z5%Io)UktlWYj5?4j zliL;H;BX8R(LyZGjz}#J6Pn4>+^EjT4)W}0C|X3KH;WWQ6h%WVEOm&&iYDI2eRgVRn`Y#*d+7w!q6_ zv8g;J+D<^R2*D|5sucxxFsKpQUr`pw zJMaNyOvMWc*;b4q@Ke&ES|CU|#d1JoTBo03>!5gz=ArL;iy3qnzOzgbD(XAS+`$ha z*X5`P%TM)Jn!%1BaVZ%MmX(7u%P0&n{zL*PmQNkv$DfY+@vzq-4mJE5N#zb^K%V}HUp!<^%{<7xeS8eVpbv*S%U4W+=Uyi{eq#IE z-X;0)r^Cd!my)1*x^qNH%+6gB52KWd)n`*B>|K%zwlyTHziAK2$Y@&gBQ1fohO${fy= zkqM$m$~-?N9vU--LdMRqGeoYez6bYw-TCPO<7S&^!U9E5r^MH=hlDqJj8Kw^VA2cj z0olUC@4!R?tYTJwOa%PMPh(Yxsa$-6!UQ~Wz9UY+{E^fvEVh?8anEZ-oItr&GrXiY zfjELVkr{10c{s%hSvkasn$FGz(rs}Pa)}f0cZ!yN#R*$Sv4du?uE0-TQE&&Mx`c1! zfR*P^j9~lbB-g-D1=`3paL%>|0?Uh;9W#J#XSWfPTsgdkorKYy#x*Rjhy(WWp5+MH zg4fM9)Q8G%3Ums~Q1#E0BUu?N!*%xggzK<-G8$UPJ(Z1colhLu zb%DaL8WNC|XBCCT4xP6QL=@&6_^h>%!ZgNHfj<>C^s^y3@zP*K2oSADZqtbssK`*~ z(E&W98;XVz(ek+FJ$MS$8xz_j&`Tlh;c1RI108vIph%dEmFSh5oeQ-Arte1OJxHJU{~VtZg9n65FAn%RRqSs>Xe4z%>zrE8JFP#luLC>Su3 zz*w9eZv%3!s5(J3(qky=g>L3c+-B#Y-`aUTHW7%^0Q4Z-1Y1G-{YHM#GbOn8Ij3UYC!=!w8De_!9O@| z9p@tqBF^A^a9&{2C$A7_fS2s$89GjBC)woDmp|2*RS1QAf>{d{0XLp#g_{MV9&W>6 zf5EM|kPXI)HI5Fhkn?SZZPdR7L=xbM%Q}uO#)-@5tKb<$L7rZWJT)9~Yz4OzLA_-f zjmI1V0CjJXlbhuPWXwNt$g!m}E1tw$w_C?se1OcH4|p!Jlx3fbta9TS&#Vo;#yQTY zh&nXc^(D(^3U$&msv#-#Gq#}anq4Z(=lRdN$`ncUEqJvBXE39>^2wI)#U3NDR~8Wl ziwHUFVQ(xVq*z2qv51gj5g~LPSVTy%21*#S9320I{!03E6ENP;Fi2=>bkWRgVT?qUbQePjndd(dl`PP=#m*nz_v_K6+z zW!3tF>9TEt8#vuA6XQrO3>z3OFu{X|=8eFZ^Gwk4IT50j8{PvlFpRPiEe|#Z4^OEE zcT;8ous|gCt4X_;08ZW2m;eR?nhrR;MM8(MLhx2taxh86*uFR@mK)mIG~0?Gm9dN# zHA4sE-*GPM04rwXB1sKv6>~EqZ)!YkI9ykL-mQfQZB!4Z z95VyuK;+RB1Z%_tDd^kIPjdFUuh1G{s6?{SNo_FzA~5qva1`|ts1|5&Q3%yC zXw336X3p}Rijf;Uf|gHRwa%YxonN&sghRx6Za9r-un9p|Su8rKOkN-Y`AXzA8c#l{ zOxTf8eOg4c@OvigS8`r7`MwGEXHvftYfv6y10$m;8F@agt?AHafl89?v*$SZ#a^e{ zgc&-HPLuNFF?qi@mdI^M5;zh8%3+CCj4_N#PA=3Pn!+GK@Ux{nMxKb-l9Po>Ie$9U zZ| zOH~~=<%|->)VT>g<-fI%G`YhHZsy*F45yWPFgb|Uu918Q*9y#hAY@fb5RX??%&~B* z1}LgDXel49$eO8$NPT3HSAC17s76`d8QO4UTcE}VexV(5*0G?$FEmeQz0x0m_PU^Y z7C1!-a8)P=f=IaVv!>xY+jAzgoHN!I=@W41hib+La_V1s0ZRX`xcq`o*=-1%v2NL(l17;rWfD)Ph_z_Rp)3Y91;)1-v<(*Uocmka*q8$PADf155 zS;`$*3a<;LvJCag(ky_kU?597Re@y|FuIhbcwhpPcX)q9fn7wvE<)~3tplkd0=rp}f9(y#2emj+*ADkUMYO>ZXg)}N+7!(wG`|M#T z{mH(QpS{rU>D9v?5KR(|{dB8TeUIImta`Fr73K8Nt@L%E8BR~RJCVK=^r!O*6Bl+O zdrG?S5;N(Yrv8ojMr)Bt%Q55C{06urM3vWrC?;}FIMhG@*vHJ0Xl6{P5}2ccNH8;} zu@hXDerIGNwp}0RS)QcFk1Sa&R>ee=9zVKRdAtQRW_+pGH#~k+y(zE2+Bq|aC;-F| zaMCX71q%(;C#uMt9r@v?K=?J-Ado7Cfj;IMmKWJU;DI_(M{qT86Pd}YW6cp2)+H9ry=h z059Pl2vC=Uqc0l{nZg_pU(m{;`zsjP{s&E@uqQI}$ZR<0)PKkV$|s~<2q7RGKH}{G z;X_GKEF6luPHQLxw|L92X264hW|V_RIuzr8l}%mP#3anhv9;m=wPKhq>?4o^aCVB0 zhfJU(73J3HqQ&OcX~&~-p;Dd3H^kpFbOaADhL3>47s4?0x7fN020s)_jyfTBX#Xkw zIzV+yhK8+xW57|bpwc6mFbaap^MetL;2_+T%5R}s2x}KA2kj?dE0Q!J{LO&Q=s61( zpnz~95#|~-JWPV239Cg8@`?t$B6A0PH9UkTbPVimU@!Da(M(CNws>1;UK1Oi^3%}j z2qtO|Qw(e54U2pcRUOtF?`$`WdPg^mytK@0Gg1IHDfUz?GW3+lgCmPU%Yp!O|9vBq zb0%nHUr#}|*gqp#YCZtAT6Y~3k-N*d)i+pFa*mrEzi+ceS z24Nrz$Z>qi3>PWrNA*Uo5CA$&n=s1>-m$Ia=G<@un>6&nk3KRCGZ}9}OFEE+_K{_pMm{Sp+v^?d$t3CW6a>s(kb*Y5F^jk()UNI(V0N2_n3aGNg;^NafoT=^ zs@s@FPb+(wV;dui>kI^_dZ(9*?+ z#ZV9Uu=FfosXZi0gvG5v#&<*A@bVv3-g9eK4oo}dL7)3JY##EN7 zHDnufK3gN9y&jWhDu$dp!-2@S0O&8UdK#kgi%LS*q76f(lwSer&``O}KJ}014BczT zs6)piZ)M)p@=#fwF_*fu4{vnXlZ)s$lt#gLWVG0twI-{Ok%US$n|UNGCzwemU@qVz z#(qIVqLzf%FN1jzb7s;$z!{&?1)*5dUvHAfqpgU@rk#wle~CcH)LHZ_bPMeRc#dQ$ z0v#nP-HlUx^~+AnnTm)JRJjjD7r4O-*hWw@* z4EU$%1eYCACs_3)u_{&Uz7@Bg?{6*2LeLz0?jFdfkd^g?0{j~~seqnDlpcmL_3XtfFmVpw zj)mgrHrTvSHM|tNuC|g>Ic4=jI{A4!dL2`fvq2JCfuaDAq(nSmaJCkq$`}TQ{3mAv zbAmI)*J{;#93TI{K==Nl?oN#1o@=bO)vPFPwB+Cj%{&BI+#Z#|c%(@N6GXO6L zfK>|&|NTMo4U8Q-k^nZfyi$OnNahPizAOM*j>&UmqX0nw9+Yqqvkn0;QH}sC2So7P zMLI0_ksQ({@Ge|Nab}Jr#Ma&h5+(XXL&XdeGy~Q~tkaW-!=7774u%P85jmvX2zJjf zxyhI+njy1bo~Lz0vVud1nc5L!ikC4pGvuA2SCYU|J**0r_&VkLpmkS1VD|Lra0u)8 zCF?2e%3*;}X3fB7Sb2;`!~w~;M4hDOc@1EjpeW=5pR2Mcu&%{)UTIjY$?s$^*=TTr z%~Wl}?}Ad2k?f2T(v+dum}L@CP!@AJ3Y;)?uWKh;7;tl8WMfVCn2;GULfwQ0i{$74 zux<=H$PnN;k1x4S9YN_BeT=7u)Zy{$#0#Be;6xEwXxe`%@HK}SkfcT;(BXumqX;hy z1ra^0q=Zn%E***pLM5=ERZLk1TPlmezz0?5CKrPNY`^Y*a#Kd1?8yt?0HZWv#1ZGhyplu zqlMHfs)Y<0Ium7rM%9Pw_&_5h29Py*ps1xnndl-Z!Jfg%IyRX%Y2n{}HZ7(3PGVy@ zGtFq8Xqk}2)KI07+~Y?Y$)H54Ytl$V>5kN_4bDQ7jl`2wBf;pY_hR@Z8)?Wi6^%q0 z6u(+{yN*z4f~u=bSe1?Bf545bl*4FTn5_eE;4eU);~L^1foiQYwgOdR3X3uKXO`fYp*-Lg}cPCoezzTiq5=kwb($lzAmmD}bU? zVAY#|9$SRf5~p+Mu}zMEc}Yv9)FQ74lqP`?`y%A0M9>=wQW8rX?&exY4jJGhT-WPL zzEdDcr!&fuat(>j)7^DBFnO@kGEQIT~T?zy*d#szDyYe8F+#9aK1)!>PL|f>C}OjB0cv z{q1WZr^pWVB5d0PX`wm?6zIu2SzZ`qjt_!*&SF2JSIq?0WtpjUSwvKcHcap)|BzuA zC|wP>B9jq>X8Nw_oAJQCVY->VVLHI%hUrL{+%O%v*c+xJQ*M|}>lY`L;QeG!%5hL< zg78g*7H-17J!fs&oLT*{1H1aAy{j+507Ay>pZ_rIKcE}>S-P$LV;YZMfk^J!Dk?$T-P|Dc7@5>#q*0HNPCWpV)Psac>On3x^&nH(ZXcQ~D7OGq z1Wk&Hp=H3A0 zlhA_DBPUegEYO-s9(*J+H++kZeZ5f2S=13D49i6=7cuk$6V_zGd?8OTS(5h17czg5 zJrAT2s9drU_);|j4W~+-QrWE%;$@{#1Vl)o6e}x2l2s31q4XToQ?yk_ z1@rXMP9TdsNzDXnKd6}?Q<~Rk*^vz#lx8BaT#jY}QI(;7x#RtnG_X95W{^>8@pEA~>q z%eV3&vbWbYacU!K1n$%%wvy;9ge!vB5Y+@}PkKT}QO>JHZ3h0FN*9UY*q+&-y>aZ7e^e zT=$CU1}VW%2CaRlLFsf$kU@C)z8K`+GL=fnMJ*1eLFatbM%#F_}q)?Q-E4qC)_D|Dn?pzX*Y_ob*}zxAeP&@ zk!G}~&D@_fm>?@LtCP>e&`u>Ks!&>PO9xTF(RiST9DHOFg+Qiw(gcM>`a9DF=X^R= zuw?;TKq+2%99&`}aqV9(;f>mTEMe8Z+J*-nSA?_oMx2a(QNA%yonBzm$8{zUICLb&ouDhhAtz#=AXnGRJ^@J_pOB zO%L2`*WbxBbZEhCb-n;}v%zh(Nq_(Vta^DHOH*bK>RMJF3isi&*ESc1zCA~mAbueD!ORh#mK-w>5;Q(dBlHW z#z$eCF2WrF6B@;3I6U4-sMKu8O}tPxZ~j!4LnJ(C@98kzRj^lIT8`9K?C z&XO&CLh>DSz>(qP&(W!$1>qobki7i(1x+rj?jF2hO;AwShc`fg+%$R5r%VT&hCS#{ z{-cGnw7LskzU+@ZPu>3aq2X+;?jKv8zyI97ocoKnG(um#;T!Mt+;;bE&kOX8=kEF0 zj)!mE^npNE{C(%2UVZ$bci+*%Cfot)(s9?r;mhvDOgfSm-e|?z8#=n%6R~)#(X!Sx zC)QZa?Waatn;WgxSo>;#nx^I9%EC1g*I-#{myajQY{h{jP=Yiq|kv;f(yigv|Xo7-bf^%`Sc ziRSibqPe5pYHmbbnwy&O?H^Ib7*~02JV+4=8L{;Zv97M>Q)3P~RE3?)Z5-LHC_Yrv zPDY-8(KT%V?hgEB2K;9m?x)PtV)2f?i|dTX8k)P<5<%QiK-|4{UO&Q}cyrq2zUtuc0@!bsGT`hiBeW3GI@hkSy7=Nvu1 zFEZ*~jirm{I{0Cqv+vocrg*e1X03@u8)I>&ZPy!$1}mmmtC|y5SG29OHD;xd(cERV zcO?2Eg3fry>bTv3DrX__whqutVhyON%4+Cn>+EPp^STg1343il4f0VqYUgc?51eoGUQ48JNuFGnSHGwY)lS&;Uug6`=%OFyarz^{7d!v;i;EHli{gk2 zXD@e}+|?Ot08<9BVfZ!(`|FHyaDmr%O}Dzb4xNlwhrWt(C!$@iiNwAvHDCtz;U41mGH`i$IXfJVd3})ZeU)lTic?K`XI6%9cadw=| zGas$ev@hWK8t}QPxI0LjGuvuxZfb&TZf^jFqpRDS6WxuV1@NfV9q|p$cU$n?LVV}I zw*wxX0YjlpzP|wPNpntm!r6c!k;$PTUYerKt+7T>2{2Haq~;YEJn`t(d)d;gZFR>K83r>g0Em-LCE~49zC1yS*!xuzE8z>AkjS3&wL=N(|O?VNX`m zM>-7Iv~*PoIKh6bz2pC;gfy2R;c!=4 zr~Xx_?;t#P;Awy-Wx)K-c|RlL{lbjz7XhYT>!iOO_%3z9_XEbV$>jUz0UzyxZw7pX z3#LxxPJb2P3cPP>j(35Qpv-#hDp5u~~q8i-Moe-kK7=nO_cXVzjY3OK# z%;fjUdJQtu`)deb&QF|rKZE|P1>D{4P->D}Mg5ri` z0gW+cke*vA{iR5|7}wmnR(ZMIB1O-3uet|M*>W)3uCmyv(e|>^cz0K#yR$6O(b3wl zhB|jym+0Un(P+G3O?6cXgl223q%j&_*W6y#+PtcaU+~@)Z;;=77>~v`;KN3F*xXUp z*3noR@6xm{fw?!MUWu75Z5C6&JnW&7w<>mB4_1qYD$Ec z;mWN2ay&Z*7izx~*%Nt043Tv#uH$eWZ{NwFPQ=CgNw_#c=kG7r@Cw{l;)>#0g{uKq zBd!>(CN1(tQTYAr3(yqiH^Wq&?7&kq;7A5smI1>zB}C$Ue-L02kpp*Syl>8c>oed* z8St?g@Jhh${GSI*qH)Um9bk-yB)k(a3Eg==1PCQDIq;VZMT`!7FVa)dN*llp(fI0) zvUqHDGx!Yn5g62J*p<3hQIRaEh&41+PnkBYan-a~L+zBxGT399O3F*COUosx;;?bB zG4d!3+4BaderwhhQ9Ce|Jhsh&2LndZBs>H#l@bV_*3;HOoHSzY0^TixCauDsBJ-sk zszKV(1ye$d9B0}<#c&=)UGi}`%r60Lh>Qa$mA|wqeL@^!GPODeBu=R;t*9z1Rs5gN zP=O~=KF7nKfDh7eeLODAhGT`-YFvw36a#Xet--TTyFNsILzi^7FyfO2sWJEv$^t61 zhG=KBp*ev$G|VJTnAzjmJ4i!;H4I4d;_k?}6q@7Fbt_JdH6X`r(BQ~%PCz@+WD$5y zd&uz7M6DGU)sQ$QpD+rprqvQtMa&bGg-cCIWEbC1rR6v@z*KWRsNQDCgz+5r>*jkNCewK6-K&KyE^ZD>7(ZaUi{Jn z-{1Mob-Vxm(MtknJ>L>}`_f~+pTF~Ufe+bv_9Z*UJaggXoo@=f>DuKL#U~y0^SL|U z7x>;MZrO41U2DG*-MLfXpPv8LLFUp&tf4cIL|JylM;2%vtXWUP>Bwo-yo-FYD zS3Pvq&z?SaTfxUw0{{N5i9@drRlPm+<3j|#=vz}KezdywTT4EkBk+uwkN@w>&;59F z%f|}@{_f9yK4Scw-#oVE<7EP0`NX*IJ#|CNW!pYJN#M;luR3#V>s`P8?#GP+|NU1h zvX5)J^J~BOxK-eT|N6tUDRk5sMP{lF75cU>Ux@`Jy7=>=OBU3tQ;%LRV$tO=cC*M0bMV%PNoU;Lflf9Hk= zU%utyUE2k|{LI98Pp`QBgWGrACGgYN-FES1opb)@(OusbxMgteLm#{o`0~rU9uWAx zii+6sad-dh!(ERGeAn5hKlAu&Gp`x6`$>U)GbT-ZH1DL>OLspf@Xxn)HD5D!>>cxW zza((ZPqa<%-uuOm8+N}g@SjKIZ*2_x{(-Z0zbWvO=Pl_7KKZ}}*X({@;K{M!uN^n^ z{%7ymy>qt~`M>h8ch>b!?S>!X{qpdi#^l}n+#7G~rV_-zRd+r1=k+^GnTToH=HTTY zte-Y><7gQV*br{8|B2I|y6WLtQJyrd^Q1qW{?wGSE?%lpxq+#p=Z|-8ul?U&w26WO zu2gjG(1XV>zTrGkOrTzU^yqUHH#Pj_Ceb)F?Y131zMwYt+q)lxM!~;d$L<_)QQ$|L zerZqCuN}3v?!!?hKl-l7cyPQw6x=eodEwSB7ztjc@6{8n2TFV7j*M?Q5_3 zTH8%^dP3kWEoXlF^!34aPtwm2c-^qyY`F3DW#3+>Zx;9mk6m}-)^krhcdLGZz=xiE z<&Pg*I`zkQ>6Z(9&$g@ndD6EhUhyOSdVznpV%s$j-Z1yKuj<oC4sNJ=XWP9efGuM?lWE&_>eib zZh!HN>pptMcvIlKIooetu;A41{n>b5;1So)y6^3a?mXXT?i6_P=3{Tkdwa|?7WR4O zg9#Ov{_*$Q^RAl#FD2oxWL3VYxX-y?=kksu!)|yE@I00&jWx*3-UlWdyWs|1dG=Ys3MGPLr!Uzvvpe0#y~zPcv4-RA)s;1swUyJV%Bw1>rc_l{ zRaH%`s;;W3s;!zfwR~#D)G1Rdr&dj!I<E2^hdS5{Y5Ppz)5uBooA zo>o&{Q&BUern080W@=4!O-)U0&9vI`+KSpKwUxD1wNq=WYinw2Yo|>^6{n&2X~=pS zKAVO|y(eFd&CtKPtV67-a&6v7CFy?-L=jhx8atJhkFt3 z@bayWi87@SXW1xL&mmbYQGAGX+xmZEX=&-nTHYv_nDPAx%$ul{RYQYk`5!<9q6X^2 za}Vwz+*zLU-ubQo-&0$P;2ywzKJGqOIvP~$zD$`_FqMw0&d0=fhDAvaql+?YS;fi* zGl5lIsU3&>sEL)9YT8!(23g4rU=Z%*>ou(h&qTXS!viMiabzk!g(%X^v zu_s=B{rB%==hx3~jP-2()&t*v=oc@%^VdyV&fk8^_aA!fM^8Qdt6$H%`oW(){?ya+ z7cD;a_%E#Z(nS}4^S=8ZdgSpRy^ud-=!qx&{U5t__hh%N{q4&+xntTpMvhu>=2>6= z#`hlh=a8YJ$ILx^(co@Ly=tob# z@ba~@uDZJX;xP|D^3?7{i%&SwAIQxcU-s79?Hx6T&aA7yHmYjXGZq{_qsBtT-HqR;J zdVcIZ=WcU^@0^d#6uMJG{p0hiDSfDJw#I*7Xb9*lEoO9Li@Zj?<_m+8Q_>G)l!Jd0c z5?MXZkI3@&?DqD&ob^_=x%on~Cb;pWK|S9I^!#*Utr_yw2IdB`a9aCl^90ZF!JbXS zMuvt27kGNU?7MS&)=*Eyjh>CaIv6|GczbTn-`JM7zIdV!Z!h%peBUfEbF-6lHUcz8 zbAsl>5;Yw=ga?8~2*+;Zc=GgoV}N&H{vds@G1M5IJ<>ZWFjhasY%v}%o;9A!`bF@0 z;|1ea`YYa7jW>+9tam&g7#|uSWj$;BjKdZ!zWA$Oy}{=XRv&uUG4DO|tY^@$>Y8JY zJ^PNYf8)WauMGI&moEBhk{(HpixxM=PP*^@f|33}C_HFr^|a}?-TuoLgEg02dYeBq zHc>aCw%>Z&j_*G3s4tu~c+~Wn^+(-u>ytm*<{v(y zXxw2lAA8(m9W?IX;>z0T^Nv`sWa;u_NOUV3Vofbw>(4y<%iHhx#@!D;^Yw3Rc(T3Y zvM&^!?lsXzO{QK}+H=k*vm$q-XKZk^canFGCud^M9lo)iv7X{URao!2WMfTmNGQ;A z^)#~~5G)^pO)d+(`m9>dk=`;-$RG62vc`L|g4O19?+Cvq%fDoPO=Whazcdiqc<|AS ziUSjm898WZaFJ(p?(Cf5{*Z58V0^GUJTo%UH^Uq99p%%#d8W7L{8gjp1wuWye4(g5 z9P(ukoaPTzPxj>XJbXyw(yV#G(A@fhd4Z*)rfu}k4UIAnpI>9<1VTQf+E_ij=YBnR zO7^Dfn!3Y1kAC@q&1Dxqd(PoE{?9qn{1ZLK%7a65L&e^K=iGf_>`2cvfBr0X^;I7P zHa|Zxc+)>Nj;S#7J%NoEe96<|%{GJnyvtVh{5{kaXdgPa=h{J8#|DS@d~xI9=9aqL z!CRJ0>iI>9Il^OX?40h^w`e^tOjzIvd5lf@a~2%h^MgZtx@Wn!pvu^oGuhLabxf$| z>$Rh@CwqdRabM51n|>L{#y)aP%%Knot@7tOf#TnyG1< zJeGE;ccpgnz-`)qq1#4hS+9(Kd$KiYV)?d79k;BUY~1$Bb$=DJ+nszGv308Gapf{2;Uk39h-2pJ=E!j zma)Xp$nW&whF8DJ7%?DQKR7TvTxyo1ZH6&kpAD=V2qX?5lDiW58ip6`o@fO0w}>&hE+6PPcd}rn~}d}Tob-qug<$s^J^=6-XY04G)xN(Y1x5kt>swkcjVe5 zcm*9m7`&@sRupFf?RmxYDolWP0y;ehF)cbPspF;T{i5LY){0||vDQS?I_yxZ9OdtV z-dTwI0$j94aXvwPlvf8X=lvr5=KI1!4?Xlzd@~%se}g-9!?$tI!rjqb`+NTp(t(}y z;U-yG+!|{F>xnn7UXz%xGGsxCZc0qIR<4{JQV;oiy44F?)Y==HH>`l&EK0+Z=+@K? z8*#mX!tzk&wsUoDR$Z>vbLG{V_Uhlf+E1>Xp=pnFyn8MfA^tYLeb<%~BW)!JjfuSR zj20fKk2&R`#=q3I|K+M%fA#){GyiBV9;QVucvcG^tRHqoY4Dnt&5vsb=a#*mIOxs4 zJ^k~*OP)u6b@$I67=Cu;E#|>v{s^yX zdFe0h??3hSODq1d)Y}Kr8cPutn6M7B$}gX&d?Vdx49$hTI~{48+q=7%81J3*r|uzr zXRAu?q@`K1-@H+e(uOs$hL%|4ifChFabqbzpHSM|wW6z|Emk}sRVL;X`<72v_bTKg z)plp()MrD#`LuVe>VWkU6?W2oh_uUaIWPvc_>CO+5xgUDJMcg8n*y>=a%*Z$Oo2t0 zhI)phY$$7tM^|^WllYwP=^rMp95|c-XJx?I88H3H{GJmtPQ-qU>lweMSr~=0vQ4dL z^Jw@ZDs=4!e-3MxPlb0iGk&E5Q~bE}wo`{Ak>?oXqA2oF0qyB;eu;D-Sp?)v@( zz?4=_9e!uO-{WAgJ?`5}Q~;0FZ@p3N6U$EqWv)7DeECUW&YJU0q5VyHX~`rf*u#QV z0>x|7E&jpV3K%zW@)qLmz$9EsqF!~REn-!7b1TA?xo9El0~))KhLh|jdnEG`aB4xM}=fHGxS z83+>&rM?4a0me}7T@RQ4qYB@0pv}h}V^6z(p0Xfyb#%uY5T-)s*(NwaoM8#PY%R^Ssq_L7+MzJFgM=OHorXq-=6KQa(aTI zt$4zs=%VKKrt;oAA{mlFJqQ8!u-T<3@gE>LvOZWw_v_E;`3PlMc{5hdR(~&17TG3QZ zTZucAc~M;)n9=~uGVOgnV5d%uCYj)Z=K_|o<&I4Igq?dzXKZze9mBz)RyrjutYbe( zr@!30JJld11*MO>b6oAGWL%1i;}WDG<7kr>dHBy-`1g4()#ek&`8o)XB2$V-H#`e4 z3*;XM?q*zWcuNL+ZU+2Cz)pT-9u%7n%)EwYz+~9Y`>puxPJb<6icsf0VK)I?2bc`n zc~98={szGA{I>y~jLS(+*!})%fGMh-_k?+I6D!0!BihIj7#o&xO7?}a{K$dF|Izr=5MdtL(U?hnExuJpgf zZ+H1GXTYxkcIWpjV0U{6yW8`>8Q=dr1AZ4U>%%`6{r6Js9en*2>D=`5H^BM07Im~k z`G~EK#g}%kl9320aWsQz=3%KFBUriWX+cL<7gp|dMdFAC1Dk7Zs8=DrvpX7*eyObL zTH>s5;}`)ym+L&-XFJQZW^=hBqMkF0LK-J-H-Ldgx>*%%ObgYu#Y!^WkCBF|xAWak z@SEj2F!9CycHrmn`=AV%?cX11*dI%?S2mEL!GI}$C`tafqS)TW7iguPvhwIyS9fb- z`tW@(JeWmjr z22|J+;mq_P3;j$~1fE3ifWnH1Z{Sf;f6>}OQ#M|DW8k2=Z$2{k=x5&L)27d!Q$P3cdGn80x@`F|#~ye52@O~pwR%nSDF}i-b=~?6 zr)}E2<=iix_oXjyz3lQUuDt5%Yp%WNYuj(W<<{G7zvEl?eEZ(}?*GpJeD?=GeDtx$ zfAr%ge)7LRf9@C0zwpZ!fA#8XzkB`n|M!PC{`jZAzWd($fBXACKKSsTsWvc-fPJmO zyy@|n9zWZl8|!evm*Fj}@C}F@<&Ul%STtp0U{KwqH-7Vx;6ar~zcYAM{Mpcuu~n~* z`zxCvt=P9lobxZWBH4&O+OXVigVS#l07Lgn_7gS}NrR_mz;kVwgEihBZFP^a^O27m zR*G;}cV}lu9I?x3?=C>v`5+i~`U~;QS+~^KjOC(SrV3%~taT!)XgJQlyn6Ws7L7d#HXi!xwN|DE&`@SD8XfvH#(x?tK9$%~t2sda;A z;!Y(ajQfeWGkuO0d32{1zBJ%GybKS?@E!Q_4A>EP&igAf-d~jgU!4J8lL23w0pFMb z-;@D!;0N){DW9=AZkPn-hO0ARcnhS{o$rs%fJx9K3g`VX8Su$A>>!=W1_h7<6X}&M zcq)FgKA#0cUf028QDx1}+M3Tum2GZppaFk579QF|&ze7H_A)NR!V-+K+GN`)m?(UD zPwKJYv#AuTo*@ysP87e1_%=^Yx05+IWIn{119RZJVGeRPOd@x~j6NZJbp28+={{n~ z;aJZFui~XGJKx&bXd`|<0Fg5hcjrBSvs}n45ok`jSCEdg7zeJwZ_5S0i}!^t z_yfQkoKE@|Ky$=_1Cu~Wa}Mmwfc=1}dViJf09|QOh!22^G;reJkZ3R{g zH!{S%s%6u2Cb$0+^5{mQwJ-|g7u>1Y{8Se?Z-~TP+Jz@8I zC`D=c6DE^)$~OVigW!hU?>!ms3A^8Om0FSOd&2Jby8*lNC+vQ|6YxQEig~O>*%FnHt^>=8X}#{i z#x80Z1|oLwq`MQ^=Q>OoW8!E^K(%b7e?O^f!s_PyZe}xJdb4*qNM*IIqr0_H?UR6I zrCekZZN>7U#tm4?j8#fqune~#hM=>#6Av4?VTde@jGhW?GHS?q2zw+}s?+|5HIwbK z2HO6?Me|YkTTxlp6XX<2q`^)2z7b7qYsRiJ_y!x&G$Rs0Rf-wQ@}!j6S3+$Op^9ag zu~d8PO$nO1TY+1rFYcNLMGCOv7_o{SoLUo(ga*LAV*l{E2-o5+hDN13ZZ5`ibW39! zPyn;5b_w7tT#%94rMPBe)oDjt`Zu&PN!Q`dGMJVZmD}Y>`*nRs)1r>VTt;FqNj86u zw0^e2CD3tnOz`7=00gGMh{7;3vY*8oBj~UB?XXz#2VO*+KC6>HU4kx+sJ^b3u0EEe zP{$oJ=Bs^hDn z2$aaqB0e!$1#&e^X6*8pa@ z4m=z%+ZDh)5BFiXlP|opK+)vKxRaM09b4Po%&ox^(bd=<3|D`-6~ZA z#kE8p{zlm-Hs zz~nY=X??bGrARV`=4I$aJaE?i%f3Ba0|T#>$TDRpv=SRSW2JUU8Fjb@a0FY#bS3Jr zqy&syS#4*-QMEv}i{r0jx!crix~&#QJ88G2Km~W7jWzfZ*#AV(ewH^L7zh+|&dq&~5`6+dzg0wKYUe(|j8c7#6x4R*X;MPU4bucwk{w@Pv7RR~sktirj z)^tD?#^4fd5D|f9+Amt8?a??SR8#ZnZl%ni-W{z_S~}WU(W5)o3GVP|r`>#@a!K?0 zSnJY`ro=kzXt$K_QfLs+#)GRi%hmw3Yp^*34d}2l@+ssIBGs>S2#!O0&4(2z~e5E1(1V5ep(ESB1Ms<>PzAf z#0LvM2zP^EAh8<$n|IWAXlR+^J_=fcp^K-6kS(S!dj)3`f{!0))sOOHrcDFiMw#bkq6EwaAk? z{_Hi~?JXOYsBf{8mc7>^Vj|jOt^w`Cag88D5TyJrj5GRGfFZ?)Q#?R~T0F@F zO4YVd+^|qJLNzF(700fDk~zPNYGz$4Dx-cLeRv)IUjl<4HlJF?jWsc+!FbxRFxu5J zd*Sg%9zT24?D*{Y^$Vh_=B4%@MA^1b;5s~VM>`Atj3CE|Ru4sl`a})xq(MLKG=4cD z%Wv2;%~sEmy>8-GYjYdhfEqwhG+@dYYjnR(23pxvp;lE2#_W)pl`9qhaFivGR)Vjv zZJ$FRWEoCDP9YiPJCEltR{6NeUq-RJkn7PV>gOCUU%~ZNTsPp_hU-RLH{tpkF1LIg z1Q;~96jiC`OjPA3Khx4}M><#GlE9tM&CI8x_jecK`2xXZy^Y3H-z9l7(zx@wg?Ul8 zOw!e{aGsK6)6)$`I-7{oliLqngJq$N6;}g#z00V>t&(?g%&U<-C)Sx*c-1$>3Pb$4OuS3ULsTjMUFVr&9sNM;wl0O zDo1RNBaWQZZb?Q`=&Dc2G5cevQK?^|Hn2Hq{YD#;qlY26leyg+$=;@%brf8*T2xf_ zA9Q2qvC?WY9?nuUGPO2@U?(BA923_3ce>_a>MTYwq@l1b$nmsO8-s3 z90ShxzXqJ`f@!yN*Z*5~`u)))*2Q9{wMvYWvPi3_C#6d`_4q&3+g-0)GvGS_4|COX zGGI5}4z}UmPM$W%NUVMlUk{=-5&Gzvy(O*fpQ7C%xs==v zB9=|aY@JRf#gLR1WV3~p1K8rn9!dxTiD@lCY`@vq-GC@%BLD?tbvFdB?l~Hk6fFy{ zxP@q}v1HW-)5{7sjH)P|I;FJSDo*aOVsUwXN%_>0^2!Omb+Gbvcli*8hD1TkUfW8# z+M7GQ^dgjNi*m7gdvz?aqA4c)qRTTWx2;=kySBQuV^y@ZYtq1WXuF80=!D!aY3fXL cG`A-vg;#aAwv-?^8d~h607q>}Y<=SY0fvU1O#lD@ From f7c07894470161630fcea5b59323430e70b97719 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 25 Oct 2021 20:17:34 +0000 Subject: [PATCH 092/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index 31ff109..718ce8b 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={860:(t,e,r)=>{const i=r(205),n=r(3),s=r(584),o=r(338),{version:a}=r(147),h=r(820),l=r(501),f=r(193);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},3:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},546:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},205:(t,e,r)=>{const i=r(3),n=r(546),{compress:s,decompress:o}=r(223),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},584:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},501:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},338:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},193:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/utils/wasm/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},223:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return B(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=B(g,d,t.subarray(p,m)):(g[p]=c,d=B(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=B(g,d+1,D))}return R(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var B=new e(z),C=new e(19),H=0;H>>4)<16)B[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=B[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)B[H++]=$}}var P=B.subarray(0,N),Z=B.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},147:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.6","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(860);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={860:(t,e,r)=>{const i=r(205),n=r(3),s=r(584),o=r(338),{version:a}=r(147),h=r(820),l=r(501),f=r(193);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},3:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},546:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},205:(t,e,r)=>{const i=r(3),n=r(546),{compress:s,decompress:o}=r(223),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},584:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},501:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},338:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},193:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},223:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return B(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=B(g,d,t.subarray(p,m)):(g[p]=c,d=B(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=B(g,d+1,D))}return R(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var B=new e(z),C=new e(19),H=0;H>>4)<16)B[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=B[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)B[H++]=$}}var P=B.subarray(0,N),Z=B.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},147:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.6","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(860);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index e4c9158..e1ca7f9 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n \n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n\t\tif (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n \n cb(buffer) {\n this.slices.push(buffer);\n }\n \n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n \n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n \n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n \n return u8;\n }\n \n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n \n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n \n set application(application) {\n const buffer = utf8encoder.encode(application);\n \n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const {version} = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n \n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n \n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n \n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n \n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/utils/wasm/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","offset","getUint32","static","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","rgbaToHSLA","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","iterateWithColors","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","async","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","svg","size","includes","TextEncoder","rasterize","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","indexOf","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","zlibSync","opts","adler","lv","fl2","opt","pre","post","st","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","buf","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"ImageScript.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,IAEzBD,EAAkB,YAAIC,IARxB,CASGK,MAAM,WACT,O,iBCVA,MAAMC,EAAM,EAAQ,KACdC,EAAM,EAAQ,GACdC,EAAS,EAAQ,KACjBC,EAAS,EAAQ,MACjB,QAACC,GAAW,EAAQ,KACpBC,EAAU,EAAQ,KAClBC,EAAU,EAAQ,KAClBC,EAAU,EAAQ,KAYxB,MAAMC,EAOFC,YAAYC,EAAOC,GAIf,GAFAA,IAAWA,GADXD,IAAUA,GAGE,EACR,MAAM,IAAIE,WAAW,yCACzB,GAAID,EAAS,EACT,MAAM,IAAIC,WAAW,yCAGzBC,KAAKC,UAAYJ,EAEjBG,KAAKE,WAAaJ,EAElBE,KAAKG,WAAa,IAAIC,YAAYP,EAAQC,EAAS,GAEnDE,KAAKK,SAAW,IAAIC,SAASN,KAAKG,YAElCH,KAAKO,QAAU,IAAIC,YAAYR,KAAKG,YAKpCH,KAAKS,OAAS,IAAIC,kBAAkBV,KAAKG,YAO7CQ,WACI,MAAO,SAASX,KAAKH,SAASG,KAAKF,UAOnCD,YACA,OAAOG,KAAKC,UAOZH,aACA,OAAOE,KAAKE,WAQhB,EAAGU,OAAOC,YACN,IAAK,IAAIC,EAAI,EAAGA,GAAKd,KAAKF,OAAQgB,IAC9B,IAAK,IAAIC,EAAI,EAAGA,GAAKf,KAAKH,MAAOkB,SACvB,CAACA,EAAGD,GAStB,qBACI,IAAIE,EAAS,EACb,IAAK,IAAIF,EAAI,EAAGA,GAAKd,KAAKF,OAAQgB,IAC9B,IAAK,IAAIC,EAAI,EAAGA,GAAKf,KAAKH,MAAOkB,SACvB,CAACA,EAAGD,EAAGd,KAAKK,SAASY,UAAUD,GAAQ,IAC7CA,GAAU,EAatBE,mBAAmBC,EAAGC,EAAGC,EAAGC,GACxB,QAAc,IAAJH,IAAa,IAAY,IAAJC,IAAa,IAAY,IAAJC,IAAa,EAAU,IAAJC,KAAe,EAU1FJ,kBAAkBC,EAAGC,EAAGC,GACpB,OAAO1B,EAAM4B,YAAYJ,EAAGC,EAAGC,EAAG,KAWtCH,mBAAmBM,EAAGC,EAAGC,EAAGJ,GAMxB,IAAIH,EAAGC,EAAGC,EAEV,GAPAG,GAAK,EACLC,EAAIE,KAAKC,IAAI,EAAGD,KAAKE,IAAI,EAAGJ,IAC5BC,EAAIC,KAAKC,IAAI,EAAGD,KAAKE,IAAI,EAAGH,IAC5BJ,EAAIK,KAAKC,IAAI,EAAGD,KAAKE,IAAI,EAAGP,IAIlB,IAANG,EACAN,EAAIC,EAAIC,EAAIK,MACT,CACH,MAAMI,EAAU,CAACC,EAAGC,EAAGC,KACfA,EAAI,IAAGA,GAAK,GACZA,EAAI,IAAGA,GAAK,GACZA,EAAI,EAAI,EAAUF,EAAc,GAATC,EAAID,GAASE,EACpCA,EAAI,GAAcD,EAClBC,EAAI,EAAI,EAAUF,GAAKC,EAAID,IAAM,EAAI,EAAIE,GAAK,EAC3CF,GAGLC,EAAIN,EAAI,GAAMA,GAAK,EAAID,GAAKC,EAAID,EAAIC,EAAID,EACxCM,EAAI,EAAIL,EAAIM,EAElBb,EAAIW,EAAQC,EAAGC,EAAGR,EAAI,EAAI,GAC1BJ,EAAIU,EAAQC,EAAGC,EAAGR,GAClBH,EAAIS,EAAQC,EAAGC,EAAGR,EAAI,EAAI,GAG9B,OAAO7B,EAAM4B,YAAgB,IAAJJ,EAAa,IAAJC,EAAa,IAAJC,EAAa,IAAJC,GAUxDJ,kBAAkBM,EAAGC,EAAGC,GACpB,OAAO/B,EAAMuC,YAAYV,EAAGC,EAAGC,EAAG,GAWtCR,kBAAkBC,EAAGC,EAAGC,EAAGC,GACvBH,GAAK,IACLC,GAAK,IACLC,GAAK,IAEL,MAAMQ,EAAMF,KAAKE,IAAIV,EAAGC,EAAGC,GAAIO,EAAMD,KAAKC,IAAIT,EAAGC,EAAGC,GACpD,IAAIG,EAAGC,EAAGC,GAAKG,EAAMD,GAAO,EAE5B,GAAIC,IAAQD,EACRJ,EAAIC,EAAI,MACL,CACH,MAAMU,EAAIN,EAAMD,EAEhB,OADAH,EAAIC,EAAI,GAAMS,GAAK,EAAIN,EAAMD,GAAOO,GAAKN,EAAMD,GACvCC,GACJ,KAAKV,EACDK,GAAKJ,EAAIC,GAAKc,GAAKf,EAAIC,EAAI,EAAI,GAC/B,MACJ,KAAKD,EACDI,GAAKH,EAAIF,GAAKgB,EAAI,EAClB,MACJ,KAAKd,EACDG,GAAKL,EAAIC,GAAKe,EAAI,EAI1BX,GAAK,EAGT,MAAO,CAACA,EAAGC,EAAGC,EAAGJ,EAAI,KAQzBJ,mBAAmBkB,GACf,MAAO,CAAEA,GAAS,GAAM,IAAOA,GAAS,GAAM,IAAOA,GAAS,EAAK,IAAc,IAARA,GAQ7ElB,kBAAkBkB,GACd,OAAOzC,EAAM0C,YAAYD,GAAOE,MAAM,EAAG,GAS7CC,WAAWxB,EAAGD,GAEV,OADAd,KAAKwC,qBAAqBzB,EAAGD,GACtBd,KAAKK,SAASY,UAAiD,MAAnCH,EAAI,GAAKd,KAAKH,SAAWkB,EAAI,KAAS,GAS7E0B,UAAU1B,EAAGD,GACTd,KAAKwC,qBAAqBzB,EAAGD,GAC7B,MAAM4B,EAA6C,MAAnC5B,EAAI,GAAKd,KAAKH,SAAWkB,EAAI,IAC7C,OAAOf,KAAKS,OAAOkC,SAASD,EAAKA,EAAM,GAS3CE,WAAW7B,EAAGD,EAAG+B,GAKb,OAJA9B,IAAMA,EACND,IAAMA,EACNd,KAAKwC,qBAAqBzB,EAAGD,GAC7Bd,KAAK8C,cAAc/B,EAAGD,EAAG+B,GAClB7C,KASX8C,cAAc/B,EAAGD,EAAG+B,GAChB7C,KAAKK,SAAS0C,UAA6C,IAAjCjC,EAAI,GAAKd,KAAKH,OAASkB,EAAI,IAAS8B,GAAY,GAQ9EL,qBAAqBzB,EAAGD,GACpB,GAAIkC,MAAMjC,GAAI,MAAM,IAAIkC,UAAU,gCAAgClC,MAClE,GAAIiC,MAAMlC,GAAI,MAAM,IAAImC,UAAU,gCAAgCnC,MAClE,GAAIC,EAAI,EACJ,MAAM,IAAIhB,WAAW,GAAGJ,EAAMuD,wBAAwBnC,QAC1D,GAAIA,EAAIf,KAAKH,MACT,MAAM,IAAIE,WAAW,GAAGJ,EAAMuD,wBAAwBnC,aAAaf,KAAKH,UAC5E,GAAIiB,EAAI,EACJ,MAAM,IAAIf,WAAW,GAAGJ,EAAMuD,wBAAwBpC,QAC1D,GAAIA,EAAId,KAAKF,OACT,MAAM,IAAIC,WAAW,GAAGJ,EAAMuD,wBAAwBpC,cAAcd,KAAKF,WAMtEoD,+BACP,MAAO,8DAeXC,KAAKf,GAED,GAAa,mBADOA,EAEhBpC,KAAKK,SAAS0C,UAAU,EAAGX,GAAO,GAClCpC,KAAKO,QAAQ4C,KAAKnD,KAAKO,QAAQ,QAC5B,CACH,IAAIS,EAAS,EACb,IAAK,IAAIF,EAAI,EAAGA,GAAKd,KAAKF,OAAQgB,IAC9B,IAAK,IAAIC,EAAI,EAAGA,GAAKf,KAAKH,MAAOkB,IAC7Bf,KAAKK,SAAS0C,UAAU/B,EAAQoB,EAAMrB,EAAGD,IAAI,GAC7CE,GAAU,EAKtB,OAAOhB,KAOXoD,QACI,MAAMC,EAAQ,IAAI1D,EAAMK,KAAKH,MAAOG,KAAKF,QAEzC,OADAuD,EAAM5C,OAAO6C,IAAItD,KAAKS,QACf4C,EAOAE,qCACP,MAAO,0BAOAC,yBACP,OAAQ,EASZC,MAAMC,EAAQC,EAAOhE,EAAM4D,yBACvB,MAAMF,EAAQrD,KAAK4D,UAAUF,EAAQC,GACrC,OAAO3D,KAAK6D,UAAUR,GAI1BO,UAAUF,EAAQC,EAAOhE,EAAM4D,yBAC3B,OAAe,IAAXG,EAAqB1D,KAClBA,KAAK8D,WAAW9D,KAAKH,MAAQ6D,EAAQ1D,KAAKF,OAAS4D,EAAQC,GAWtEI,OAAOlE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBAC/B,MAAMF,EAAQrD,KAAK8D,WAAWjE,EAAOC,EAAQ6D,GAC7C,OAAO3D,KAAK6D,UAAUR,GAW1BW,QAAQnE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBAChC,MAAMU,EAAcpE,EAAQC,EAASE,KAAKH,MAAQG,KAAKF,OAASA,EAASE,KAAKF,OAASD,EAAQG,KAAKH,MACpG,OAAOG,KAAKyD,MAAMQ,EAAaN,GAWnCO,IAAIrE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBAC5B,MAAMY,EAAS,IAAIxE,EAAME,EAAOC,GAGhC,OAFAE,KAAKgE,QAAQnE,EAAOC,EAAQ6D,GAC5BQ,EAAOC,UAAUpE,MAAOH,EAAQG,KAAKH,OAAS,GAAIC,EAASE,KAAKF,QAAU,GACnEE,KAAK6D,UAAUM,GAW1BE,MAAMxE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBAC9B,MAAMU,EAAcpE,EAAQC,EAASE,KAAKH,MAAQG,KAAKF,OAASD,EAAQG,KAAKH,MAAQC,EAASE,KAAKF,OAC7FqE,EAASnE,KAAKyD,MAAMQ,EAAaN,GACvC,OAAOQ,EAAOG,MAAMH,EAAOtE,MAAQA,GAAS,GAAIsE,EAAOrE,OAASA,GAAU,EAAGD,EAAOC,GAIxFgE,WAAWjE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBACnC,GAAI1D,IAAUF,EAAM6D,aAAe1D,IAAWH,EAAM6D,YAAa,MAAM,IAAIe,MAAM,yEAMjF,GALS1E,IAAUF,EAAM6D,YAAa3D,EAAQG,KAAKH,MAAQG,KAAKF,OAASA,EAChEA,IAAWH,EAAM6D,cAAa1D,EAASE,KAAKF,OAASE,KAAKH,MAAQA,GAE3EA,EAAQ8B,KAAK6C,MAAM3E,GACnBC,EAAS6B,KAAK6C,MAAM1E,GAChBD,EAAQ,EACR,MAAM,IAAIE,WAAW,yCACzB,GAAID,EAAS,EACT,MAAM,IAAIC,WAAW,yCAEzB,IAAIsD,EACJ,GAAIM,IAAShE,EAAM4D,wBAEd,MAAM,IAAIgB,MAAM,uBAErB,OAHIlB,EAAQrD,KAAKyE,4BAA4B5E,EAAOC,GAG7CuD,EAQXoB,4BAA4B5E,EAAOC,GAC/B,MAAMuD,EAAQ,IAAIrD,KAAKJ,YAAYC,EAAOC,GAE1C,IAAK,IAAIgB,EAAI,EAAGA,EAAIhB,EAAQgB,IACxB,IAAK,IAAIC,EAAI,EAAGA,EAAIlB,EAAOkB,IAAK,CAC5B,MAAM2D,EAAO/C,KAAK6C,MAAO1D,EAAId,KAAKF,OAAUA,GACtC6E,EAAOhD,KAAK6C,MAAOzD,EAAIf,KAAKH,MAASA,GAErC+E,EAA4B,GAAjB9D,EAAIjB,EAAQkB,GACvB8D,EAAsC,GAA5BH,EAAO1E,KAAKH,MAAQ8E,GAEpCtB,EAAMhD,SAAS0C,UAAU6B,EAAS5E,KAAKK,SAASY,UAAU4D,GAAQ,IAAQ,GAIlF,OAAOxB,EAWXiB,KAAKvD,EAAGD,EAAGjB,EAAOC,GAId,OAHID,EAAQG,KAAKH,QAAOA,EAAQG,KAAKH,OACjCC,EAASE,KAAKF,SAAQA,EAASE,KAAKF,QAEjCE,KAAK6D,UAAU7D,KAAK8E,WAAW/D,IAAKD,IAAKjB,IAASC,IAW7DgF,SAAS/D,EAAGD,EAAGjB,EAAOC,GAClBiB,IAAMA,EACND,IAAMA,EAEN,MAAMuC,EAAQ,IAAIrD,KAAKJ,YAAYC,EAAOC,GAE1C,IAAK,IAAIiF,EAAK,EAAGA,EAAKjF,EAAQiF,IAAM,CAChC,MAAMrC,GAAOqC,EAAKjE,GAAKd,KAAKH,MAAQkB,EACpCsC,EAAM9C,QAAQ+C,IAAItD,KAAKO,QAAQoC,SAASD,EAAKA,EAAM7C,GAAQkF,EAAKlF,GAGpE,OAAOwD,EAYX2B,QAAQjE,EAAGD,EAAGjB,EAAOC,EAAQsC,GAMzB,GALArB,KAAOA,EAAI,GACXD,KAAOA,EAAI,GACXjB,IAAUA,EACVC,IAAWA,EAEU,mBAAVsC,EAYJ,OAAOpC,KAAKiF,aAAalE,EAAGD,EAAGjB,EAAOC,EAAQsC,GAXjD,IAAK,IAAI2C,EAAK,EAAGA,GAAMjF,EAAQiF,IAC3B,IAAK,IAAIG,EAAK,EAAGA,GAAMrF,EAAOqF,IAAM,CAChC,MAAMC,EAAKD,EAAKnE,EACVqE,EAAKL,EAAKjE,EAChB,GAAIa,KAAKC,IAAIuD,EAAIC,GAAM,GAAKD,EAAKnF,KAAKH,OAASuF,EAAKpF,KAAKF,OACrD,SAEJ,MAAMuF,EAAKjD,EAAM8C,EAAIH,GACrB/E,KAAK8C,cAAcqC,EAAIC,EAAIC,GAKvC,OAAOrF,KAWXiF,aAAalE,EAAGD,EAAGjB,EAAOC,EAAQsC,GAC1BrB,EAAI,IACJlB,GAASkB,EACTA,EAAI,GAGJD,EAAI,IACJhB,GAAUgB,EACVA,EAAI,GAGR,MAAMwE,EAAQ3D,KAAKE,IAAIF,KAAKC,IAAIb,EAAIlB,EAAOG,KAAKH,OAAQ,GACxD,IAAI0F,EAAOD,EACX,KAAOvE,KAAOwE,GACVvF,KAAKK,SAAS0C,UAAU,GAAKwC,EAAOzE,EAAId,KAAKH,OAAQuC,GACzD,MAAMoD,EAAM,GAAKF,EAAQxE,EAAId,KAAKH,OAC5B4F,EAAQ,GAAK1E,EAAID,EAAId,KAAKH,OAEhC,IAAI6F,EAAS/D,KAAKE,IAAIF,KAAKC,IAAId,EAAIhB,EAAQE,KAAKF,QAAS,GACzD,KAAOgB,IAAM4E,GACT1F,KAAKS,OAAOkF,WAAW,GAAK5E,EAAI2E,EAAS1F,KAAKH,OAAQ4F,EAAOD,GAEjE,OAAOxF,KAWX4F,WAAW7E,EAAGD,EAAG+E,EAAQzD,GACrB,MAAM0D,EAAaD,GAAU,EAC7B,IAAK,IAAIE,EAAWpE,KAAKE,IAAI,EAAGf,EAAI+E,GAASE,GAAYpE,KAAKC,IAAId,EAAI+E,EAAQ7F,KAAKF,QAASiG,IACxF,IAAK,IAAIC,EAAWrE,KAAKE,IAAI,EAAGd,EAAI8E,GAASG,GAAYrE,KAAKC,IAAIb,EAAI8E,EAAQ7F,KAAKH,OAAQmG,KAClFA,EAAWjF,IAAM,GAAKgF,EAAWjF,IAAM,EAAIgF,GAC5C9F,KAAK8C,cAAckD,EAAUD,EAA2B,mBAAV3D,EAAuBA,EAAM4D,EAAWjF,EAAI8E,EAAQE,EAAWjF,EAAI+E,GAAUzD,GAIvI,OAAOpC,KASXiG,WAAWpE,GAAM,EAAOqE,EAAa,GACjC,MACMJ,GADMnE,KAAKE,EAAM,MAAQ,OAAO7B,KAAKH,MAAOG,KAAKF,QAAU,IACvC,EACpBqG,EAAUnG,KAAKH,MAAQ,EACvBuG,EAAUpG,KAAKF,OAAS,EAE9B,IAAK,MAAOiB,EAAGD,KAAMd,KAAM,CACvB,MAAMqG,GAAsBtF,EAAIoF,IAAY,GAAKrF,EAAIsF,IAAY,EAC3DE,EAA8C,IAAjCxF,EAAI,GAAKd,KAAKH,OAASkB,EAAI,IAAU,EACpDsF,EAAqBP,EACrB9F,KAAKS,OAAO6F,GAAY,EACnBJ,IACLlG,KAAKS,OAAO6F,IAAa3E,KAAKE,IAAI,EAAGF,KAAKC,IAAI,EAAG,EAAKyE,EAAqBP,EAAcI,GAAc,MAG/G,OAAOlG,KASXuG,QAAQA,EAASC,GAAW,GACxB,GAAIxD,MAAMuD,IAAYA,EAAU,EAC5B,MAAM,IAAIxG,WAAW,yBAIzB,OAFAC,KAAKyG,sBAAsBF,EAASC,EAAU,GAEvCxG,KASX0G,IAAIC,EAAYH,GAAW,GACvB,GAAIxD,MAAM2D,IAAeA,EAAa,EAClC,MAAM,IAAI5G,WAAW,4BAIzB,OAFAC,KAAKyG,sBAAsBE,EAAYH,EAAU,GAE1CxG,KASX4G,MAAMD,EAAYH,GAAW,GACzB,GAAIxD,MAAM2D,IAAeA,EAAa,EAClC,MAAM,IAAI5G,WAAW,4BAIzB,OAFAC,KAAKyG,sBAAsBE,EAAYH,EAAU,GAE1CxG,KASX6G,KAAKF,EAAYH,GAAW,GACxB,GAAIxD,MAAM2D,IAAeA,EAAa,EAClC,MAAM,IAAI5G,WAAW,4BAIzB,OAFAC,KAAKyG,sBAAsBE,EAAYH,EAAU,GAE1CxG,KASXyG,sBAAsBK,EAAON,EAAUxF,GACnC,IAAK,IAAI+F,EAAI/F,EAAQ+F,EAAI/G,KAAKS,OAAOuG,OAAQD,GAAK,EAC9C/G,KAAKS,OAAOsG,GAAKD,GAASN,EAAW,IAAMxG,KAAKS,OAAOsG,IAS/DE,UAAUH,EAAON,GAAW,GACxB,GAAIxD,MAAM8D,IAAUA,EAAQ,EACxB,MAAM,IAAI/G,WAAW,2BAEzB,OAAOC,KAAKmD,MAAK,CAACpC,EAAGD,KACjB,MAAOU,EAAGC,EAAGC,EAAGJ,GAAK3B,EAAMuH,cAAclH,KAAKyC,UAAU1B,EAAGD,IAC3D,OAAOnB,EAAMuC,YAAYV,EAAGC,EAAGqF,GAASN,EAAW,EAAI9E,GAAIJ,MAUnEqF,WAAWG,EAAON,GAAW,GACzB,GAAIxD,MAAM8D,IAAUA,EAAQ,EACxB,MAAM,IAAI/G,WAAW,4BAEzB,OAAOC,KAAKmD,MAAK,CAACpC,EAAGD,KACjB,MAAOU,EAAGC,EAAGC,EAAGJ,GAAK3B,EAAMuH,cAAclH,KAAKyC,UAAU1B,EAAGD,IAC3D,OAAOnB,EAAMuC,YAAYV,EAAGsF,GAASN,EAAW,EAAI/E,GAAIC,EAAGJ,MAWnE8C,UAAU+C,EAAQpG,EAAI,EAAGD,EAAI,GACzBC,IAAMA,EACND,IAAMA,EAEN,IAAK,IAAIsG,EAAK,EAAGA,EAAKD,EAAOrH,OAAQsH,IAAM,CACvC,IAAIC,EAAWvG,EAAIsG,EACnB,KAAIC,EAAW,GAAf,CACA,GAAIA,GAAYrH,KAAKF,OAAQ,MAE7B,IAAK,IAAIwH,EAAK,EAAGA,EAAKH,EAAOtH,MAAOyH,IAAM,CACtC,IAAIC,EAAWxG,EAAIuG,EACnB,GAAIC,EAAW,EAAG,SAClB,GAAIA,GAAYvH,KAAKH,MAAO,MAE5B,MAAMmB,EAAS,GAAKuG,EAAWF,EAAWrH,KAAKH,OACzC2H,EAAKL,EAAO9G,SAASY,UAAU,GAAKqG,EAAKF,EAAKD,EAAOtH,QAAQ,GAC7D4H,EAAKzH,KAAKK,SAASY,UAAUD,GAAQ,GAEvB,MAAV,IAALwG,GAAqBxH,KAAKK,SAAS0C,UAAU/B,EAAQwG,GAAI,GACrC,IAAV,IAALA,GAAqBxH,KAAKK,SAAS0C,UAAU/B,EAAQyG,GAAI,GAC9DzH,KAAKK,SAAS0C,UAAU/B,EAAQrB,EAAM+H,gBAAgBF,EAAIC,IAAK,KAI5E,OAAOzH,KASXkB,uBAAuBsG,EAAIC,GACvB,MAAME,EAAU,IAALH,EACLI,EAAQD,EAAK,EACbE,EAAY,IAAMF,EAIxB,OAAc,IAHHC,GAASJ,IAAO,IAAMK,GAAaJ,IAAO,KAAQ,IAGtC,IAAY,IADxBG,GAASJ,GAAM,GAAK,KAAQK,GAAaJ,GAAM,GAAK,MAAU,IAC7B,IAAY,IAF7CG,GAASJ,GAAM,EAAI,KAAQK,GAAaJ,GAAM,EAAI,MAAU,IAEN,EAAgC,IAA1B9F,KAAKE,IAAI8F,EAAS,IAALF,GAOxFK,SACI,IAAK,MAAO/G,EAAGD,EAAGsB,KAAUpC,KAAK+H,oBAC7B/H,KAAK8C,cAAc/B,EAAGD,EAAK,WAAasB,EAAS,WAAuB,IAARA,GAEpE,OAAOpC,KAOXgI,cACI,IAAK,MAAOjH,EAAGD,EAAGsB,KAAUpC,KAAK+H,oBAAqB,CAClD,MAAOvG,EAAGC,EAAGC,EAAGJ,GAAK3B,EAAMuH,cAAcvH,EAAM0C,YAAYD,IAC3DpC,KAAK8C,cAAc/B,EAAGD,EAAGnB,EAAMuC,YAAYV,EAAGC,EAAG,EAAIC,EAAGJ,IAG5D,OAAOtB,KAOXiI,mBACI,IAAK,MAAOlH,EAAGD,EAAGsB,KAAUpC,KAAK+H,oBAAqB,CAClD,MAAOvG,EAAGC,EAAGC,EAAGJ,GAAK3B,EAAMuH,cAAcvH,EAAM0C,YAAYD,IAC3DpC,KAAK8C,cAAc/B,EAAGD,EAAGnB,EAAMuC,YAAYV,EAAG,EAAIC,EAAGC,EAAGJ,IAG5D,OAAOtB,KAOXkI,YACI,IAAK,MAAOnH,EAAGD,EAAGsB,KAAUpC,KAAK+H,oBAAqB,CAClD,MAAOvG,EAAGC,EAAGC,EAAGJ,GAAK3B,EAAMuH,cAAcvH,EAAM0C,YAAYD,IAC3DpC,KAAK8C,cAAc/B,EAAGD,EAAGnB,EAAMuC,YAAY,EAAIV,EAAGC,EAAGC,EAAGJ,IAG5D,OAAOtB,KAOXmI,SAASC,GACL,IAAK,MAAOrH,EAAGD,EAAGsB,KAAUpC,KAAK+H,oBAAqB,CAClD,MAAOvG,EAAGC,EAAGC,EAAGJ,GAAK3B,EAAMuH,cAAcvH,EAAM0C,YAAYD,IAC3DpC,KAAK8C,cAAc/B,EAAGD,EAAGnB,EAAMuC,YAAYV,EAAI4G,EAAU,IAAK3G,EAAGC,EAAGJ,IAGxE,OAAOtB,KAOXqI,eACI,IAAIC,EAAW,CAAC,EAAG,EAAG,GAClBC,EAAU,EACd,IAAK,IAAI7F,EAAM,EAAGA,EAAM1C,KAAKS,OAAOuG,OAAQtE,GAAO,EAAG,CAClD,MAAM8F,EAAOxI,KAAKS,OAAOkC,SAASD,EAAKA,EAAM,GAC7C,IAAK,IAAIqE,EAAI,EAAGA,EAAI,EAAGA,IACnBuB,EAASvB,IAAMyB,EAAKzB,GACxBwB,GAAWC,EAAK,GAAK,IAGzB,OAAO7I,EAAM4B,eAAe+G,EAASG,KAAIC,GAAKA,EAAIH,IAAU,KAUhEI,cAAcC,GAAc,EAAMC,GAAc,EAAMC,EAAc,IAChE,MAAMC,EAAc,IAAIC,MAAM,QAC9B,IAAK,IAAIjC,EAAI,EAAGA,EAAI/G,KAAKS,OAAOuG,OAAQD,GAAK,EAAG,CAC5C,MAAM3E,EAAQpC,KAAKK,SAASY,UAAU8F,GAAG,IAClCvF,EAAGC,EAAGC,GAAK/B,EAAMuH,cAAcvH,EAAM0C,YAAYD,IAAQqG,KAAIC,MAAa,GAAJA,KAC7E,GAAIE,GAAelH,EAAIoH,EAAa,SACpC,GAAID,GAAenH,EAAI,GAAOoH,EAAa,SAC3C,MAAMG,EAAMzH,GAAK,GAAKC,GAAK,EAAIC,EAC/BqH,EAAYE,IAAQF,EAAYE,IAAQ,GAAK,EAGjD,IAAIC,GAAiB,EACjBC,EAAqB,EAOzB,GANAJ,EAAYK,SAAQ,CAACC,EAAItC,KACjBsC,EAAKH,IACTA,EAAgBG,EAChBF,EAAqBpC,OAGG,IAAxBoC,EACA,OAAOnJ,KAAK2I,cAAcC,EAAaC,EAAaC,EAAc,GAEtE,MAAMtH,EAAK2H,IAAuB,GAAM,GAClC1H,EAAK0H,IAAuB,EAAK,GACjCzH,EAAyB,GAArByH,EAEV,OAAOxJ,EAAMuC,YAAYV,EAAI,GAAMC,EAAI,GAAMC,EAAI,GAAM,GAQ3D4H,OAAOC,EAAOxF,GAAS,GACnB,GAAIwF,EAAQ,KAAQ,EAAG,OAAOvJ,KAC9B,GAAIuJ,EAAQ,KAAQ,EAAG,OAAOvJ,KAAKwJ,iBAEnC,MAAMC,EAAM9H,KAAK+H,IAAMH,EAAQ,KAEzBI,EAAMhI,KAAKgI,IAAIF,GACfG,EAAMjI,KAAKiI,IAAIH,GAEf5J,EAAQkE,EACRpC,KAAKkI,IAAI7J,KAAKH,MAAQ8J,GAAOhI,KAAKkI,IAAI7J,KAAKF,OAAS8J,GACpD5J,KAAKH,MACLC,EAASiE,EACTpC,KAAKkI,IAAI7J,KAAKH,MAAQ+J,GAAOjI,KAAKkI,IAAI7J,KAAKF,OAAS6J,GACpD3J,KAAKF,OAELgK,EAAM,IAAInK,EAAME,EAAOC,GAEvBiK,EAASlK,EAAQ,EAAI,GACrBmK,EAASlK,EAAS,EAAI,GACtBmK,EAASjK,KAAKH,MAAQ,EAAI,GAC1BqK,EAASlK,KAAKF,OAAS,EAAI,GAEjC,IAAI0B,EAAI,EACR,EAAG,CACC,IAAI2I,EAAI,EACR,MAAMC,EAAOH,EAASN,GAAOnI,EAAIwI,GAC3BK,EAAOH,EAASN,GAAOpI,EAAIwI,GAEjC,EAAG,CACC,MAAMM,EAAKF,EAAOR,GAAOO,EAAIJ,GACvBQ,EAAKF,EAAOV,GAAOQ,EAAIJ,GAC7BpK,EAAM6K,gBAAgBxK,KAAM8J,EAAKK,EAAG3I,EAAG8I,EAAIC,SACtCJ,IAAMtK,SACV2B,IAAM1B,GAEf,OAAOE,KAAK6D,UAAUiG,GAO1BN,iBACI,IAAIxI,EAAS,EAEb,IADAhB,KAAKS,OAAOgK,UACLzJ,EAAShB,KAAKS,OAAOuG,QAAQhH,KAAKS,OAAOkC,SAAS3B,EAAQA,GAAU,GAAGyJ,UAE9E,OAAOzK,KAYXkB,uBAAuBwJ,EAAKZ,EAAKa,EAAIC,EAAIC,EAAIC,GACzC,MAAMC,IAAOF,EACPG,IAAOF,EACPG,EAAKJ,EAAKE,EACVG,EAAKJ,EAAKE,EACVG,EAAYrB,EAAIrJ,OAAOkC,SAAS,GAAKgI,EAAKC,EAAKd,EAAIjK,QAAS,GAE5DuL,EAAM,CACRjK,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,GAGP3B,EAAM0L,SAASN,EAAIC,GAAK,EAAIC,IAAO,EAAIC,GAAKE,EAAKV,GACjD/K,EAAM0L,SAAS,EAAIN,EAAIC,EAAIC,GAAM,EAAIC,GAAKE,EAAKV,GAC/C/K,EAAM0L,SAASN,EAAI,EAAIC,GAAK,EAAIC,GAAMC,EAAIE,EAAKV,GAC/C/K,EAAM0L,SAAS,EAAIN,EAAI,EAAIC,EAAIC,EAAKC,EAAIE,EAAKV,GAE7CS,EAAU,GAAKC,EAAI9J,EACnB6J,EAAU,GAAKC,EAAIjK,EAAIiK,EAAI9J,EAC3B6J,EAAU,GAAKC,EAAIhK,EAAIgK,EAAI9J,EAC3B6J,EAAU,GAAKC,EAAI/J,EAAI+J,EAAI9J,EAI/BJ,gBAAgBoK,EAAQC,EAAQC,EAAQJ,EAAKV,GACzC,GACIY,EAAS,GACNC,EAAS,GACTD,EAASZ,EAAI7K,OACb0L,EAASb,EAAI5K,OAClB,CACE,MAAMkB,EAAS,GAAKsK,EAASC,EAASb,EAAI7K,OACpC4L,EAAYf,EAAIjK,OAAOkC,SAAS3B,EAAQA,EAAS,GAEjD0K,EAAKF,EAASC,EAAU,GAE9BL,EAAI9J,GAAKoK,EACTN,EAAIjK,GAAKuK,EAAKD,EAAU,GACxBL,EAAIhK,GAAKsK,EAAKD,EAAU,GACxBL,EAAI/J,GAAKqK,EAAKD,EAAU,IAShC5H,UAAUR,GAON,OANArD,KAAKC,UAAYoD,EAAMpD,UACvBD,KAAKE,WAAamD,EAAMnD,WACxBF,KAAKK,SAAWgD,EAAMhD,SACtBL,KAAKO,QAAU8C,EAAM9C,QACrBP,KAAKS,OAAS4C,EAAM5C,OAEhB4C,aAAiBsI,EACVA,EAAMC,KAAK5L,KAAMqD,EAAMwI,SAAUxI,EAAMyI,QAASzI,EAAM0I,QAAS1I,EAAM2I,cAEzEhM,KAQXkB,gBAAgB+K,GACZ,MAAMC,EAAUC,OAAOD,QAAQD,GAAQG,MAAK,CAAC9K,EAAGD,IAAMC,EAAE,GAAKD,EAAE,KACzDgL,EAAYH,EAAQzD,KAAI6D,GAAKC,WAAWD,EAAE,MAC1CE,EAASN,EAAQzD,KAAI6D,GAAKA,EAAE,KAElC,GAAyB,IAArBD,EAAUrF,OAAc,MAAM,IAAIjH,WAAW,gCAC5C,GAAyB,IAArBsM,EAAUrF,OACf,MAAO,IAAMwF,EAAO,GACjB,GAAyB,IAArBH,EAAUrF,OAAc,CAC/B,MAAMyF,EAAWzM,KAAK0M,aAAaF,EAAO,GAAIA,EAAO,IACrD,OAAOG,GACCA,GAAYN,EAAU,GAAWG,EAAO,GACxCG,GAAYN,EAAU,GAAWG,EAAO,GACrCC,GAAUE,EAAWN,EAAU,KAAOA,EAAU,GAAKA,EAAU,KAI9E,MAAMO,EAASjL,KAAKC,OAAOyK,GACrBQ,EAASlL,KAAKE,OAAOwK,GAC3B,IAAIS,EAAY,GAEhB,IAAK,IAAI/F,EAAI,EAAGA,EAAIsF,EAAUrF,OAAQD,IAAK,CACvC,IAAIgG,EAASV,EAAUtF,EAAI,GAC3B,QAAeiG,IAAXD,EAAsB,SAE1B,IAAIE,EAASZ,EAAUtF,GAEnBmG,EAASV,EAAOzF,EAAI,QACTiG,IAAXE,IAAsBA,EAASV,EAAOzF,IAE1C,MAAMoG,EAASX,EAAOzF,GAChB0F,EAAWzM,KAAK0M,aAAaQ,EAAQC,GAE3CL,EAAUM,KAAK,CAACxL,IAAKmL,EAAQlL,IAAKoL,EAAQR,SAAAA,IAG9C,OAAOE,IACH,GAAIA,GAAYC,EAAQ,OAAOE,EAAU,GAAGL,SAAS,GACrD,GAAIE,GAAYE,EAAQ,OAAOC,EAAUA,EAAU9F,OAAS,GAAGyF,SAAS,GAExE,IAAK,MAAMA,KAAYK,EACnB,GAAIH,GAAYF,EAAS7K,KAAO+K,GAAYF,EAAS5K,IACjD,OAAO4K,EAASA,UAAUE,EAAWF,EAAS7K,MAAQ6K,EAAS5K,IAAM4K,EAAS7K,MACtF,MAAM,IAAI7B,WAAW,8BAA8B4M,MAS3DU,aAAaxH,EAASlE,KAAKC,IAAI5B,KAAKH,MAAOG,KAAKF,QAAU,GACtD,MAAMgG,EAAaD,GAAU,EAC7B,IAAK,IAAI9E,EAAI,EAAGA,GAAK8E,EAAQ9E,IAAK,CAC9B,MAAMuM,GAAQvM,EAAI8E,IAAW,EAC7B,IAAK,IAAI/E,EAAI,EAAGA,GAAK+E,EAAQ/E,IACrBwM,GAAQxM,EAAI+E,IAAW,EAAIC,IAC3B9F,KAAKS,OAAwC,IAA/BK,EAAI,GAAKd,KAAKH,MAAQkB,EAAI,GAAS,GAAK,GAIlE,IAAK,IAAIA,EAAI,EAAGA,GAAK8E,EAAQ9E,IAAK,CAC9B,MAAMuM,GAAQvM,EAAI8E,IAAW,EAC7B,IAAK,IAAI/E,EAAId,KAAKF,OAAS+F,EAAQ/E,GAAKd,KAAKF,OAAQgB,IAC7CwM,GAAStN,KAAKF,OAASgB,EAAK+E,IAAW,EAAIC,IAC3C9F,KAAKS,OAAwC,IAA/BK,EAAI,GAAKd,KAAKH,MAAQkB,EAAI,GAAS,GAAK,GAIlE,IAAK,IAAIA,EAAIf,KAAKH,MAAQgG,EAAQ9E,GAAKf,KAAKH,MAAOkB,IAAK,CACpD,MAAMuM,GAAStN,KAAKH,MAAQkB,EAAK8E,IAAW,EAC5C,IAAK,IAAI/E,EAAI,EAAGA,GAAK+E,EAAQ/E,IACrBwM,GAAQxM,EAAI+E,IAAW,EAAIC,IAC3B9F,KAAKS,OAAwC,IAA/BK,EAAI,GAAKd,KAAKH,MAAQkB,EAAI,GAAS,GAAK,GAIlE,IAAK,IAAIA,EAAIf,KAAKH,MAAQgG,EAAQ9E,GAAKf,KAAKH,MAAOkB,IAAK,CACpD,MAAMuM,GAAStN,KAAKH,MAAQkB,EAAK8E,IAAW,EAC5C,IAAK,IAAI/E,EAAId,KAAKF,OAAS+F,EAAQ/E,GAAKd,KAAKF,OAAQgB,IAC7CwM,GAAStN,KAAKF,OAASgB,EAAK+E,IAAW,EAAIC,IAC3C9F,KAAKS,OAAwC,IAA/BK,EAAI,GAAKd,KAAKH,MAAQkB,EAAI,GAAS,GAAK,GAIlE,OAAOf,KAMXkB,oBAAoBqM,EAAYC,GAC5B,MAAMC,EAAKF,IAAe,GACpBG,EAAKH,GAAc,GAAK,IACxBI,EAAKJ,GAAc,EAAI,IACvBK,EAAkB,IAAbL,EACLM,GAAML,IAAa,IAAMC,EACzBK,GAAMN,GAAY,GAAK,KAAQE,EAC/BK,GAAMP,GAAY,EAAI,KAAQG,EAC9BK,GAAiB,IAAXR,GAAmBI,EAE/B,OAAOjB,IAKW,IAJJc,EAAKd,EAAWkB,IAIH,IAAY,IAHzBH,EAAKf,EAAWmB,IAGkB,IAAY,IAF9CH,EAAKhB,EAAWoB,IAEuC,EAAU,IADjEH,EAAKjB,EAAWqB,EAKlCC,QAAQpI,EAAS,GACb,MAAM1E,EAAI,IAAIxB,EAAMK,KAAKH,MAAOG,KAAKF,QAE/BqK,EAAInK,KAAKH,MACT2B,EAAIxB,KAAKF,OACToO,EAAOlO,KAAKO,QACZ4N,EAAOhN,EAAEZ,QACT6N,EAAK,EAAIjE,EACTkE,EAAK,EAAI7M,EAEf,IAAK,MAAOT,EAAGD,KAAMd,KAAM,CACvB,MAAMsO,EAAMvN,EAAIqN,EAAK,GACfG,EAAMzN,EAAIuN,EAAK,GACfG,EAAM7M,KAAK8M,KAAKH,GAAO,EAAIC,GAAO,GAClCG,EAAM,EAAIF,GAAO3I,EACjB8I,GAAOD,EAAMJ,EAAME,EAAM,IAAOrE,EAAK,EACrCyE,GAAOF,EAAMH,EAAMC,EAAM,IAAOhN,EAAK,EAEvCmN,EAAK,GAAKA,EAAKxE,GAAKyE,EAAK,GAAKA,EAAKpN,GAAKwB,MAAM2L,IAAO3L,MAAM4L,KAG/DT,EAAKrN,EAAIqJ,EAAIpJ,GAAKmN,EAAK/D,EAAIyE,EAAKD,IAGpC,MAAME,EAAmB,GAAdX,EAAKlH,OAAcmD,EAAI,EAGlC,OAFAgE,EAAKU,GAAMX,EAAKW,GAET7O,KAAK6D,UAAU1C,GAuB1B2N,aAAaC,EAAc,GAAG,MAC1BC,EAAK,OACLC,EAAM,YACNC,EAAW,UACXC,EAAS,aACTC,EAAY,SACZC,EAAQ,WACRC,EAAU,QACVC,EAAO,OACPpI,EAAM,QACNqI,GACA,IACA,OAAOrQ,EAAIsQ,OAAOzP,KAAKS,OAAQ,CAC3BZ,MAAOG,KAAKH,MACZC,OAAQE,KAAKF,OACb4P,MAAOX,EACPY,SAAU,EACVC,KAAM,CACFC,MAAOb,EACPc,OAAQb,EACRc,YAAab,EACbc,UAAWb,EACX,gBAAiB,IAAIc,UAAsBjD,IAAjBoC,EAA6Ba,KAAKC,MAAQd,GAAce,cAClFC,cAAuBpD,IAAbqC,EAAyB,kCAAkC9P,IAAY8P,EACjFgB,WAAYf,EACZgB,QAASf,EACTgB,OAAQpJ,EACRqJ,QAAShB,KAUrBV,iBAAiB2B,EAAU,IACvB,aAAchR,EAAQiR,QAAQjB,OAAOzP,KAAKS,OAAQT,KAAKH,MAAOG,KAAKF,OAAQ2Q,GAQ/EvP,oBAAoByP,GAChB,IAAItN,EAEJsN,EAAOvR,EAAIwR,KAAKD,GAChB,MAAMC,EAAO,IAAItQ,SAASqQ,EAAKE,OAAQF,EAAKG,WAAYH,EAAKI,YAE7D,GAAIC,EAAUC,MAAML,GAAO,CACvB,MAAM,MAAC/Q,EAAK,OAAEC,EAAM,OAAEoR,GAAU/R,EAAIgS,OAAOR,GAC3CtN,EAAQ,IAAI1D,EAAME,EAAOC,GACzBuD,EAAM5C,OAAO6C,IAAI4N,QACd,GAAIF,EAAUI,OAAOR,GAAO,CAC/B,MAAMS,SAAqB5R,EAAQiR,QAAQS,OAAOR,GAE5C9Q,EAAQwR,EAAYxR,MACpBC,EAASuR,EAAYvR,OACrBwR,EAAYD,EAAYE,OAE9BlO,EAAQ,IAAI1D,EAAME,EAAOC,GACzB,MAAM+Q,EAASQ,EAAYR,OAE3B,GAAkB,IAAdS,EAAiB,CACjB,MAAMV,EAAO,IAAItQ,SAAS+C,EAAM5C,OAAOoQ,QAEvC,IAAK,IAAI9J,EAAI,EAAGA,EAAI8J,EAAO7J,OAAQD,IAAK,CACpC,MAAMyK,EAAQX,EAAO9J,GACrB6J,EAAK7N,UAAc,EAAJgE,EAAOyK,GAAS,GAAKA,GAAS,GAAKA,GAAS,EAAI,KAAM,SAEtE,GAAkB,IAAdF,EAAiB,CACxBjO,EAAM5C,OAAO0C,KAAK,KAClB,IAAK,IAAI4D,EAAI,EAAGA,EAAIlH,EAAQC,EAAQiH,IAChC1D,EAAM5C,OAAO6C,IAAIuN,EAAOlO,SAAa,EAAJoE,EAAW,EAAJA,EAAQ,GAAQ,EAAJA,QACrD,GAAkB,IAAduK,EACP,IAAK,IAAIvK,EAAI,EAAGA,EAAI8J,EAAO7J,OAAQD,GAAK,EACpC1D,EAAM5C,OAAOsG,GAAK,KAAQ,EAAI8J,EAAO9J,GAAK,MAAS,EAAI8J,EAAO9J,EAAI,GAAK,KACvE1D,EAAM5C,OAAOsG,EAAI,GAAK,KAAQ,EAAI8J,EAAO9J,EAAI,GAAK,MAAS,EAAI8J,EAAO9J,EAAI,GAAK,KAC/E1D,EAAM5C,OAAOsG,EAAI,GAAK,KAAQ,EAAI8J,EAAO9J,EAAI,GAAK,MAAS,EAAI8J,EAAO9J,EAAI,GAAK,KAC/E1D,EAAM5C,OAAOsG,EAAI,GAAK,QAG3B,KAAIiK,EAAUS,OAAOb,GAKrB,MAAM,IAAIrM,MAAM,0BALY,CAC/B,MAAM8M,SAAqB3R,EAAQgR,QAAQS,OAAOR,GAClDtN,EAAQ,IAAI1D,EAAM0R,EAAYxR,MAAOwR,EAAYvR,QAEjDuD,EAAM5C,OAAO6C,IAAI+N,EAAYR,SAGjC,OAAOxN,EAOAqO,4BACP,OAAO,EAOAC,4BACP,OAAO,EAOAC,6BACP,OAAO,EAUX1Q,uBAAuB2Q,EAAKC,EAAO,EAAGnO,EAAO3D,KAAK0R,gBAC9C,IAAK,CAAC1R,KAAK2R,eAAgB3R,KAAK4R,gBAAiB5R,KAAK0R,gBAAgBK,SAASpO,GAC3E,MAAM,IAAIY,MAAM,4BAEpB,GAAIZ,IAAS3D,KAAK0R,gBAAkBI,GAAQ,EACxC,MAAM,IAAI/R,WAAW,yBACzB,GAAI4D,IAAS3D,KAAK0R,gBAAkBI,EAAO,EACvC,MAAM,IAAI/R,WAAW,yBAEN,iBAAR8R,IAAkBA,GAAM,IAAIG,aAAcvC,OAAOoC,IAC5D,MAAMR,SAAqB/R,EAAOoR,QAAQuB,UAAUJ,EAAKlO,EAAMmO,GAEzDzO,EAAQ,IAAI1D,EAAM0R,EAAYxR,MAAOwR,EAAYvR,QAIvD,OAFAuD,EAAM5C,OAAO6C,IAAI+N,EAAYR,QAEtBxN,EAYXnC,wBAAwBgR,EAAMzO,EAAOmM,EAAMxN,EAAQ,WAAY+P,EAAS,IAAIC,GACxE,MAAM,KAAEC,EAAI,OAAEC,SAAiB9S,EAAQkR,OAEvCwB,EAAO,IAAIG,EAAK5O,EAAOyO,GACvB,MAAO/Q,EAAGC,EAAGC,EAAGC,GAAK3B,EAAM0C,YAAYD,GAEjCmQ,EAAgB,IAAID,EAE1BC,EAAcC,MAAM,CAChBC,UAAWN,EAAOO,SAClBC,WAAYR,EAAOS,UACnBC,WAAYV,EAAOW,UACnBC,eAAgBZ,EAAOa,cACvBC,iBAAkBd,EAAOe,gBACzBC,iBAAkBhB,EAAOiB,iBAG7Bb,EAAcc,OAAOnB,EAAMtC,EAAM,CAACnM,MAAAA,IAClC,MAAM4N,EAAckB,EAAcN,UAAU9Q,EAAGC,EAAGC,GAC5CgC,EAAQ,IAAI1D,EAAM0R,EAAYxR,MAAOwR,EAAYvR,QASvD,OAPAuD,EAAM5C,OAAO6C,IAAI+N,EAAYR,QAEzBxN,EAAMvD,OAASqS,EAAOS,WACtBvP,EAAMiB,KAAK,EAAG,EAAGjB,EAAMxD,MAAO8B,KAAK6C,MAAM+N,EAAce,QAAUjQ,EAAMvD,OAASqS,EAAOS,YAAcvP,EAAMvD,OAASyS,EAAce,UAEtIpB,EAAKqB,OACLhB,EAAcgB,OACPlQ,EAAMkD,QAAQjF,EAAI,MAShC,MAAMqK,UAAchM,EAKN6T,2BACP,MAAO,OAOAC,+BACP,MAAO,WAOAC,iCACP,MAAO,aAGXxS,iCAAiCyC,GAG7B,GAFoB,iBAATA,IACPA,EAAO,CAAC,MAAO,OAAQ,WAAY,cAAcgQ,QAAQhQ,IACzDA,EAAO,GAAKA,EAAO,EACnB,MAAM,IAAI5D,WAAW,yBAEzB,OAAO4D,EAaX/D,YAAYC,EAAOC,EAAQ+L,EAAW,IAAKC,EAAU,EAAGC,EAAU,EAAGC,EAAeL,EAAM6H,eACtF,GAAIxQ,MAAM6I,IAAaA,EAAW,EAC9B,MAAM,IAAI9L,WAAW,0BAEzBiM,EAAeL,EAAMiI,0BAA0B5H,GAE/C6H,MAAMhU,EAAOC,GACbE,KAAK6L,SAAWA,EAChB7L,KAAK8L,QAAUA,EACf9L,KAAK+L,QAAUA,EACf/L,KAAKgM,aAAeA,EAGxBrL,WACI,MAAO,SAASX,KAAKH,SAASG,KAAKF,UAAUE,KAAK6L,cAYtD3K,YAAYmC,EAAOwI,EAAUC,EAASC,EAASC,EAAeL,EAAM6H,eAChE,KAAMnQ,aAAiB1D,GACnB,MAAM,IAAIsD,UAAU,wBAExB+I,EAAeL,EAAMiI,0BAA0B5H,GAE/C,MAAM8H,EAAQ,IAAInI,EAAMtI,EAAMxD,MAAOwD,EAAMvD,OAAQ+L,EAAUC,EAASC,EAASC,GAG/E,OAFA8H,EAAMrT,OAAO6C,IAAID,EAAM5C,QAEhBqT,EAGX/P,OAAOlE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBAC/B,MAAMwQ,EAAgB/T,KAAKH,MACrBmU,EAAiBhU,KAAKF,OAEtBqE,EAAS0P,MAAM9P,OAAOlE,EAAOC,EAAQ6D,GAK3C,OAHA3D,KAAK8L,SAAW3H,EAAOtE,MAAQkU,EAC/B/T,KAAK+L,SAAW5H,EAAOrE,OAASkU,EAEzB7P,GAQf,MAAM8P,UAAYjL,MAOdpJ,YAAYsU,EAAQC,GAAY,GAC5BN,SAASK,GAET,IAAK,MAAMJ,KAAS9T,KAChB,KAAM8T,aAAiBnI,GACnB,MAAM,IAAI1I,UAAU,SAASjD,KAAK2T,QAAQG,kCAElD,GAAIK,GAAa,GAAKnR,MAAMmR,GACxB,MAAM,IAAIpU,WAAW,sBAEzBC,KAAKmU,UAAYA,EAOjBtU,YACA,IAAIgC,EAAM,EACV,IAAK,MAAMiS,KAAS9T,KAAM,CACtB,IAAIH,EAAQiU,EAAMjU,MAAQiU,EAAMhI,QAC5BjK,EAAMhC,IACNgC,EAAMhC,GAGd,OAAOgC,EAOP/B,aACA,IAAI+B,EAAM,EACV,IAAK,MAAMiS,KAAS9T,KAAM,CACtB,IAAIF,EAASgU,EAAMhU,OAASgU,EAAM/H,QAC9BlK,EAAM/B,IACN+B,EAAM/B,GAGd,OAAO+B,EAGXlB,WACI,MAAO,OAAOX,KAAKH,SAASG,KAAKF,UAAUE,KAAK6L,cAMpD,EAAGjL,OAAOC,YACN,IAAK,IAAIkG,EAAI,EAAGA,EAAI/G,KAAKgH,OAAQD,UACvB/G,KAAK+G,GAGnBzE,MAAMmD,EAAOD,GACLA,IAAQ4O,EAAAA,IACR5O,EAAMxF,KAAKgH,QACf,MAAMkN,EAAS,IAAIlL,MAAMxD,EAAMC,GAC/B,IAAK,IAAIsB,EAAI,EAAGA,EAAImN,EAAOlN,OAAQD,IAC/BmN,EAAOnN,GAAK/G,KAAK+G,EAAItB,GACzB,OAAO,IAAIwO,EAAIC,EAAQlU,KAAKmU,WAO5BtI,eACA,OAAO7L,KAAKqU,QAAO,CAACC,EAAKR,IAAUQ,EAAMR,EAAMjI,UAAU,GAQ7DiD,aAAa2B,EAAU,IACnB,MAAM8D,EAAU,WAAWlV,EAAOqR,QAAQ8D,SAAQxU,KAAKH,MAAOG,KAAKF,OAAQE,KAAKmU,WAEhF,IAAK,MAAML,KAAS9T,KAAM,CACtB,KAAM8T,aAAiBnI,GAAQ,MAAM,IAAIpH,MAAM,+BAC/CgQ,EAAQE,IAAIX,EAAMhI,QAASgI,EAAM/H,WAAY+H,EAAMjI,SAAW,IAAKiI,EAAMjU,MAAOiU,EAAMhU,OAAQgU,EAAMrT,OAAQqT,EAAM9H,aAAcyE,EAAU,IAAM,GAAK,GAGzJ,OAAO8D,EAAQG,KASnBxT,oBAAoByP,EAAMgE,GAAwB,GAC9C,IAAItR,EACJsN,EAAOvR,EAAIwR,KAAKD,GAChB,MAAMC,EAAO,IAAItQ,SAASqQ,EAAKE,OAAQF,EAAKG,WAAYH,EAAKI,YAE7D,IAAIC,EAAU4D,MAAMhE,GA4Fb,MAAM,IAAIrM,MAAM,0BA5FI,CACvB,MAAM2P,EAAS,GACTW,EAAU,WAAWxV,EAAOqR,QAAQoE,SAAQnE,GAElD,GAAIgE,EAAuB,CACvB,MAAMI,EAAQF,EAAQX,SAASc,OAAOlO,MAChCgN,EAAQ,IAAInI,EAAMoJ,EAAMlV,MAAOkV,EAAMjV,OAAQ,GAAKiV,EAAME,MAAOF,EAAMhU,EAAGgU,EAAMjU,EAAGiU,EAAMG,SAE7FpB,EAAMrT,OAAO6C,IAAIyR,EAAMlE,QAEvBqD,EAAO9G,KAAK0G,GACZzQ,EAAQ,IAAI4Q,EAAIC,GAGpB,MAAMiB,EAAyB,EAAhBN,EAAQhV,MACjBuV,EAA2B,EAAjBP,EAAQ/U,OAClBuV,EAAM,IAAI7U,YAAYqU,EAAQhV,MAAQgV,EAAQ/U,QAC9C4U,EAAK,IAAIY,WAAWD,EAAIxE,OAAQwE,EAAIvE,WAAYuE,EAAItE,YAE1D,IAAK,MAAM+C,KAASe,EAAQX,SAAU,CAClC,IAAIqB,EAAU,EACVC,EAAW,EACf,MAAMC,EAAe,EAAV3B,EAAM/S,EACX2U,EAAe,EAAV5B,EAAMhT,EACX6U,EAAK7B,EAAMjD,OACXlN,EAAOmQ,EAAMoB,QACbrV,EAAsB,EAAdiU,EAAMjU,MACdC,EAAwB,EAAfgU,EAAMhU,OACf8V,EAAM,IAAIpV,YAAYmV,EAAG9E,OAAQ8E,EAAG7E,WAAYjR,EAAQC,GAGxD+V,EAFI3B,EAAOA,EAAO9G,KAAK,IAAIzB,EAAMwJ,EAAQC,EAAS,GAAKtB,EAAMmB,MAAO,EAAG,EAAG,IAAM,GAEzExU,OACPqV,EAAM,IAAItV,YAAYqV,EAAGhF,QAI/B,GAFAgF,EAAGvS,IAAIoR,GAEH,IAAM/Q,EACN,IAAK,IAAI7C,EAAI,EAAOA,EAAIhB,EAAQgB,IAAK,CACjC,MAAMuG,EAAWoO,EAAKN,GAAUrU,EAAI4U,GAAM,EAE1C,IAAK,IAAI3U,EAAI,EAAOA,EAAIlB,EAAOkB,IAAK,CAChC,MAAMwG,EAAWxG,EAAIsG,EAEjB,IAAMsO,EAAG,EAAIJ,GACjBO,EAAIvO,GAAY8N,EAAI9N,GACfuO,EAAIvO,GAAYqO,EAAIJ,GAEzBA,IACAD,GAAW,QAKlB,GAAI,IAAM5R,EACX,IAAK,IAAI7C,EAAI,EAAOA,EAAIhB,EAAQgB,IAAK,CACjC,MAAMuG,EAAWoO,EAAKN,GAAUrU,EAAI4U,GAAM,EAE1C,IAAK,IAAI3U,EAAI,EAAOA,EAAIlB,EAAOkB,IAAK,CAChC,MAAMwG,EAAWxG,EAAIsG,EAEjB,IAAMsO,EAAG,EAAIJ,GACjBO,EAAIvO,GAAY8N,EAAI9N,GACfuO,EAAIvO,GAAYqO,EAAIJ,GAEzBA,IACAD,GAAW,EACXF,EAAI9N,GAAY,QAKvB,GAAI,IAAM5D,GAAQ,IAAMA,EAAM,CAC/BkS,EAAGvS,IAAIoR,GACP,IAAK,IAAI5T,EAAI,EAAOA,EAAIhB,EAAQgB,IAAK,CACjC,MAAMuG,EAAWoO,EAAKN,GAAUrU,EAAI4U,GAAM,EAE1C,IAAK,IAAI3U,EAAI,EAAOA,EAAIlB,EAAOkB,IAAK,CAChC,MAAMwG,EAAWxG,EAAIsG,EAEjB,IAAMsO,EAAG,EAAIJ,GACjBO,EAAIvO,GAAY8N,EAAI9N,GACfuO,EAAIvO,GAAYqO,EAAIJ,GAEzBA,IACAD,GAAW,EACXF,EAAI9N,GAAYuO,EAAIvO,MAMpClE,EAAQ,IAAI4Q,EAAIC,GAGpB,OAAO7Q,EAGXU,OAAOlE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBAC/B,IAAK,MAAMuQ,KAAS9T,KAChB8T,EAAM/P,OAAOlE,EAAOC,EAAQ6D,IAIxC,MAAMyO,EAWFxS,YAAYmW,GACR,MAAM,SAACrD,EAAQ,UAAEE,EAAS,UAAEE,EAAS,cAAEE,EAAa,gBAAEE,EAAe,eAAEE,GAAkB2C,GAAW,GAGpG,GADA/V,KAAK0S,SAAWA,GAAY0B,EAAAA,EACxBpR,MAAMhD,KAAK0S,WAAa1S,KAAK0S,SAAW,EACxC,MAAM,IAAI3S,WAAW,oBAGzB,GADAC,KAAK4S,UAAYA,GAAawB,EAAAA,EAC1BpR,MAAMhD,KAAK4S,YAAc5S,KAAK4S,UAAY,EAC1C,MAAM,IAAI7S,WAAW,qBAGzB,GADAC,KAAK8S,UAAYA,GAAa,QACzB,CAAC,OAAQ,QAAQf,SAAS/R,KAAK8S,WAChC,MAAM,IAAI/S,WAAW,qBAGzB,GADAC,KAAKgT,cAAgBA,GAAiB,QACjC,CAAC,OAAQ,SAAU,SAASjB,SAAS/R,KAAKgT,eAC3C,MAAM,IAAIjT,WAAW,yBAGzB,GADAC,KAAKkT,gBAAkBA,GAAmB,OACrC,CAAC,MAAO,SAAU,UAAUnB,SAAS/R,KAAKkT,iBAC3C,MAAM,IAAInT,WAAW,2BAGzB,GADAC,KAAKoT,eAAiBA,IAAkB,EACL,kBAAxBpT,KAAKoT,eACZ,MAAM,IAAInQ,UAAU,2BAIhC,MAAM+N,EAMF9P,eAAeyP,GACX,IAAIC,EASJ,OARKxQ,YAAY4V,OAAOrF,IAIpBA,EAAO,IAAI2E,WAAW3E,EAAKE,OAAQF,EAAKG,WAAYH,EAAKI,YACzDH,EAAO,IAAItQ,SAASqQ,EAAKE,OAAQF,EAAKG,WAAYH,EAAKI,cAJvDJ,EAAO,IAAI2E,WAAW3E,GACtBC,EAAO,IAAItQ,SAASqQ,EAAKE,SAMzB7Q,KAAKiR,MAAML,GAAc,MACzB5Q,KAAKoR,OAAOR,GAAc,OAC1B5Q,KAAKyR,OAAOb,GAAc,OAC1B5Q,KAAK4U,MAAMhE,GAAc,MACtB,KAOX1P,aAAa0P,GACT,OA/sDC,aA+sDMA,EAAK3P,UAAU,GAAG,GAO7BC,cAAc0P,GACV,OAAQA,EAAK3P,UAAU,GAAG,KAAW,GAttDnC,SA6tDNC,cAAc0P,GACV,OA7tDE,aA6tDKA,EAAK3P,UAAU,GAAG,GAO7BC,aAAa0P,GACT,OAAQA,EAAK3P,UAAU,GAAG,KAAW,GApuDpC,SAsvDTlC,EAAOD,QAAU,CAACa,MAAAA,EAAOsU,IAAAA,EAAKtI,MAAAA,EAAOyG,WAAAA,EAAYpB,UAAAA,EAAWG,OAR5D,SAAgBR,EAAMgE,GAGlB,MAAa,QAFA3D,EAAUiF,QAAQtF,GAGpBsD,EAAI9C,OAAOR,EAAMgE,GACrBhV,EAAMwR,OAAOR,M,MChwDxB,SAASC,EAAKC,EAAQqF,GAAS,GAC3B,GAAIrF,aAAkBzQ,YAAa,OAAO,IAAIkV,WAAWzE,GACzD,GAAIqF,GAAUrF,aAAkBsF,kBAAmB,OAAO,IAAIb,WAAWzE,GACzE,GAAIzQ,YAAY4V,OAAOnF,GAAS,OAAO,IAAIyE,WAAWzE,EAAOA,OAAQA,EAAOC,WAAYD,EAAOE,YAE/F,MAAM,IAAI9N,UAAU,wEAoBtBlE,EAAOD,QAAU,CAAE8R,KAAAA,EAAMwF,WAjBzB,SAAoBC,EAASH,GAAS,GACpC,IAAIlP,EAAS,EACThG,EAAS,EACbqV,EAAQjN,SAAQyH,GAAU7J,GAAW,MAAQ6J,EAAOE,WAAaF,EAAO7J,OAAS6J,EAAOE,aAExF,MAAM2D,EAAK,IAAIY,WAAWY,EAAS,IAAIC,kBAAkBnP,GAAUA,GASnE,OAPAqP,EAAQjN,SAAQyH,IACd,MAAMzF,EAAMpC,MAAMsN,QAAQzF,GAAUA,EAASD,EAAKC,GAAQ,GAE1D6D,EAAGpR,IAAI8H,EAAKpK,GACZA,GAAUoK,EAAIpE,UAGT0N,K,QCtBX,MAAM6B,EAAQ,IAAI/V,YAAY,CAC1B,EAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAChG,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAChG,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAChG,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,SAChG,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAChG,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAChG,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAChG,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAChG,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAChG,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,YAEtCzB,EAAOD,QAAU,SAAe+R,GAC9B,IAAI7P,EAAS,EACTwV,GAAM,EACV,MAAMC,EAAM5F,EAAO7J,OAAS,EAAK,EAEjC,KAAOyP,EAAKzV,GACVwV,EAAMD,EAAiC,KAA1BC,EAAM3F,EAAO7P,OAAsBwV,IAAQ,EACxDA,EAAMD,EAAiC,KAA1BC,EAAM3F,EAAO7P,OAAsBwV,IAAQ,EACxDA,EAAMD,EAAiC,KAA1BC,EAAM3F,EAAO7P,OAAsBwV,IAAQ,EACxDA,EAAMD,EAAiC,KAA1BC,EAAM3F,EAAO7P,OAAsBwV,IAAQ,EAG1D,KAAOxV,EAAS6P,EAAO7J,QACrBwP,EAAMD,EAAiC,KAA1BC,EAAM3F,EAAO7P,OAAsBwV,IAAQ,EAG1D,OAAc,WAANA,KAAsB,I,cC9ClC,MAAMpX,EAAM,EAAQ,GACdsX,EAAQ,EAAQ,MAChB,SAAEC,EAAQ,WAAEC,GAAe,EAAQ,KAEnCC,EAAW,IAAIvB,WAAW,CAAC,GAAI,GAAI,GAAI,KACvCwB,EAAW,IAAIxB,WAAW,CAAC,GAAI,GAAI,GAAI,KACvCyB,EAAW,IAAIzB,WAAW,CAAC,GAAI,GAAI,GAAI,KACvC0B,EAAeN,EAAM,IAAIpB,WAAW,CAAC,GAAI,GAAI,GAAI,MACjD2B,EAAO,IAAI3B,WAAW,CAAC,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,KAUpD4B,EAAyB,CAC7B,EARW,EASX,EANiB,EAQjB,EAVW,EAWX,EARiB,GAWbC,EAAc,IAAInF,YAExBjT,EAAOD,QAAU,CACf2Q,OAAOkB,GAAM,KAAEf,EAAI,MAAE/P,EAAK,OAAEC,EAAM,SAAE6P,EAAQ,MAAEyH,EAAQ,EAAC,MAAE1H,EAAQ,IAC/D,IAAI1O,EAAS,EACTqW,EAAa,EACjB,MAAMC,EAAazX,EAAQ8P,EACrB4H,EAAM,IAAIjC,WAAWxV,EAAS6Q,EAAK3J,QAEzC,KAAOhG,EAAS2P,EAAK3J,QACnBuQ,EAAIF,KAAgB,EACpBE,EAAIjU,IAAIqN,EAAKhO,SAAS3B,EAASA,GAAUsW,GAAcD,GAEvDA,GAAcC,EAGhB,GAAI1H,EAAM,CACR,IAAI4H,EAAS,GACb,IAAK,MAAMvO,KAAO2G,EAAM,CACtB,IAAKA,EAAK3G,GAAM,SAChB,MAAMwO,EAAKN,EAAY1H,OAAOxG,GACxByO,EAAKP,EAAY1H,OAAOG,EAAK3G,IAC7B0O,EAAQ,IAAIrC,WAAW,GAASmC,EAAGzQ,OAAS0Q,EAAG1Q,QAE/C4J,EAAO,IAAItQ,SAASqX,EAAM9G,QAEhC8G,EAAM,GAAK,IACXA,EAAM,GAAK,GACXA,EAAM,GAAK,GACXA,EAAM,GAAK,IACXA,EAAMrU,IAAImU,EAAI,GACdD,EAAOpK,KAAKuK,GACZA,EAAMrU,IAAIoU,EAAI,EAAID,EAAGzQ,QACrB4J,EAAK7N,UAAU,EAAG4U,EAAM3Q,OAAS,IACjC4J,EAAK7N,UAAU4U,EAAM3Q,OAAS,EAAG0P,EAAMiB,EAAMhV,SAAS,EAAGgV,EAAM3Q,OAAS,KAG1E4I,EAAOxQ,EAAIgX,WAAWoB,GAGxBxW,EAAS4O,EAAOA,EAAK5I,OAAS,EAC9B,MAAM4Q,EAAajB,EAASY,EAAK7H,GAC3BmI,EAAQ,IAAIvC,WAAW,GAAKtU,EAASiW,EAAKjQ,OAAS4Q,EAAW5Q,QAEpE6Q,EAAM,IAAM,EACZA,EAAM,IAAM,EACZA,EAAM,IAAM,EACZA,EAAM,IAAMT,EACZS,EAAMvU,IAAI2T,EAAM,GAChBY,EAAMvU,IAAIuT,EAAU,IACpBgB,EAAMvU,IAAIwT,EAAU,IACpBe,EAAMvU,IAAIsU,EAAY,IACtBC,EAAM,IAAMX,EAAuBvH,GAC/BC,GAAMiI,EAAMvU,IAAIsM,EAAM,GAAKgI,EAAW5Q,QAC1C6Q,EAAMvU,IAAIyT,EAAU,GAAK/V,EAAS4W,EAAW5Q,QAE7C,MAAM4J,EAAO,IAAItQ,SAASuX,EAAMhH,QAWhC,OATAD,EAAK7N,UAAU,EAAG,IAClB6N,EAAK7N,UAAU,GAAIlD,GACnB+Q,EAAK7N,UAAU,GAAIjD,GACnB8Q,EAAK7N,UAAU,GAAI6U,EAAW5Q,QAC9B4J,EAAK7N,UAAU,GAAK/B,EAAS4W,EAAW5Q,OAAQ,GAChD4J,EAAK7N,UAAU,GAAK/B,EAAS4W,EAAW5Q,OAAQgQ,GAChDpG,EAAK7N,UAAU,GAAI2T,EAAM,IAAIpB,WAAWuC,EAAMhH,OAAQ,GAAI,MAC1DD,EAAK7N,UAAU,GAAK6U,EAAW5Q,OAAQ0P,EAAM,IAAIpB,WAAWuC,EAAMhH,OAAQ,GAAI,EAAI+G,EAAW5Q,UAEtF6Q,GAGT1G,OAAO0G,GACL,IAAIjH,EAAO,IAAItQ,SAASuX,EAAMhH,OAAQgH,EAAM/G,WAAY+G,EAAM9G,YAE9D,MAAMlR,EAAQ+Q,EAAK3P,UAAU,IACvBnB,EAAS8Q,EAAK3P,UAAU,IACxB6W,EAAMD,EAAM,IACZE,EAAaF,EAAM,IACzB,IAAIlI,EAAW,CAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAKoI,GAClD,MAAMC,EAAUrI,EAAWmI,EAAM,EAE3BR,EAAazX,EAAQmY,EAC3B,IAAI9G,EAAS,IAAIoE,WAAWxV,EAASwX,GAEjCtW,EAAS,EACTiX,EAAW,EAEXC,EAAW,GACf,MAAMV,EAAS,GAEf,IAAIW,EAASC,EAEb,MAAMC,EAAkBR,EAAM7Q,OAAS,EAEvC,IAAIsR,EACJ,KAAiD,cAAzCA,EAAO1H,EAAK3P,UAAU,EAAIiX,KAA2B,CAC3D,GAAa,aAATI,EACFd,EAAOpK,KAAKyK,EAAMlV,SAAS,EAAIuV,EAAU,EAAIA,EAAWtH,EAAK3P,UAAUiX,UACpE,GAAa,aAATI,EAAqB,CAC5B,GAAIH,EACF,MAAM,IAAI5T,MAAM,wCAClB4T,EAAU,IAAI3X,YAAYoQ,EAAK3P,UAAUiX,IACzC,IAAK,IAAIK,EAAY,EAAGA,EAA6B,EAAjBJ,EAAQnR,OAAYuR,GAAa,EACnEJ,EAAQI,EAAY,GAAKV,EAAM,EAAIK,EAAWK,IAAc,GAAKV,EAAM,EAAIK,EAAWK,EAAY,IAAM,GAAKV,EAAM,EAAIK,EAAWK,EAAY,IAAM,EAAI,SACrJ,GAAa,aAATD,EAAqB,CAC9B,GAAIF,EACF,MAAM,IAAI7T,MAAM,wCAClB6T,EAAe,IAAI9C,WAAW1E,EAAK3P,UAAUiX,IAC7C,IAAK,IAAInR,EAAI,EAAGA,EAAIqR,EAAapR,OAAQD,IACvCqR,EAAarR,GAAK8Q,EAAM,EAAIK,EAAWnR,GAI3C,GADAmR,GAAY,GAAYtH,EAAK3P,UAAUiX,GACnCA,EAAWG,EACb,MAKJ,IAFAR,EAAQjB,EAA6B,IAAlBY,EAAOxQ,OAAewQ,EAAO,GAAKpY,EAAIgX,WAAWoB,GAAS1X,EAASA,EAASwX,GAExFtW,EAAS6W,EAAM9G,YAAY,CAChC,MAAMyH,EAASX,EAAM7W,KACfsB,EAAQuV,EAAMlV,SAAS3B,EAAQA,GAAUsW,GAE3C,IAAMkB,EAAQtH,EAAO5N,IAAIhB,EAAO2V,GAC3B,IAAMO,EAAQxY,KAAKyY,SAASnW,EAAO4O,EAAQ+G,EAAUD,EAASV,GAC9D,IAAMkB,EAAQxY,KAAK0Y,SAASpW,EAAO4O,EAAQ+G,EAAUD,EAASV,GAC9D,IAAMkB,EAAQxY,KAAK2Y,SAASrW,EAAO4O,EAAQ+G,EAAUD,EAASV,GAC9D,IAAMkB,GAAQxY,KAAK4Y,SAAStW,EAAO4O,EAAQ+G,EAAUD,EAASV,GAEvEW,GAAYX,EAGd,GAAmB,IAAfS,EAAkB,CACpB,IAAKI,EACH,MAAM,IAAI5T,MAAM,iCAElB,GAAI6T,EACF,IAAK,IAAIrR,EAAI,EAAGA,EAAIqR,EAAapR,OAAQD,IACvCoR,EAAQpR,IAAM,WAAaqR,EAAarR,GAE5C4I,EAAW,EACX,MAAMkJ,EAAY,IAAIvD,WAAWzV,EAAQC,EAAS,GAC5CgZ,EAAY,IAAIxY,SAASuY,EAAUhI,OAAQgI,EAAU/H,WAAY+H,EAAU9H,YACjF,IAAK,IAAIhK,EAAI,EAAGA,EAAImK,EAAOlK,OAAQD,IACjC+R,EAAU/V,UAAc,EAAJgE,EAAOoR,EAAQjH,EAAOnK,KAAK,GACjDmK,EAAS2H,EAGX,GAAY,IAARf,EAAW,CACb,MAAMe,EAAY,IAAIvD,WAAWpE,EAAOlK,OAAS8Q,EAAM,GACvD,IAAK,IAAI/Q,EAAI,EAAGA,EAAImK,EAAOlK,OAAQD,GAAK,EACtC8R,EAAU9R,EAAI,GAAKmK,EAAOnK,GAC5BmK,EAAS2H,EAGX,GAAiB,IAAblJ,EAAgB,CAClB,MAAMkJ,EAAY,IAAIvD,WAAWzV,EAAQC,EAAS,GAC5C8Q,EAAO,IAAItQ,SAASuY,EAAUhI,QAEpC,GAAiB,IAAblB,EACF,IAAK,IAAI5I,EAAI,EAAGA,EAAIlH,EAAQC,EAAQiH,IAAK,CACvC,MAAMyK,EAAQN,EAAOnK,GACrB6J,EAAK7N,UAAc,EAAJgE,EAAOyK,GAAS,GAAKA,GAAS,GAAKA,GAAS,EAAI,KAAM,QAElE,GAAiB,IAAb7B,EACT,IAAK,IAAI5I,EAAI,EAAGA,EAAIlH,EAAQC,EAAS,EAAGiH,GAAK,EAAG,CAC9C,MAAMyK,EAAQN,EAAOnK,GACrB6J,EAAK7N,UAAc,EAAJgE,EAAOyK,GAAS,GAAKA,GAAS,GAAKA,GAAS,EAAIN,EAAOnK,EAAI,IAAI,QAE3E,GAAiB,IAAb4I,EAAgB,CACzBkJ,EAAU1V,KAAK,KACf,IAAK,IAAI4D,EAAI,EAAGA,EAAIlH,EAAQC,EAAQiH,IAClC8R,EAAUvV,IAAI4N,EAAOvO,SAAa,EAAJoE,EAAW,EAAJA,EAAQ,GAAQ,EAAJA,GAGrDmK,EAAS2H,EAGX,MAAO,CAAEhZ,MAAAA,EAAOC,OAAAA,EAAQoR,OAAAA,IAG1BuH,SAASnW,EAAO4O,EAAQ+G,EAAUD,EAASV,GACzC,IAAIvQ,EAAI,EACR,KAAOA,EAAIiR,GAAS9G,EAAOnK,EAAIkR,GAAY3V,EAAMyE,KACjD,KAAOA,EAAIuQ,GAAYpG,EAAOnK,EAAIkR,GAAY3V,EAAMyE,GAAKmK,EAAOnK,IAAMkR,EAAWD,IAGnFU,SAASpW,EAAO4O,EAAQ+G,EAAUD,EAASV,GACzC,GAAI,IAAMW,EAAU/G,EAAO5N,IAAIhB,EAAO2V,OACjC,CACH,IAAIlR,EAAI,EACR,KAAOA,EAAIuQ,GAAYpG,EAAOnK,EAAIkR,GAAY3V,EAAMyE,GAAKmK,EAAOnK,IAAMkR,EAAWX,KAIrFqB,SAASrW,EAAO4O,EAAQ+G,EAAUD,EAASV,GACzC,IAAIvQ,EAAI,EAER,GAAI,IAAMkR,EAAU,CAClB,KAAOlR,EAAIiR,GAAS9G,EAAOnK,GAAKzE,EAAMyE,KACtC,KAAOA,EAAIuQ,GAAYpG,EAAOnK,GAAKzE,EAAMyE,IAAMmK,EAAOnK,IAAMiR,IAAY,OACnE,CACL,KAAOjR,EAAIiR,GAAS9G,EAAOnK,EAAIkR,GAAY3V,EAAMyE,IAAMmK,EAAOnK,IAAMkR,EAAWX,IAAe,GAC9F,KAAOvQ,EAAIuQ,GAAYpG,EAAOnK,EAAIkR,GAAY3V,EAAMyE,IAAMmK,EAAOnK,EAAIkR,EAAWD,GAAW9G,EAAOnK,IAAMkR,EAAWX,IAAe,KAItIsB,SAAStW,EAAO4O,EAAQ+G,EAAUD,EAASV,GACzC,IAAIvQ,EAAI,EAER,GAAI,IAAMkR,EAAU,CAClB,KAAOlR,EAAIiR,GAAS9G,EAAOnK,GAAKzE,EAAMyE,KACtC,KAAOA,EAAIuQ,GAAYpG,EAAOnK,GAAKzE,EAAMyE,GAAKmK,EAAOnK,IAAMiR,OACtD,CACL,KAAOjR,EAAIiR,GAAS9G,EAAOnK,EAAIkR,GAAY3V,EAAMyE,GAAKmK,EAAOnK,IAAMkR,EAAWX,GAE9E,KAAOvQ,EAAIuQ,GAAY,CACrB,MAAMhW,EAAI4P,EAAOnK,EAAIkR,EAAWD,GAC1B3W,EAAI6P,EAAOnK,EAAIkR,EAAWX,GAC1ByB,EAAI7H,EAAOnK,EAAIkR,EAAWD,EAAUV,GAEpCvV,EAAIT,EAAID,EAAI0X,EACZC,EAAKrX,KAAKkI,IAAI9H,EAAIT,GAClB2X,EAAKtX,KAAKkI,IAAI9H,EAAIV,GAClB6X,EAAKvX,KAAKkI,IAAI9H,EAAIgX,GAExB7H,EAAOnK,EAAIkR,GAAY3V,EAAMyE,MAASiS,GAAMC,GAAMD,GAAME,EAAM5X,EAAM2X,GAAMC,EAAM7X,EAAI0X,Q,cC5P5F,MAAM,QAAExZ,GAAY,EAAQ,KAE5B,IAAI4Z,EAAM,KACVpa,EAAOD,QAAU,CACfgQ,aACE,IAAKqK,EAAK,CACR,MAAMC,EAAY,qBAAsBC,YACxCF,QAAYE,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiC/Z,wBAA8Bga,MAAKxY,GAAKqY,EAAYrY,EAAIA,EAAEyY,iBAG9K,OAAOxZ,KAAKyZ,OAGdA,MACE,IAAIC,EAAW,KACf,MAAMC,EAAO,IAAIN,YAAYO,SAAST,GAAKra,QAE3C,MAAMM,EACJ8B,gBAAkB,OAAOyY,EAAKE,OAC9B3Y,aAAa4Q,GAAQ,OAAO6H,EAAKG,OAAOhI,GACxC5Q,YAAY6Y,EAAKjI,GAAQ,OAAO6H,EAAKK,MAAMD,EAAKjI,GAChD5Q,UAAU6Y,EAAKjI,GAAQ,OAAO,IAAIwD,WAAWqE,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,GACtE5Q,WAAW6Y,EAAKjI,GAAQ,OAAO,IAAItR,YAAYmZ,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,GAExE5Q,qBAAqB6Y,EAAKjI,GACxB,IAAIxP,EAAQlD,EAAIsV,GAAGqF,EAAKjI,GAAMxP,QAC9B,OAAQqX,EAAKK,MAAMD,EAAKjI,GAAOxP,GAGnC,MAAM4X,EAAc,SAAUC,WAAaC,KAAKC,KAAK5K,OAAS,MAC5D,MAAM8E,EAAU,IAAIvC,YACpB,OAAOsI,GAAU/F,EAAQ9E,OAAO6K,IAF4B,GAKxDC,EAAc,SAAUJ,WAAaC,KAAKC,KAAKlJ,OAAS,MAC5D,MAAM0D,EAAU,IAAI2F,YACpB,OAAO3J,GAAUgE,EAAQ1D,OAAON,IAF4B,GAyG9D,MApGI,yBAA0BsJ,aAC5BT,EAAW,IAAIe,sBAAqB,EAAExY,EAAG8X,MAC7B,IAAN9X,GAAS0X,EAAKe,UAAUX,GAClB,IAAN9X,GAAS0X,EAAKgB,YAAYZ,OAiG3B,CAAE1H,KA7FT,MACEzS,YAAY6D,EAAOoN,GACjB7Q,KAAKyD,MAAQA,EACb,MAAMsW,EAAM3a,EAAIwb,MAAM/J,EAAO7J,QAI7B,GAHA5H,EAAIsV,GAAGqF,EAAKlJ,EAAO7J,QAAQ1D,IAAIuN,GAC/B7Q,KAAK+Z,IAAMJ,EAAKkB,SAASd,EAAKlJ,EAAO7J,OAAQvD,IAExCzD,KAAK+Z,IAAK,MAAM,IAAIxV,MAAM,gBAC3BmV,GAAUA,EAASoB,SAAS9a,KAAM,CAAC,EAAGA,KAAK+Z,KAAM/Z,MAGvDuT,OACEvT,KAAK+Z,IAAMJ,EAAKe,UAAU1a,KAAK+Z,KAC3BL,GAAUA,EAASqB,WAAW/a,MAGpCgb,IAAIC,GACF,OAAOtB,EAAKuB,SAASlb,KAAK+Z,IAAKoB,OAAOC,UAAUC,WAAWC,KAAKL,EAAM,IAGxEM,QAAQN,EAAMxX,EAAQzD,KAAKyD,OACzB,MAAMsW,EAAMJ,EAAK6B,aAAaxb,KAAK+Z,IAAKoB,OAAOC,UAAUC,WAAWC,KAAKL,EAAM,GAAIxX,GAC7E8X,EAAUE,KAAKC,MAAMnB,EAAYnb,EAAIsV,GAAGiF,EAAKgC,oBAAoB5B,GAAM3a,EAAI4H,YAEjF,OAAQ2S,EAAKiC,kBAAkB7B,GAAMwB,EAGvCtJ,UAAUgJ,EAAMxX,EAAQzD,KAAKyD,OAC3B,MAAMsW,EAAMJ,EAAKkC,eAAe7b,KAAK+Z,IAAKoB,OAAOC,UAAUC,WAAWC,KAAKL,EAAM,GAAIxX,GAE/EqY,EAAQ,CACZjL,OAAQzR,EAAIsV,GAAGiF,EAAKoC,sBAAsBhC,GAAM3a,EAAI4H,UAAU1E,QAC9DiZ,QAASE,KAAKC,MAAMnB,EAAYnb,EAAIsV,GAAGiF,EAAKqC,uBAAuBjC,GAAM3a,EAAI4H,aAG/E,OAAQ2S,EAAKsC,oBAAoBlC,GAAM+B,IA0D5BxJ,OAtDf,MACE1S,cACEI,KAAK+Z,IAAMJ,EAAKuC,aACZxC,IAAU1Z,KAAKmc,KAAO,IACtBzC,GAAUA,EAASoB,SAAS9a,KAAM,CAAC,EAAGA,KAAK+Z,KAAM/Z,MAGvDoc,QACEzC,EAAK0C,aAAarc,KAAK+Z,KACnBL,IAAU1Z,KAAKmc,KAAKnV,OAAS,GAGnCsM,QACE,OAAOqG,EAAK2C,aAAatc,KAAK+Z,KAGhCxG,OACMmG,IAAU1Z,KAAKmc,KAAKnV,OAAS,GACjChH,KAAK+Z,IAAMJ,EAAKgB,YAAY3a,KAAK+Z,KAC7BL,GAAUA,EAASqB,WAAW/a,MAGpCwS,MAAMuD,EAAU,IACdA,EAAUmE,EAAYuB,KAAKc,UAAUxG,IAEjC2D,IAAU1Z,KAAKmc,KAAKnV,OAAS,GACjC,MAAM+S,EAAM3a,EAAIwb,MAAM7E,EAAQ/O,QAC9B5H,EAAIsV,GAAGqF,EAAKhE,EAAQ/O,QAAQ1D,IAAIyS,GAChC4D,EAAK6C,aAAaxc,KAAK+Z,IAAKA,EAAKhE,EAAQ/O,QAG3CqM,OAAOnB,EAAMtC,EAAMc,GACjBd,EAAOsK,EAAYtK,GACnB,MAAMmG,EAAUrF,GAAQ,GACpBgJ,GAAU1Z,KAAKmc,KAAK/O,KAAK8E,GAC7B,MAAM6H,EAAM3a,EAAIwb,MAAMhL,EAAK5I,QAC3B5H,EAAIsV,GAAGqF,EAAKnK,EAAK5I,QAAQ1D,IAAIsM,GAC7B,MAAM6M,EAAa,MAAO1G,GAAa,MAAOA,GAAa,MAAOA,EAClE4D,EAAK+C,cAAc1c,KAAK+Z,IAAK7H,EAAK6H,IAAKA,EAAKnK,EAAK5I,OAAyB,MAAjB+O,EAAQtS,MAAgByO,EAAKzO,MAAQsS,EAAQtS,MAAOgZ,EAAW1G,EAAQ5U,EAAG4U,EAAQ3U,EAAG2U,EAAQ1U,GAGxJ4Q,UAAU9Q,EAAGC,EAAGC,GACd,MAAM0Y,EAAMJ,EAAKgD,iBAAiB3c,KAAK+Z,IAAK5Y,EAAGC,EAAGC,GAE5CgQ,EAAc,CAClBxR,MAAO8Z,EAAKiD,uBAAuB7C,GACnCja,OAAQ6Z,EAAKkD,wBAAwB9C,GACrClJ,OAAQzR,EAAIsV,GAAGiF,EAAKmD,wBAAwB/C,GAAM3a,EAAI4H,UAAU1E,SAGlE,OAAQqX,EAAKoD,sBAAsBhD,GAAM1I,Q,cCvIjD,MAAM,QAAE9R,GAAY,EAAQ,KAE5B,IAAI4Z,EAAM,KACVpa,EAAOD,QAAU,CACfgQ,aACE,IAAKqK,EAAK,CACR,MAAMC,EAAY,qBAAsBC,YACxCF,QAAYE,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiC/Z,uBAA6Bga,MAAKxY,GAAKqY,EAAYrY,EAAIA,EAAEyY,iBAG7K,OAAOxZ,KAAKyZ,OAGdA,MACE,MAAMuD,EAAU,IAAIC,IACd9F,EAAc,IAAInF,YAElB2H,EAAO,IAAIN,YAAYO,SAAST,EAAK,CACzC+D,IAAK,CACHC,eAAeC,EAAIrD,GACjBiD,EAAQK,IAAID,GAAIE,GAAGle,EAAIsV,GAAGqF,EAAK3a,EAAI4H,UAAU1E,aAGhDxD,QAEH,MAAMM,EACJ8B,gBAAkB,OAAOyY,EAAKE,OAC9B3Y,aAAa4Q,GAAQ,OAAO6H,EAAKG,OAAOhI,GACxC5Q,YAAY6Y,EAAKjI,GAAQ,OAAO6H,EAAKK,MAAMD,EAAKjI,GAChD5Q,UAAU6Y,EAAKjI,GAAQ,OAAO,IAAIwD,WAAWqE,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,GACtE5Q,WAAW6Y,EAAKjI,GAAQ,OAAO,IAAItR,YAAYmZ,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,GAExE5Q,qBAAqB6Y,EAAKjI,GACxB,IAAIxP,EAAQlD,EAAIsV,GAAGqF,EAAKjI,GAAMxP,QAC9B,OAAQqX,EAAKK,MAAMD,EAAKjI,GAAOxP,GAgGnC,MAAO,CAAEkS,QA5FT,MACE5U,YAAYC,EAAOC,EAAQyd,GAAQ,GACjCvd,KAAKwd,OAAS,GACdR,EAAQ1Z,IAAI,EAAGtD,MACfA,KAAK+Z,IAAMJ,EAAK8D,YAAY,EAAG5d,EAAOC,EAAQyd,GAGhDD,GAAGzM,GACD7Q,KAAKwd,OAAOpQ,KAAKyD,GAGnB0C,OACEvT,KAAK+Z,IAAMJ,EAAK+D,aAAa1d,KAAK+Z,KAClCiD,EAAQW,OAAO,GAGjBjJ,KACE1U,KAAKuT,OACL,IAAIvS,EAAS,EACb,MAAM0T,EAAK,IAAIY,WAAWtV,KAAKwd,OAAOnJ,QAAO,CAACuJ,EAAK/F,IAAU+F,EAAM/F,EAAM7Q,QAAQ,IAEjF,IAAK,MAAMjG,KAAKf,KAAKwd,OACnB9I,EAAGpR,IAAIvC,EAAGC,GACVA,GAAUD,EAAEiG,OAGd,OAAO0N,EAGTD,IAAI1T,EAAGD,EAAGmU,EAAOpV,EAAOC,EAAQ+Q,EAAQqE,EAASzE,GAC/C,MAAMsJ,EAAM3a,EAAIwb,MAAM/J,EAAO7J,QAC7B5H,EAAIsV,GAAGqF,EAAKlJ,EAAO7J,QAAQ1D,IAAIuN,GAC/B8I,EAAKkE,YAAY7d,KAAK+Z,IAAKA,EAAKlJ,EAAO7J,OAAQjG,EAAGD,EAAGjB,EAAOC,EAAQmV,EAAOC,EAASzE,GAGlFjB,YAAQA,GACV,MAAMqB,EAASsG,EAAY1H,OAAOD,GAE5BuK,EAAM3a,EAAIwb,MAAM/J,EAAO7J,QAC7B5H,EAAIsV,GAAGqF,EAAKlJ,EAAO7J,QAAQ1D,IAAIuN,GAC/B8I,EAAKmE,oBAAoB9d,KAAK+Z,IAAKA,EAAKlJ,EAAO7J,QAG7C+W,gBAAYA,GACd,MAAMlN,EAASsG,EAAY1H,OAAOsO,GAE5BhE,EAAM3a,EAAIwb,MAAM/J,EAAO7J,QAC7B5H,EAAIsV,GAAGqF,EAAKlJ,EAAO7J,QAAQ1D,IAAIuN,GAC/B8I,EAAKqE,wBAAwBhe,KAAK+Z,IAAKA,EAAKlJ,EAAO7J,UA4CrC8N,QAxClB,MACElV,YAAYiR,EAAQoN,EAAQ,GAC1B,MAAMC,EAAO9e,EAAIwb,MAAM/J,EAAO7J,QAG9B,GAFA5H,EAAIsV,GAAGwJ,EAAMrN,EAAO7J,QAAQ1D,IAAIuN,GAChC7Q,KAAK+Z,IAAMJ,EAAKwE,YAAYD,EAAMrN,EAAO7J,OAAQiX,GAC7C,IAAMje,KAAK+Z,IAAK,MAAM,IAAIxV,MAAM,mCAEpCvE,KAAKH,MAAQ8Z,EAAKyE,cAAcpe,KAAK+Z,KACrC/Z,KAAKF,OAAS6Z,EAAK0E,eAAere,KAAK+Z,KAGzCxG,OACEvT,KAAK+Z,IAAMJ,EAAK2E,aAAate,KAAK+Z,KAGpC,UACE,IAAIjG,EACJ,KAAOA,EAAQ9T,KAAK8T,eAAeA,EAGrCA,QACE,MAAMiG,EAAMJ,EAAK4E,cAAcve,KAAK+Z,KAEpC,GAAI,IAAMA,EAAK,OAAO,KACtB,GAAI,IAAMA,EAAK,MAAO/Z,KAAKuT,OAAQ,IAAIhP,MAAM,+BAE7C,MAAM8M,EAAc,CAClBtQ,EAAG4Y,EAAK6E,gBAAgBzE,GACxBjZ,EAAG6Y,EAAK8E,gBAAgB1E,GACxB9E,MAAO0E,EAAK+E,oBAAoB3E,GAChCla,MAAO8Z,EAAKgF,oBAAoB5E,GAChCja,OAAQ6Z,EAAKiF,qBAAqB7E,GAClC7E,QAASyE,EAAKkF,sBAAsB9E,GACpClJ,OAAQzR,EAAIsV,GAAGiF,EAAKmF,qBAAqB/E,GAAM3a,EAAI4H,UAAU1E,SAG/D,OAAQqX,EAAKoF,mBAAmBhF,GAAM1I,Q,cC9H9C,MAAM,QAAE9R,GAAY,EAAQ,KAE5B,IAAI4Z,EAAM,KACVpa,EAAOD,QAAU,CACfgQ,aACE,IAAKqK,EAAK,CACR,MAAMC,EAAY,qBAAsBC,YACxCF,QAAYE,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiC/Z,wBAA8Bga,MAAKxY,GAAKqY,EAAYrY,EAAIA,EAAEyY,iBAG9K,OAAOxZ,KAAKyZ,OAGdA,MACE,MAAME,EAAO,IAAIN,YAAYO,SAAST,GAAKra,QAE3C,MAAMM,EACJ8B,gBAAkB,OAAOyY,EAAKE,OAC9B3Y,aAAa4Q,GAAQ,OAAO6H,EAAKG,OAAOhI,GACxC5Q,YAAY6Y,EAAKjI,GAAQ,OAAO6H,EAAKK,MAAMD,EAAKjI,GAChD5Q,UAAU6Y,EAAKjI,GAAQ,OAAO,IAAIwD,WAAWqE,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,GACtE5Q,WAAW6Y,EAAKjI,GAAQ,OAAO,IAAItR,YAAYmZ,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,GAExE5Q,qBAAqB6Y,EAAKjI,GACxB,IAAIxP,EAAQlD,EAAIsV,GAAGqF,EAAKjI,GAAMxP,QAC9B,OAAQqX,EAAKK,MAAMD,EAAKjI,GAAOxP,GA4BnC,MAAO,CAAEmN,OAxBT,SAAgBoB,EAAQhR,EAAOC,EAAQ2Q,GACrC,MAAMsJ,EAAM3a,EAAIwb,MAAM/J,EAAO7J,QAE7B,OADA5H,EAAIsV,GAAGqF,EAAKlJ,EAAO7J,QAAQ1D,IAAIuN,GACxBzR,EAAI4f,cAAcrF,EAAKlK,OAAOsK,EAAKla,EAAOC,EAAQ2Q,GAAUrR,EAAI4H,WAqBxDmK,OAlBjB,SAAgBN,EAAQhR,EAAOC,GAC7B,MAAMoe,EAAO9e,EAAIwb,MAAM/J,EAAO7J,QAC9B5H,EAAIsV,GAAGwJ,EAAMrN,EAAO7J,QAAQ1D,IAAIuN,GAChC,MAAMkJ,EAAMJ,EAAKxI,OAAO+M,EAAMrN,EAAO7J,OAAQnH,EAAOC,GAEpD,GAAI,IAAMia,EAAK,MAAM,IAAIxV,MAAM,yBAC/B,GAAI,IAAMwV,EAAK,MAAM,IAAIxV,MAAM,gCAE/B,MAAM8M,EAAc,CAClBxR,MAAO8Z,EAAKsF,aAAalF,GACzBja,OAAQ6Z,EAAKuF,cAAcnF,GAC3BxI,OAAQoI,EAAKwF,cAAcpF,GAC3BlJ,OAAQzR,EAAIsV,GAAGiF,EAAKyF,cAAcrF,GAAM3a,EAAI4H,UAAU1E,SAGxD,OAAQqX,EAAK0F,YAAYtF,GAAM1I,O,cClDrC,MAAM,QAAE9R,GAAY,EAAQ,KAE5B,IAAI4Z,EAAM,KACVpa,EAAOD,QAAU,CACfgQ,aACE,IAAKqK,EAAK,CACR,MAAMC,EAAY,qBAAsBC,YACxCF,QAAYE,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiC/Z,uBAA6Bga,MAAKxY,GAAKqY,EAAYrY,EAAIA,EAAEyY,iBAG7K,OAAOxZ,KAAKyZ,OAGdA,MACE,MAAME,EAAO,IAAIN,YAAYO,SAAST,GAAKra,QAE3C,MAAMM,EACJ8B,gBAAkB,OAAOyY,EAAKE,OAC9B3Y,aAAa4Q,GAAQ,OAAO6H,EAAKG,OAAOhI,GACxC5Q,YAAY6Y,EAAKjI,GAAQ,OAAO6H,EAAKK,MAAMD,EAAKjI,GAChD5Q,UAAU6Y,EAAKjI,GAAQ,OAAO,IAAIwD,WAAWqE,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,GACtE5Q,WAAW6Y,EAAKjI,GAAQ,OAAO,IAAItR,YAAYmZ,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,GAExE5Q,qBAAqB6Y,EAAKjI,GACxB,IAAIxP,EAAQlD,EAAIsV,GAAGqF,EAAKjI,GAAMxP,QAC9B,OAAQqX,EAAKK,MAAMD,EAAKjI,GAAOxP,GAqBnC,MAAO,CAAE2P,UAjBT,SAAmBpB,EAAQ3M,EAAKT,GAC9B,MAAMya,EAAO9e,EAAIwb,MAAM/J,EAAO7J,QAC9B5H,EAAIsV,GAAGwJ,EAAMrN,EAAO7J,QAAQ1D,IAAIuN,GAChC,MAAMkJ,EAAMJ,EAAK1H,UAAUiM,EAAMrN,EAAO7J,OAAQ9C,EAAKT,GAErD,GAAI,IAAMsW,EAAK,MAAM,IAAIxV,MAAM,wBAC/B,GAAI,IAAMwV,EAAK,MAAM,IAAIxV,MAAM,4BAE/B,MAAM8M,EAAc,CAClBxR,MAAO8Z,EAAK2F,gBAAgBvF,GAC5Bja,OAAQ6Z,EAAK4F,iBAAiBxF,GAC9BlJ,OAAQzR,EAAIsV,GAAGiF,EAAK6F,iBAAiBzF,GAAM3a,EAAI4H,UAAU1E,SAG3D,OAAQqX,EAAK8F,eAAe1F,GAAM1I,O,cC3CxC,MAAM,QAAE9R,GAAY,EAAQ,KAE5B,IAAI4Z,EAAM,KACVpa,EAAOD,QAAU,CAChBgQ,aACC,IAAKqK,EAAK,CACT,MAAMC,EAAY,qBAAsBC,YACxCF,QAAYE,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiC/Z,wBAA8Bga,MAAKxY,GAAKqY,EAAYrY,EAAIA,EAAEyY,iBAG7K,OAAOxZ,KAAKyZ,OAGbA,MACC,MAAME,EAAO,IAAIN,YAAYO,SAAST,GAAKra,QAE3C,MAAMM,EACL8B,gBAAkB,OAAOyY,EAAKE,OAC9B3Y,aAAa4Q,GAAQ,OAAO6H,EAAKG,OAAOhI,GACxC5Q,YAAY6Y,EAAKjI,GAAQ,OAAO6H,EAAKK,MAAMD,EAAKjI,GAChD5Q,UAAU6Y,EAAKjI,GAAQ,OAAO,IAAIwD,WAAWqE,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,GACtE5Q,WAAW6Y,EAAKjI,GAAQ,OAAO,IAAItR,YAAYmZ,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,GAExE5Q,qBAAqB6Y,EAAKjI,GACzB,IAAIxP,EAAQlD,EAAIsV,GAAGqF,EAAKjI,GAAMxP,QAC9B,OAAQqX,EAAKK,MAAMD,EAAKjI,GAAOxP,GAmBjC,MAAO,CAAE6O,OAfT,SAAgBN,GACf,MAAMqN,EAAO9e,EAAIwb,MAAM/J,EAAO7J,QAC9B5H,EAAIsV,GAAGwJ,EAAMrN,EAAO7J,QAAQ1D,IAAIuN,GAChC,MAAMkJ,EAAMJ,EAAKxI,OAAO+M,EAAMrN,EAAO7J,QACrC,GAAI,IAAM+S,EAAK,MAAM,IAAIxV,MAAM,0BAE/B,MAAM8M,EAAc,CACnBxR,MAAO8Z,EAAKsF,aAAalF,GACzBja,OAAQ6Z,EAAKuF,cAAcnF,GAC3BlJ,OAAQzR,EAAIsV,GAAGiF,EAAKyF,cAAcrF,GAAM3a,EAAI4H,UAAU1E,SAGvD,OAAQqX,EAAK0F,YAAYtF,GAAM1I,O,QCvBlC,IAAIqD,EAAKY,WACLoK,EAAMC,YACNtK,EAAM7U,YACNof,EAAO,IAAIlL,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAC5GmL,EAAO,IAAInL,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,IACpHoL,EAAO,IAAIpL,EAAG,CAAC,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,KAC7EqL,EAAO,SAAUhS,EAAItI,GAEvB,IADA,IAAIpE,EAAI,IAAIqe,EAAI,IACP3Y,EAAI,EAAGA,EAAI,KAAMA,EACxB1F,EAAE0F,GAAKtB,GAAS,GAAKsI,EAAGhH,EAAI,GAE9B,IAAI5F,EAAI,IAAIkU,EAAIhU,EAAE,KAClB,IAAS0F,EAAI,EAAGA,EAAI,KAAMA,EACxB,IAAK,IAAIiZ,EAAI3e,EAAE0F,GAAIiZ,EAAI3e,EAAE0F,EAAI,KAAMiZ,EACjC7e,EAAE6e,GAAKA,EAAI3e,EAAE0F,IAAM,EAAIA,EAG3B,MAAO,CAAC1F,EAAGF,IAET8e,EAAKF,EAAKH,EAAM,GAChBM,EAAKD,EAAG,GACRE,EAAQF,EAAG,GACfC,EAAG,IAAM,IAAKC,EAAM,KAAO,GAK3B,IAJA,IAUIpf,EAVAqf,EAAKL,EAAKF,EAAM,GAChBQ,EAAKD,EAAG,GACRE,EAAQF,EAAG,GACXG,EAAM,IAAIb,EAAI,OACT3Y,EAAI,EAAGA,EAAI,QAASA,EAG3BhG,GAAS,OADTA,GAAS,OADTA,GAAS,MAAJgG,KAAe,GAAS,MAAJA,IAAc,MACnB,GAAS,MAAJhG,IAAc,MACnB,GAAS,KAAJA,IAAa,EACtCwf,EAAIxZ,KAAW,MAAJhG,KAAe,GAAS,IAAJA,IAAY,KAAO,EAGpD,IAAIyf,EAAO,SAAUC,EAAIC,EAAIvf,GAI3B,IAHA,IAAIM,EAAIgf,EAAGzZ,OACPD,EAAI,EACJrF,EAAI,IAAIge,EAAIgB,GACT3Z,EAAItF,IAAKsF,IACZrF,EAAE+e,EAAG1Z,GAAK,GACd,IAII4Z,EAJAC,EAAK,IAAIlB,EAAIgB,GACjB,IAAK3Z,EAAI,EAAGA,EAAI2Z,IAAM3Z,EACpB6Z,EAAG7Z,GAAK6Z,EAAG7Z,EAAI,GAAKrF,EAAEqF,EAAI,IAAM,EAGlC,GAAI5F,EAAG,CACLwf,EAAK,IAAIjB,EAAI,GAAKgB,GAClB,IAAIG,EAAM,GAAKH,EACf,IAAK3Z,EAAI,EAAGA,EAAItF,IAAKsF,EACnB,GAAI0Z,EAAG1Z,GAIL,IAHA,IAAI+Z,EAAK/Z,GAAK,EAAI0Z,EAAG1Z,GACjBga,EAAML,EAAKD,EAAG1Z,GACd2B,EAAIkY,EAAGH,EAAG1Z,GAAK,MAAQga,EAClBC,EAAItY,GAAK,GAAKqY,GAAO,EAAGrY,GAAKsY,IAAKtY,EACzCiY,EAAGJ,EAAI7X,KAAOmY,GAAOC,OAM3B,IADAH,EAAK,IAAIjB,EAAIje,GACRsF,EAAI,EAAGA,EAAItF,IAAKsF,EACf0Z,EAAG1Z,KACL4Z,EAAG5Z,GAAKwZ,EAAIK,EAAGH,EAAG1Z,GAAK,QAAU,GAAK0Z,EAAG1Z,IAI/C,OAAO4Z,GAELM,EAAM,IAAIvM,EAAG,KACjB,IAAS3N,EAAI,EAAGA,EAAI,MAAOA,EACzBka,EAAIla,GAAK,EACX,IAASA,EAAI,IAAKA,EAAI,MAAOA,EAC3Bka,EAAIla,GAAK,EACX,IAASA,EAAI,IAAKA,EAAI,MAAOA,EAC3Bka,EAAIla,GAAK,EACX,IAASA,EAAI,IAAKA,EAAI,MAAOA,EAC3Bka,EAAIla,GAAK,EACX,IAAIma,EAAM,IAAIxM,EAAG,IACjB,IAAS3N,EAAI,EAAGA,EAAI,KAAMA,EACxBma,EAAIna,GAAK,EACX,IAAIoa,EAAMX,EAAKS,EAAK,EAAG,GACnBG,EAAOZ,EAAKS,EAAK,EAAG,GACpBI,EAAMb,EAAKU,EAAK,EAAG,GACnBI,EAAOd,EAAKU,EAAK,EAAG,GACpBrf,EAAM,SAAUP,GAElB,IADA,IAAI0f,EAAI1f,EAAE,GACDyF,EAAI,EAAGA,EAAIzF,EAAE0F,SAAUD,EAC1BzF,EAAEyF,GAAKia,IACTA,EAAI1f,EAAEyF,IAEV,OAAOia,GAELO,EAAO,SAAUpf,EAAGJ,EAAGif,GACzB,IAAIQ,EAAIzf,GAAK,EAAI,EACjB,OAAQI,EAAEqf,GAAKrf,EAAEqf,EAAI,IAAM,KAAW,EAAJzf,GAASif,GAEzCS,EAAS,SAAUtf,EAAGJ,GACxB,IAAIyf,EAAIzf,GAAK,EAAI,EACjB,OAAQI,EAAEqf,GAAKrf,EAAEqf,EAAI,IAAM,EAAIrf,EAAEqf,EAAI,IAAM,MAAY,EAAJzf,IAEjD2f,EAAO,SAAU3f,GACnB,OAAQA,GAAK,EAAI,IAAU,EAAJA,GAAS,IAE9B4f,EAAM,SAAUjZ,EAAGjH,EAAG6K,IACf,MAAL7K,GAAaA,EAAI,KACnBA,EAAI,IACG,MAAL6K,GAAaA,EAAI5D,EAAE1B,UACrBsF,EAAI5D,EAAE1B,QACR,IAAI4a,EAAI,IAAKlZ,aAAagX,EAAMA,EAAMhX,aAAa2M,EAAMA,EAAMX,GAAIpI,EAAI7K,GAEvE,OADAmgB,EAAEte,IAAIoF,EAAE/F,SAASlB,EAAG6K,IACbsV,GA8ILC,EAAQ,SAAU1f,EAAGJ,EAAG2G,GAC1BA,IAAU,EAAJ3G,EACN,IAAIyf,EAAIzf,GAAK,EAAI,EACjBI,EAAEqf,IAAM9Y,EACRvG,EAAEqf,EAAI,IAAM9Y,IAAM,GAEhBoZ,EAAU,SAAU3f,EAAGJ,EAAG2G,GAC5BA,IAAU,EAAJ3G,EACN,IAAIyf,EAAIzf,GAAK,EAAI,EACjBI,EAAEqf,IAAM9Y,EACRvG,EAAEqf,EAAI,IAAM9Y,IAAM,EAClBvG,EAAEqf,EAAI,IAAM9Y,IAAM,IAEhBqZ,EAAQ,SAAU5f,EAAGue,GAEvB,IADA,IAAIze,EAAI,GACC8E,EAAI,EAAGA,EAAI5E,EAAE6E,SAAUD,EAC1B5E,EAAE4E,IACJ9E,EAAEmL,KAAK,CAAE3L,EAAMugB,EAAG7f,EAAE4E,KAExB,IAAItF,EAAIQ,EAAE+E,OACNib,EAAKhgB,EAAEK,QACX,IAAKb,EACH,MAAO,CAACygB,EAAI,GACd,GAAU,IAANzgB,EAAS,CACX,IAAIiH,EAAI,IAAIgM,EAAGzS,EAAE,GAAGR,EAAI,GAExB,OADAiH,EAAEzG,EAAE,GAAGR,GAAK,EACL,CAACiH,EAAG,GAEbzG,EAAEmK,MAAK,SAAU9K,EAAGD,GAClB,OAAOC,EAAE0gB,EAAI3gB,EAAE2gB,KAEjB/f,EAAEmL,KAAK,CAAE3L,GAAI,EAAGugB,EAAG,QACnB,IAAItgB,EAAIO,EAAE,GAAId,EAAIc,EAAE,GAAIkgB,EAAK,EAAGC,EAAK,EAAGC,EAAK,EAE7C,IADApgB,EAAE,GAAK,CAAER,GAAI,EAAGugB,EAAGtgB,EAAEsgB,EAAI7gB,EAAE6gB,EAAGtgB,EAAGP,EAAAA,GAC1BihB,IAAO3gB,EAAI,GAChBC,EAAIO,EAAEA,EAAEkgB,GAAIH,EAAI/f,EAAEogB,GAAIL,EAAIG,IAAOE,KACjClhB,EAAIc,EAAEkgB,IAAOC,GAAMngB,EAAEkgB,GAAIH,EAAI/f,EAAEogB,GAAIL,EAAIG,IAAOE,KAC9CpgB,EAAEmgB,KAAQ,CAAE3gB,GAAI,EAAGugB,EAAGtgB,EAAEsgB,EAAI7gB,EAAE6gB,EAAGtgB,EAAGP,EAAAA,GAEtC,IAAImhB,EAASL,EAAG,GAAGxgB,EACnB,IAASsF,EAAI,EAAGA,EAAItF,IAAKsF,EACnBkb,EAAGlb,GAAGtF,EAAI6gB,IACZA,EAASL,EAAGlb,GAAGtF,GAEnB,IAAI8gB,EAAK,IAAI7C,EAAI4C,EAAS,GACtBE,EAAMC,EAAGxgB,EAAEmgB,EAAK,GAAIG,EAAI,GAC5B,GAAIC,EAAM9B,EAAI,CACR3Z,EAAI,EAAR,IAAW2b,EAAK,EACZC,EAAMH,EAAM9B,EAAIkC,EAAM,GAAKD,EAI/B,IAHAV,EAAG7V,MAAK,SAAU9K,EAAGD,GACnB,OAAOkhB,EAAGlhB,EAAEI,GAAK8gB,EAAGjhB,EAAEG,IAAMH,EAAE0gB,EAAI3gB,EAAE2gB,KAE/Bjb,EAAItF,IAAKsF,EAAG,CACjB,IAAI8b,EAAOZ,EAAGlb,GAAGtF,EACjB,KAAI8gB,EAAGM,GAAQnC,GAIb,MAHAgC,GAAME,GAAO,GAAKJ,EAAMD,EAAGM,IAC3BN,EAAGM,GAAQnC,EAKf,IADAgC,KAAQC,EACDD,EAAK,GAAG,CACb,IAAII,EAAOb,EAAGlb,GAAGtF,EACb8gB,EAAGO,GAAQpC,EACbgC,GAAM,GAAKhC,EAAK6B,EAAGO,KAAU,IAE3B/b,EAEN,KAAOA,GAAK,GAAK2b,IAAM3b,EAAG,CACxB,IAAIgc,EAAOd,EAAGlb,GAAGtF,EACb8gB,EAAGQ,KAAUrC,MACb6B,EAAGQ,KACHL,GAGNF,EAAM9B,EAER,MAAO,CAAC,IAAIhM,EAAG6N,GAAKC,IAElBC,EAAK,SAAUb,EAAGlgB,EAAGS,GACvB,OAAgB,IAATyf,EAAEngB,EAAWE,KAAKE,IAAI4gB,EAAGb,EAAElgB,EAAGA,EAAGS,EAAI,GAAIsgB,EAAGb,EAAEzgB,EAAGO,EAAGS,EAAI,IAAMT,EAAEkgB,EAAEngB,GAAKU,GAE5E6gB,EAAK,SAAUjK,GAEjB,IADA,IAAItX,EAAIsX,EAAE/R,OACHvF,IAAMsX,IAAItX,KAOjB,IALA,IAAIwhB,EAAK,IAAIvD,IAAMje,GACfyhB,EAAM,EAAGC,EAAMpK,EAAE,GAAIqK,EAAM,EAC3BjZ,EAAI,SAAUzB,GAChBua,EAAGC,KAASxa,GAEL3B,EAAI,EAAGA,GAAKtF,IAAKsF,EACxB,GAAIgS,EAAEhS,KAAOoc,GAAOpc,IAAMtF,IACtB2hB,MACC,CACH,IAAKD,GAAOC,EAAM,EAAG,CACnB,KAAOA,EAAM,IAAKA,GAAO,IACvBjZ,EAAE,OACAiZ,EAAM,IACRjZ,EAAEiZ,EAAM,GAAKA,EAAM,IAAM,EAAI,MAAQA,EAAM,GAAK,EAAI,OACpDA,EAAM,QAEH,GAAIA,EAAM,EAAG,CAElB,IADAjZ,EAAEgZ,KAAQC,EACHA,EAAM,EAAGA,GAAO,EACrBjZ,EAAE,MACAiZ,EAAM,IACRjZ,EAAEiZ,EAAM,GAAK,EAAI,MAAOA,EAAM,GAElC,KAAOA,KACLjZ,EAAEgZ,GACJC,EAAM,EACND,EAAMpK,EAAEhS,GAGZ,MAAO,CAACkc,EAAGtgB,SAAS,EAAGugB,GAAMzhB,IAE3B4hB,EAAO,SAAUC,EAAIL,GAEvB,IADA,IAAIvhB,EAAI,EACCqF,EAAI,EAAGA,EAAIkc,EAAGjc,SAAUD,EAC/BrF,GAAK4hB,EAAGvc,GAAKkc,EAAGlc,GAClB,OAAOrF,GAEL6hB,EAAQ,SAAUzZ,EAAK0Z,EAAKC,GAC9B,IAAIhiB,EAAIgiB,EAAIzc,OACRwa,EAAIE,EAAK8B,EAAM,GACnB1Z,EAAI0X,GAAS,IAAJ/f,EACTqI,EAAI0X,EAAI,GAAK/f,IAAM,EACnBqI,EAAI0X,EAAI,GAAc,IAAT1X,EAAI0X,GACjB1X,EAAI0X,EAAI,GAAkB,IAAb1X,EAAI0X,EAAI,GACrB,IAAK,IAAIza,EAAI,EAAGA,EAAItF,IAAKsF,EACvB+C,EAAI0X,EAAIza,EAAI,GAAK0c,EAAI1c,GACvB,OAAqB,GAAbya,EAAI,EAAI/f,IAEdiiB,EAAO,SAAUD,EAAK3Z,EAAK6Z,EAAOC,EAAMC,EAAIC,EAAI/V,EAAIgW,EAAIC,EAAIvN,EAAI1U,GAClE8f,EAAM/X,EAAK/H,IAAK4hB,KACdE,EAAG,KAML,IALA,IAAII,EAAMlC,EAAM8B,EAAI,IAAKK,EAAMD,EAAI,GAAIE,EAAMF,EAAI,GAC7CG,EAAMrC,EAAM+B,EAAI,IAAKO,EAAMD,EAAI,GAAIE,EAAMF,EAAI,GAC7CG,EAAKvB,EAAGkB,GAAMM,EAAOD,EAAG,GAAIE,EAAMF,EAAG,GACrCG,EAAK1B,EAAGqB,GAAMM,EAAOD,EAAG,GAAIE,EAAMF,EAAG,GACrCG,EAAS,IAAInF,EAAI,IACZ3Y,EAAI,EAAGA,EAAIyd,EAAKxd,SAAUD,EACjC8d,EAAiB,GAAVL,EAAKzd,MACd,IAASA,EAAI,EAAGA,EAAI4d,EAAK3d,SAAUD,EACjC8d,EAAiB,GAAVF,EAAK5d,MAGd,IAFA,IAAI+d,EAAK/C,EAAM8C,EAAQ,GAAIE,EAAMD,EAAG,GAAIE,EAAOF,EAAG,GAC9CG,EAAO,GACJA,EAAO,IAAMF,EAAIjF,EAAKmF,EAAO,MAAOA,GAE3C,IAKIC,EAAIC,EAAIC,EAAIC,EALZC,EAAO7O,EAAK,GAAK,EACjB8O,EAAQlC,EAAKQ,EAAI5C,GAAOoC,EAAKS,EAAI5C,GAAOnT,EACxCyX,EAAQnC,EAAKQ,EAAIK,GAAOb,EAAKS,EAAIO,GAAOtW,EAAK,GAAK,EAAIkX,EAAO5B,EAAKwB,EAAQE,IAAQ,EAAIF,EAAO,IAAM,EAAIA,EAAO,IAAM,EAAIA,EAAO,KACnI,GAAIS,GAAQC,GAASD,GAAQE,EAC3B,OAAOjC,EAAMzZ,EAAK/H,EAAG0hB,EAAI9gB,SAASqhB,EAAIA,EAAKvN,IAG7C,GADAoL,EAAM/X,EAAK/H,EAAG,GAAKyjB,EAAQD,IAASxjB,GAAK,EACrCyjB,EAAQD,EAAO,CACjBL,EAAK1E,EAAK0D,EAAKC,EAAK,GAAIgB,EAAKjB,EAAKkB,EAAK5E,EAAK6D,EAAKC,EAAK,GAAIe,EAAKhB,EAC/D,IAAIoB,EAAMjF,EAAKuE,EAAKC,EAAM,GAK1B,IAJAnD,EAAM/X,EAAK/H,EAAG0iB,EAAM,KACpB5C,EAAM/X,EAAK/H,EAAI,EAAG6iB,EAAM,GACxB/C,EAAM/X,EAAK/H,EAAI,GAAIkjB,EAAO,GAC1BljB,GAAK,GACIgF,EAAI,EAAGA,EAAIke,IAAQle,EAC1B8a,EAAM/X,EAAK/H,EAAI,EAAIgF,EAAGge,EAAIjF,EAAK/Y,KACjChF,GAAK,EAAIkjB,EAET,IADA,IAAIS,EAAO,CAAClB,EAAMG,GACTgB,EAAK,EAAGA,EAAK,IAAKA,EACzB,KAAIC,GAAOF,EAAKC,GAChB,IAAS5e,EAAI,EAAGA,EAAI6e,GAAK5e,SAAUD,EAAG,CACpC,IAAI8e,GAAgB,GAAVD,GAAK7e,GACf8a,EAAM/X,EAAK/H,EAAG0jB,EAAII,KAAO9jB,GAAKgjB,EAAIc,IAC9BA,GAAM,KACRhE,EAAM/X,EAAK/H,EAAG6jB,GAAK7e,KAAO,EAAI,KAAMhF,GAAK6jB,GAAK7e,KAAO,WAI3Dme,EAAK/D,EAAKgE,EAAKlE,EAAKmE,EAAK/D,EAAKgE,EAAKnE,EAErC,IAASna,EAAI,EAAGA,EAAIgd,IAAMhd,EACxB,GAAI6c,EAAK7c,GAAK,IAAK,CACb8e,GAAMjC,EAAK7c,KAAO,GAAK,GAC3B+a,EAAQhY,EAAK/H,EAAGmjB,EAAGW,GAAM,MAAO9jB,GAAKojB,EAAGU,GAAM,KAC1CA,GAAM,IACRhE,EAAM/X,EAAK/H,EAAG6hB,EAAK7c,KAAO,GAAK,IAAKhF,GAAK6d,EAAKiG,KAChD,IAAIC,GAAgB,GAAVlC,EAAK7c,GACf+a,EAAQhY,EAAK/H,EAAGqjB,EAAGU,KAAO/jB,GAAKsjB,EAAGS,IAC9BA,GAAM,IACRhE,EAAQhY,EAAK/H,EAAG6hB,EAAK7c,KAAO,EAAI,MAAOhF,GAAK8d,EAAKiG,UAEnDhE,EAAQhY,EAAK/H,EAAGmjB,EAAGtB,EAAK7c,KAAMhF,GAAKojB,EAAGvB,EAAK7c,IAI/C,OADA+a,EAAQhY,EAAK/H,EAAGmjB,EAAG,MACZnjB,EAAIojB,EAAG,MAEZY,EAAM,IAAI1Q,EAAI,CAAC,MAAO,OAAQ,OAAQ,OAAQ,OAAQ,QAAS,QAAS,QAAS,UACjF6M,EAAK,IAAIxN,EAAG,GAiIhB,SAASsR,EAASrV,EAAMsV,GACjBA,IACHA,EAAO,IACT,IAAI3kB,EAxCM,WACV,IAAIA,EAAI,EAAGD,EAAI,EACf,MAAO,CACLU,EAAG,SAAUI,GAGX,IAFA,IAAIyf,EAAItgB,EAAG0f,EAAI3f,EACXK,EAAe,EAAXS,EAAE6E,OACDD,EAAI,EAAGA,IAAMrF,GAAI,CAExB,IADA,IAAI4K,EAAI3K,KAAKC,IAAImF,EAAI,KAAMrF,GACpBqF,EAAIuF,IAAKvF,EACdia,GAAKY,GAAKzf,EAAE4E,GACd6a,GAAS,MAAJA,GAAa,IAAMA,GAAK,IAAKZ,GAAS,MAAJA,GAAa,IAAMA,GAAK,IAEjE1f,EAAIsgB,EAAGvgB,EAAI2f,GAEb7e,EAAG,WAED,OAAY,KADZb,GAAK,SACe,GAAKA,IAAM,GAAK,IAAU,KADlCD,GAAK,SACqC,EAAIA,IAAM,IAwB5D6kB,GACR5kB,EAAES,EAAE4O,GACJ,IAfkBoI,EACdoN,EAAcC,EARC3C,EAAK4C,EAAKC,EAAKC,EAAMC,EAsBpCrkB,GAtByBmkB,EAsBJ,EAtBSC,EAsBN,EArInB,SAAU9C,EAAKgD,EAAKC,EAAMJ,EAAKC,EAAMI,GAC9C,IAAIllB,EAAIgiB,EAAIzc,OACRwa,EAAI,IAAI9M,EAAG4R,EAAM7kB,EAAI,GAAK,EAAIE,KAAKilB,KAAKnlB,EAAI,MAAQ8kB,GACpDpc,EAAIqX,EAAE7e,SAAS2jB,EAAK9E,EAAExa,OAASuf,GAC/B/C,EAAM,EACV,IAAKiD,GAAOhlB,EAAI,EACd,IAAK,IAAIsF,EAAI,EAAGA,GAAKtF,EAAGsF,GAAK,MAAO,CAClC,IAAIuF,EAAIvF,EAAI,MACRuF,EAAI7K,EACN+hB,EAAMD,EAAMpZ,EAAGqZ,EAAKC,EAAI9gB,SAASoE,EAAGuF,KAEpCnC,EAAEpD,GAAK4f,EACPnD,EAAMD,EAAMpZ,EAAGqZ,EAAKC,EAAI9gB,SAASoE,EAAGtF,SAGnC,CAYL,IAXA,IAAI4kB,EAAMN,EAAIU,EAAM,GAChB7E,EAAIyE,IAAQ,GAAItN,EAAU,KAANsN,EACpBQ,GAAS,GAAKH,GAAQ,EACtBI,EAAO,IAAIpH,EAAI,OAAQqH,EAAO,IAAIrH,EAAImH,EAAQ,GAC9CG,EAAQrlB,KAAKilB,KAAKF,EAAO,GAAIO,EAAQ,EAAID,EACzCE,EAAM,SAAU7E,GAClB,OAAQoB,EAAIpB,GAAMoB,EAAIpB,EAAK,IAAM2E,EAAQvD,EAAIpB,EAAK,IAAM4E,GAASJ,GAE/DjD,EAAO,IAAIvO,EAAI,MACfwO,EAAK,IAAInE,EAAI,KAAMoE,EAAK,IAAIpE,EAAI,IAChCyH,EAAO,EAAGpZ,EAAK,EAAUgW,GAAPhd,EAAI,EAAQ,GAAGqgB,EAAK,EAAGpD,EAAK,EAC3Cjd,EAAItF,IAAKsF,EAAG,CACjB,IAAIsgB,EAAKH,EAAIngB,GACTugB,EAAW,MAAJvgB,EAAWwgB,EAAQR,EAAKM,GAGnC,GAFAP,EAAKQ,GAAQC,EACbR,EAAKM,GAAMC,EACPF,GAAMrgB,EAAG,CACX,IAAIygB,EAAM/lB,EAAIsF,EACd,IAAKogB,EAAO,KAAOpD,EAAK,QAAUyD,EAAM,IAAK,CAC3ChE,EAAME,EAAKD,EAAKtZ,EAAG,EAAGyZ,EAAMC,EAAIC,EAAI/V,EAAIgW,EAAIC,EAAIjd,EAAIid,EAAIR,GACxDO,EAAKoD,EAAOpZ,EAAK,EAAGiW,EAAKjd,EACzB,IAAK,IAAIiZ,EAAI,EAAGA,EAAI,MAAOA,EACzB6D,EAAG7D,GAAK,EACV,IAASA,EAAI,EAAGA,EAAI,KAAMA,EACxB8D,EAAG9D,GAAK,EAEZ,IAAIte,EAAI,EAAGS,EAAI,EAAGslB,EAAO1O,EAAG2O,EAAMJ,EAAOC,EAAQ,MACjD,GAAIC,EAAM,GAAKH,IAAOH,EAAIngB,EAAI2gB,GAI5B,IAHA,IAAIC,EAAOhmB,KAAKC,IAAIggB,EAAG4F,GAAO,EAC1BI,EAAOjmB,KAAKC,IAAI,MAAOmF,GACvB8gB,EAAKlmB,KAAKC,IAAI,IAAK4lB,GAChBE,GAAOE,KAAUH,GAAQH,IAASC,GAAO,CAC9C,GAAI9D,EAAI1c,EAAIrF,KAAO+hB,EAAI1c,EAAIrF,EAAIgmB,GAAM,CAEnC,IADA,IAAII,GAAK,EACFA,GAAKD,GAAMpE,EAAI1c,EAAI+gB,MAAQrE,EAAI1c,EAAI+gB,GAAKJ,KAAQI,IAEvD,GAAIA,GAAKpmB,EAAG,CAEV,GADAA,EAAIomB,GAAI3lB,EAAIulB,EACRI,GAAKH,EACP,MACF,IAAII,GAAMpmB,KAAKC,IAAI8lB,EAAKI,GAAK,GACzBE,GAAK,EACT,IAAShI,EAAI,EAAGA,EAAI+H,KAAO/H,EAAG,CAC5B,IAAIiI,GAAKlhB,EAAI2gB,EAAM1H,EAAI,MAAQ,MAE3BS,GAAKwH,GADCnB,EAAKmB,IACK,MAAQ,MACxBxH,GAAKuH,KACPA,GAAKvH,GAAI8G,EAAQU,MAKzBP,IADAJ,EAAOC,IAAOA,EAAQT,EAAKQ,IACL,MAAQ,MAGlC,GAAInlB,EAAG,CACLyhB,EAAKG,KAAQ,UAAY5D,EAAMze,IAAM,GAAK4e,EAAMne,GAChD,IAAI+lB,GAAiB,GAAX/H,EAAMze,GAASymB,GAAiB,GAAX7H,EAAMne,GACrC4L,GAAM6R,EAAKsI,IAAOrI,EAAKsI,MACrBtE,EAAG,IAAMqE,MACTpE,EAAGqE,IACLf,EAAKrgB,EAAIrF,IACPylB,OAEFvD,EAAKG,KAAQN,EAAI1c,KACf8c,EAAGJ,EAAI1c,KAIfyc,EAAME,EAAKD,EAAKtZ,EAAGwc,EAAK/C,EAAMC,EAAIC,EAAI/V,EAAIgW,EAAIC,EAAIjd,EAAIid,EAAIR,IACrDmD,GAAa,EAANnD,IACVA,EAAMD,EAAMpZ,EAAGqZ,EAAM,EAAGtB,IAE5B,OAAOP,EAAIH,EAAG,EAAG8E,EAAM5E,EAAK8B,GAAO+C,GAuB5B6B,CADY3E,EAsBN9S,EArBiB,OADN0V,EAsBLJ,GArBEvW,MAAgB,EAAI2W,EAAI3W,MAAkB,MAAX2W,EAAIjnB,IAAcuC,KAAKilB,KAAuD,IAAlDjlB,KAAKE,IAAI,EAAGF,KAAKC,IAAI,GAAID,KAAK0mB,IAAI5E,EAAIzc,WAAmB,GAAKqf,EAAIjnB,IAAKknB,EAAKC,GAAOC,IAsBnK,OAhBkBzN,EAgBP5W,EAfOikB,EAAa,KAA3BD,EAeUF,EAfHvW,OAAwB,EAAIyW,EAAK,EAAI,EAAW,IAAPA,EAAW,EAAI,EACnEpN,EAAE,GAAK,IAAKA,EAAE,GAAKqN,GAAO,GAAKA,EAAM,GAAK,EAAIA,EAAM,GANzC,SAAUjkB,EAAGd,EAAGqH,GAC3B,KAAOA,IAAKrH,EACVc,EAAEd,GAAKqH,EAAGA,KAAO,EAkBE4f,CAAOnmB,EAAGA,EAAE6E,OAAS,EAAG1F,EAAEa,KAAMA,EAevDpD,EAAOD,QAAU,CACf6X,SATF,SAAkB4R,EAAK7Y,GACrB,OAAOsW,EAASuC,EAAK,CAAE7Y,MAAAA,KASvBkH,WANF,SAAoB2R,EAAKtK,GACvB,OAVkBtN,EAUA4X,EAVMze,EAUD,IAAIwL,WAAW2I,GAre5B,SAAUwF,EAAK8E,EAAK/B,GAC9B,IAAIgC,EAAK/E,EAAIzc,OACb,IAAKwhB,GAAMhC,IAAOA,EAAG9kB,GAAK8mB,EAAK,EAC7B,OAAOD,GAAO,IAAI7T,EAAG,GACvB,IAAI+T,GAASF,GAAO/B,EAChBkC,GAAQlC,GAAMA,EAAGzf,EAChByf,IACHA,EAAK,IACF+B,IACHA,EAAM,IAAI7T,EAAQ,EAAL8T,IACf,IAAIG,EAAO,SAAUC,GACnB,IAAInS,EAAK8R,EAAIvhB,OACb,GAAI4hB,EAAKnS,EAAI,CACX,IAAIoS,EAAO,IAAInU,EAAG/S,KAAKE,IAAS,EAAL4U,EAAQmS,IACnCC,EAAKvlB,IAAIilB,GACTA,EAAMM,IAGNlF,EAAQ6C,EAAGxE,GAAK,EAAGwB,EAAMgD,EAAGzkB,GAAK,EAAG+mB,EAAKtC,EAAGnlB,GAAK,EAAG6jB,EAAKsB,EAAG9kB,EAAG0jB,EAAKoB,EAAGrkB,EAAG4mB,EAAMvC,EAAGxF,EAAGgI,EAAMxC,EAAG5E,EAC/FqH,EAAY,EAALT,EACX,EAAG,CACD,IAAKtD,EAAI,CACPsB,EAAGxE,EAAI2B,EAAQpC,EAAKkC,EAAKD,EAAK,GAC9B,IAAIlL,EAAOiJ,EAAKkC,EAAKD,EAAM,EAAG,GAE9B,GADAA,GAAO,GACFlL,EAAM,CACT,IAAuB5W,EAAI+hB,GAAvBhiB,EAAIigB,EAAK8B,GAAO,GAAe,GAAKC,EAAIhiB,EAAI,IAAM,EAAGQ,EAAIR,EAAIC,EACjE,GAAIO,EAAIumB,EAAI,CACV,GAAIE,EACF,KAAM,iBACR,MAEED,GACFE,EAAKG,EAAKpnB,GACZ6mB,EAAIjlB,IAAImgB,EAAI9gB,SAASlB,EAAGQ,GAAI6mB,GAC5BtC,EAAGnlB,EAAIynB,GAAMpnB,EAAG8kB,EAAGzkB,EAAIyhB,EAAU,EAAJvhB,EAC7B,SACK,GAAa,IAATqW,EACT4M,EAAK9D,EAAMgE,EAAK9D,EAAMyH,EAAM,EAAGC,EAAM,MAClC,IAAa,IAAT1Q,EAoCP,KAAM,qBAnCN,IAAI4Q,EAAO3H,EAAKkC,EAAKD,EAAK,IAAM,IAAK2F,EAAQ5H,EAAKkC,EAAKD,EAAM,GAAI,IAAM,EACnE4F,EAAKF,EAAO3H,EAAKkC,EAAKD,EAAM,EAAG,IAAM,EACzCA,GAAO,GAGP,IAFA,IAAI6F,EAAM,IAAI3U,EAAG0U,GACbE,EAAM,IAAI5U,EAAG,IACR3N,EAAI,EAAGA,EAAIoiB,IAASpiB,EAC3BuiB,EAAIxJ,EAAK/Y,IAAMwa,EAAKkC,EAAKD,EAAU,EAAJzc,EAAO,GAExCyc,GAAe,EAAR2F,EACP,IAAII,EAAM1nB,EAAIynB,GAAME,GAAU,GAAKD,GAAO,EACtCE,EAAMjJ,EAAK8I,EAAKC,EAAK,GACzB,IAASxiB,EAAI,EAAGA,EAAIqiB,GAAK,CACvB,IAEI3nB,EAFAN,EAAIsoB,EAAIlI,EAAKkC,EAAKD,EAAKgG,IAG3B,GAFAhG,GAAW,GAAJriB,GACHM,EAAIN,IAAM,GACN,GACNkoB,EAAItiB,KAAOtF,MACN,CACL,IAAIsX,EAAI,EAAG6I,EAAI,EAOf,IANU,KAANngB,GACFmgB,EAAI,EAAIL,EAAKkC,EAAKD,EAAK,GAAIA,GAAO,EAAGzK,EAAIsQ,EAAItiB,EAAI,IACpC,KAANtF,GACPmgB,EAAI,EAAIL,EAAKkC,EAAKD,EAAK,GAAIA,GAAO,GACrB,KAAN/hB,IACPmgB,EAAI,GAAKL,EAAKkC,EAAKD,EAAK,KAAMA,GAAO,GAChC5B,KACLyH,EAAItiB,KAAOgS,GAGjB,IAAI2Q,EAAKL,EAAI1mB,SAAS,EAAGumB,GAAOxG,EAAK2G,EAAI1mB,SAASumB,GAClDH,EAAMlnB,EAAI6nB,GACVV,EAAMnnB,EAAI6gB,GACVwC,EAAK1E,EAAKkJ,EAAIX,EAAK,GACnB3D,EAAK5E,EAAKkC,EAAIsG,EAAK,GAGrB,GAAIxF,EAAMyF,EAAM,CACd,GAAIP,EACF,KAAM,iBACR,OAGAD,GACFE,EAAKG,EAAK,QAGZ,IAFA,IAAIa,GAAO,GAAKZ,GAAO,EAAGa,GAAO,GAAKZ,GAAO,EACzCa,EAAOrG,GACFqG,EAAOrG,EAAK,CACnB,IAAoCsG,GAAhC/Q,EAAImM,EAAGzD,EAAOgC,EAAKD,GAAOmG,MAAkB,EAEhD,IADAnG,GAAW,GAAJzK,GACGkQ,EAAM,CACd,GAAIP,EACF,KAAM,iBACR,MAEF,IAAK3P,EACH,KAAM,yBACR,GAAI+Q,EAAM,IACRvB,EAAIO,KAAQgB,MACT,IAAY,MAARA,EAAa,CACpBD,EAAOrG,EAAK0B,EAAK,KACjB,MAEA,IAAIzQ,EAAMqV,EAAM,IAChB,GAAIA,EAAM,IAAK,CACb,IAAmBzoB,EAAIue,EAAnB7Y,EAAI+iB,EAAM,KACdrV,EAAM8M,EAAKkC,EAAKD,GAAM,GAAKniB,GAAK,GAAK6e,EAAGnZ,GACxCyc,GAAOniB,EAET,IAAIc,EAAIijB,EAAG3D,EAAOgC,EAAKD,GAAOoG,GAAMG,GAAO5nB,IAAM,EACjD,IAAKA,EACH,KAAM,mBAOR,GANAqhB,GAAW,GAAJrhB,EACHugB,EAAKrC,EAAG0J,IACRA,GAAO,IACL1oB,EAAIwe,EAAKkK,IACbrH,GAAMjB,EAAOgC,EAAKD,IAAQ,GAAKniB,GAAK,EAAGmiB,GAAOniB,GAE5CmiB,EAAMyF,EAAM,CACd,GAAIP,EACF,KAAM,iBACR,MAEED,GACFE,EAAKG,EAAK,QAEZ,IADA,IAAItjB,GAAMsjB,EAAKrU,EACRqU,EAAKtjB,GAAKsjB,GAAM,EACrBP,EAAIO,GAAMP,EAAIO,EAAKpG,GACnB6F,EAAIO,EAAK,GAAKP,EAAIO,EAAK,EAAIpG,GAC3B6F,EAAIO,EAAK,GAAKP,EAAIO,EAAK,EAAIpG,GAC3B6F,EAAIO,EAAK,GAAKP,EAAIO,EAAK,EAAIpG,GAE7BoG,EAAKtjB,IAGTghB,EAAG9kB,EAAIwjB,EAAIsB,EAAGzkB,EAAI8nB,EAAMrD,EAAGnlB,EAAIynB,EAC3B5D,IACFvB,EAAQ,EAAG6C,EAAGxF,EAAI+H,EAAKvC,EAAGrkB,EAAIijB,EAAIoB,EAAG5E,EAAIoH,UACnCrF,GACV,OAAOmF,IAAOP,EAAIvhB,OAASuhB,EAAM5G,EAAI4G,EAAK,EAAGO,GAkVtCkB,EAfC,SAAU7nB,GAClB,GAAoB,IAAR,GAAPA,EAAE,KAAkBA,EAAE,KAAO,EAAI,IAAMA,EAAE,IAAM,EAAIA,EAAE,IAAM,GAC9D,KAAM,oBACR,GAAW,GAAPA,EAAE,GACJ,KAAM,uDAWM8nB,CAAItZ,GAAOA,EAAKhO,SAAS,GAAI,IAAKmH,GADlD,IAAoB6G,EAAM7G,K,sqBC5lBtBogB,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBpd,IAAjBqd,EACH,OAAOA,EAAavrB,QAGrB,IAAIC,EAASmrB,EAAyBE,GAAY,CAGjDtrB,QAAS,IAOV,OAHAwrB,EAAoBF,GAAUrrB,EAAQA,EAAOD,QAASqrB,GAG/CprB,EAAOD,QClBWqrB,CAAoB,K,MDF1CD","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","offset","getUint32","static","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","rgbaToHSLA","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","iterateWithColors","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","async","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","svg","size","includes","TextEncoder","rasterize","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","indexOf","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","zlibSync","opts","adler","lv","fl2","opt","pre","post","st","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","buf","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file From f515c71b0a383ae82b6af7958e63a26a616ba5e0 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Wed, 26 Oct 2022 09:03:49 +0200 Subject: [PATCH 093/120] chore: update domain --- README.md | 30 +++++++++++++++--------------- package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index bfac3ff..aafc8fa 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # ImageScript ##### zero-dependency JavaScript image manipulation [![Discord Server](https://img.shields.io/discord/691713541262147687.svg?label=Discord&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2&style=for-the-badge)](https://discord.gg/8hPrwAH) -[![Documentation](https://img.shields.io/badge/Documentation-informational?style=for-the-badge)](https://imagescript.dreadful.tech/) +[![Documentation](https://img.shields.io/badge/Documentation-informational?style=for-the-badge)](https://imagescript.matmen.dev/) [![Github](https://img.shields.io/badge/Github-Repository-181717?logo=github&style=for-the-badge)](https://github.com/matmen/ImageScript) [![deno.land](https://shields.io/badge/deno.land-gray?logo=deno&style=for-the-badge)](https://deno.land/x/imagescript@1.2.9) [![NPM](https://nodei.co/npm/imagescript.png)](https://www.npmjs.com/package/imagescript) @@ -16,23 +16,23 @@ binaries for decoding and encoding. ### Features -- [Decoding images](https://imagescript.dreadful.tech/Image.html#.decode) +- [Decoding images](https://imagescript.matmen.dev/Image.html#.decode) - PNGs (grayscale, RGB, indexed colors) with and without alpha channels - JPEGs (grayscale, RGB, CMYK) - TIFFs -- [Decoding GIFs](https://imagescript.dreadful.tech/GIF.html#.decode) -- [Rendering SVGs](https://imagescript.dreadful.tech/Image.html#.renderSVG) -- [Rendering vector fonts](https://imagescript.dreadful.tech/Image.html#.renderText) -- Image manipulation functions ([crop](https://imagescript.dreadful.tech/Image.html#crop) - , [rotate](https://imagescript.dreadful.tech/Image.html#rotate) - , [composite](https://imagescript.dreadful.tech/Image.html#composite), ...) -- Color manipulation functions ([invert](https://imagescript.dreadful.tech/Image.html##invert) - , [hueShift](https://imagescript.dreadful.tech/Image.html##hueshift), ...) -- Color information functions ([averageColor](https://imagescript.dreadful.tech/Image.html##averagecolor) - , [dominantColor](https://imagescript.dreadful.tech/Image.html##dominantcolor), ...) -- Encoding images as [PNGs](https://imagescript.dreadful.tech/Image.html##encode) - , [JPEGs](https://imagescript.dreadful.tech/Image.html##encodejpeg) - and [GIFs](https://imagescript.dreadful.tech/GIF.html#encode) +- [Decoding GIFs](https://imagescript.matmen.dev/GIF.html#.decode) +- [Rendering SVGs](https://imagescript.matmen.dev/Image.html#.renderSVG) +- [Rendering vector fonts](https://imagescript.matmen.dev/Image.html#.renderText) +- Image manipulation functions ([crop](https://imagescript.matmen.dev/Image.html#crop) + , [rotate](https://imagescript.matmen.dev/Image.html#rotate) + , [composite](https://imagescript.matmen.dev/Image.html#composite), ...) +- Color manipulation functions ([invert](https://imagescript.matmen.dev/Image.html##invert) + , [hueShift](https://imagescript.matmen.dev/Image.html##hueshift), ...) +- Color information functions ([averageColor](https://imagescript.matmen.dev/Image.html##averagecolor) + , [dominantColor](https://imagescript.matmen.dev/Image.html##dominantcolor), ...) +- Encoding images as [PNGs](https://imagescript.matmen.dev/Image.html##encode) + , [JPEGs](https://imagescript.matmen.dev/Image.html##encodejpeg) + and [GIFs](https://imagescript.matmen.dev/GIF.html#encode) --- diff --git a/package.json b/package.json index d310f3e..a7ba3ee 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "picture", "thumbnail" ], - "author": "matmen ", + "author": "Mathis Mensing ", "license": "GPL-3.0-or-later", "bugs": { "url": "https://github.com/matmen/ImageScript/issues" From f0bd428c224a8ce2d1f34c703ef3933f302413c6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 26 Oct 2022 07:04:08 +0000 Subject: [PATCH 094/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index 718ce8b..e440189 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(function(){return t={860:(t,e,r)=>{const i=r(205),n=r(3),s=r(584),o=r(338),{version:a}=r(147),h=r(820),l=r(501),f=r(193);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},3:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},546:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},205:(t,e,r)=>{const i=r(3),n=r(546),{compress:s,decompress:o}=r(223),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},584:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},501:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},338:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},193:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},223:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return B(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=B(g,d,t.subarray(p,m)):(g[p]=c,d=B(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=B(g,d+1,D))}return R(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var B=new e(z),C=new e(19),H=0;H>>4)<16)B[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=B[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)B[H++]=$}}var P=B.subarray(0,N),Z=B.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},147:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.6","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"matmen ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(860);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(()=>{return t={860:(t,e,r)=>{const i=r(205),n=r(3),s=r(584),o=r(338),{version:a}=r(147),h=r(820),l=r(501),f=r(193);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},3:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},546:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},205:(t,e,r)=>{const i=r(3),n=r(546),{compress:s,decompress:o}=r(223),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},584:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},501:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},338:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},193:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},223:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return B(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=B(g,d,t.subarray(p,m)):(g[p]=c,d=B(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=B(g,d+1,D))}return R(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var B=new e(z),C=new e(19),H=0;H>>4)<16)B[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=B[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)B[H++]=$}}var P=B.subarray(0,N),Z=B.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},147:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.6","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"Mathis Mensing ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(860);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index e1ca7f9..5328f55 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, function() {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","offset","getUint32","static","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","rgbaToHSLA","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","iterateWithColors","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","async","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","svg","size","includes","TextEncoder","rasterize","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","indexOf","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","zlibSync","opts","adler","lv","fl2","opt","pre","post","st","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","buf","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","offset","getUint32","static","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","rgbaToHSLA","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","iterateWithColors","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","async","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","svg","size","includes","TextEncoder","rasterize","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","indexOf","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","zlibSync","opts","adler","lv","fl2","opt","pre","post","st","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","buf","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file From 80690f882db5b1ea13ab5cf30afa4e8f001a8e07 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Wed, 26 Oct 2022 09:15:34 +0200 Subject: [PATCH 095/120] fix: add types to package.json --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index a7ba3ee..38ad52f 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "1.2.6", "description": "zero-dependency javascript image manipulation", "main": "ImageScript.js", + "types": "ImageScript.d.ts", "type": "commonjs", "scripts": { "build": "webpack" From bf62a2a62b51f584a5706a59888b56c2805c5500 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 26 Oct 2022 07:15:56 +0000 Subject: [PATCH 096/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index e440189..ff01b3e 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(()=>{return t={860:(t,e,r)=>{const i=r(205),n=r(3),s=r(584),o=r(338),{version:a}=r(147),h=r(820),l=r(501),f=r(193);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},3:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},546:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},205:(t,e,r)=>{const i=r(3),n=r(546),{compress:s,decompress:o}=r(223),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},584:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},501:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},338:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},193:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},223:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return B(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=B(g,d,t.subarray(p,m)):(g[p]=c,d=B(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=B(g,d+1,D))}return R(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var B=new e(z),C=new e(19),H=0;H>>4)<16)B[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=B[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)B[H++]=$}}var P=B.subarray(0,N),Z=B.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},147:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.6","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"Mathis Mensing ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(860);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(()=>{return t={860:(t,e,r)=>{const i=r(205),n=r(3),s=r(584),o=r(338),{version:a}=r(147),h=r(820),l=r(501),f=r(193);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},3:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},546:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},205:(t,e,r)=>{const i=r(3),n=r(546),{compress:s,decompress:o}=r(223),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},584:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},501:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},338:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},193:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},223:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return B(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=B(g,d,t.subarray(p,m)):(g[p]=c,d=B(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=B(g,d+1,D))}return R(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var B=new e(z),C=new e(19),H=0;H>>4)<16)B[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=B[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)B[H++]=$}}var P=B.subarray(0,N),Z=B.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},147:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.6","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","types":"ImageScript.d.ts","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"Mathis Mensing ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(860);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index 5328f55..cbab1a4 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","offset","getUint32","static","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","rgbaToHSLA","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","iterateWithColors","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","async","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","svg","size","includes","TextEncoder","rasterize","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","indexOf","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","zlibSync","opts","adler","lv","fl2","opt","pre","post","st","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","buf","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"ImageScript.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,IAEzBD,EAAkB,YAAIC,GACvB,CATD,CASGK,MAAM,KACT,O,iBCVA,MAAMC,EAAM,EAAQ,KACdC,EAAM,EAAQ,GACdC,EAAS,EAAQ,KACjBC,EAAS,EAAQ,MACjB,QAACC,GAAW,EAAQ,KACpBC,EAAU,EAAQ,KAClBC,EAAU,EAAQ,KAClBC,EAAU,EAAQ,KAYxB,MAAMC,EAOFC,YAAYC,EAAOC,GAIf,GAFAA,IAAWA,GADXD,IAAUA,GAGE,EACR,MAAM,IAAIE,WAAW,yCACzB,GAAID,EAAS,EACT,MAAM,IAAIC,WAAW,yCAGzBC,KAAKC,UAAYJ,EAEjBG,KAAKE,WAAaJ,EAElBE,KAAKG,WAAa,IAAIC,YAAYP,EAAQC,EAAS,GAEnDE,KAAKK,SAAW,IAAIC,SAASN,KAAKG,YAElCH,KAAKO,QAAU,IAAIC,YAAYR,KAAKG,YAKpCH,KAAKS,OAAS,IAAIC,kBAAkBV,KAAKG,WAC7C,CAMAQ,WACI,MAAO,SAASX,KAAKH,SAASG,KAAKF,SACvC,CAMID,YACA,OAAOG,KAAKC,SAChB,CAMIH,aACA,OAAOE,KAAKE,UAChB,CAOA,EAAGU,OAAOC,YACN,IAAK,IAAIC,EAAI,EAAGA,GAAKd,KAAKF,OAAQgB,IAC9B,IAAK,IAAIC,EAAI,EAAGA,GAAKf,KAAKH,MAAOkB,SACvB,CAACA,EAAGD,EAGtB,CAMA,qBACI,IAAIE,EAAS,EACb,IAAK,IAAIF,EAAI,EAAGA,GAAKd,KAAKF,OAAQgB,IAC9B,IAAK,IAAIC,EAAI,EAAGA,GAAKf,KAAKH,MAAOkB,SACvB,CAACA,EAAGD,EAAGd,KAAKK,SAASY,UAAUD,GAAQ,IAC7CA,GAAU,CAGtB,CAUAE,mBAAmBC,EAAGC,EAAGC,EAAGC,GACxB,QAAc,IAAJH,IAAa,IAAY,IAAJC,IAAa,IAAY,IAAJC,IAAa,EAAU,IAAJC,KAAe,CAC1F,CASAJ,kBAAkBC,EAAGC,EAAGC,GACpB,OAAO1B,EAAM4B,YAAYJ,EAAGC,EAAGC,EAAG,IACtC,CAUAH,mBAAmBM,EAAGC,EAAGC,EAAGJ,GAMxB,IAAIH,EAAGC,EAAGC,EAEV,GAPAG,GAAK,EACLC,EAAIE,KAAKC,IAAI,EAAGD,KAAKE,IAAI,EAAGJ,IAC5BC,EAAIC,KAAKC,IAAI,EAAGD,KAAKE,IAAI,EAAGH,IAC5BJ,EAAIK,KAAKC,IAAI,EAAGD,KAAKE,IAAI,EAAGP,IAIlB,IAANG,EACAN,EAAIC,EAAIC,EAAIK,MACT,CACH,MAAMI,EAAU,CAACC,EAAGC,EAAGC,KACfA,EAAI,IAAGA,GAAK,GACZA,EAAI,IAAGA,GAAK,GACZA,EAAI,EAAI,EAAUF,EAAc,GAATC,EAAID,GAASE,EACpCA,EAAI,GAAcD,EAClBC,EAAI,EAAI,EAAUF,GAAKC,EAAID,IAAM,EAAI,EAAIE,GAAK,EAC3CF,GAGLC,EAAIN,EAAI,GAAMA,GAAK,EAAID,GAAKC,EAAID,EAAIC,EAAID,EACxCM,EAAI,EAAIL,EAAIM,EAElBb,EAAIW,EAAQC,EAAGC,EAAGR,EAAI,EAAI,GAC1BJ,EAAIU,EAAQC,EAAGC,EAAGR,GAClBH,EAAIS,EAAQC,EAAGC,EAAGR,EAAI,EAAI,EAC9B,CAEA,OAAO7B,EAAM4B,YAAgB,IAAJJ,EAAa,IAAJC,EAAa,IAAJC,EAAa,IAAJC,EACxD,CASAJ,kBAAkBM,EAAGC,EAAGC,GACpB,OAAO/B,EAAMuC,YAAYV,EAAGC,EAAGC,EAAG,EACtC,CAUAR,kBAAkBC,EAAGC,EAAGC,EAAGC,GACvBH,GAAK,IACLC,GAAK,IACLC,GAAK,IAEL,MAAMQ,EAAMF,KAAKE,IAAIV,EAAGC,EAAGC,GAAIO,EAAMD,KAAKC,IAAIT,EAAGC,EAAGC,GACpD,IAAIG,EAAGC,EAAGC,GAAKG,EAAMD,GAAO,EAE5B,GAAIC,IAAQD,EACRJ,EAAIC,EAAI,MACL,CACH,MAAMU,EAAIN,EAAMD,EAEhB,OADAH,EAAIC,EAAI,GAAMS,GAAK,EAAIN,EAAMD,GAAOO,GAAKN,EAAMD,GACvCC,GACJ,KAAKV,EACDK,GAAKJ,EAAIC,GAAKc,GAAKf,EAAIC,EAAI,EAAI,GAC/B,MACJ,KAAKD,EACDI,GAAKH,EAAIF,GAAKgB,EAAI,EAClB,MACJ,KAAKd,EACDG,GAAKL,EAAIC,GAAKe,EAAI,EAI1BX,GAAK,CACT,CAEA,MAAO,CAACA,EAAGC,EAAGC,EAAGJ,EAAI,IACzB,CAOAJ,mBAAmBkB,GACf,MAAO,CAAEA,GAAS,GAAM,IAAOA,GAAS,GAAM,IAAOA,GAAS,EAAK,IAAc,IAARA,EAC7E,CAOAlB,kBAAkBkB,GACd,OAAOzC,EAAM0C,YAAYD,GAAOE,MAAM,EAAG,EAC7C,CAQAC,WAAWxB,EAAGD,GAEV,OADAd,KAAKwC,qBAAqBzB,EAAGD,GACtBd,KAAKK,SAASY,UAAiD,MAAnCH,EAAI,GAAKd,KAAKH,SAAWkB,EAAI,KAAS,EAC7E,CAQA0B,UAAU1B,EAAGD,GACTd,KAAKwC,qBAAqBzB,EAAGD,GAC7B,MAAM4B,EAA6C,MAAnC5B,EAAI,GAAKd,KAAKH,SAAWkB,EAAI,IAC7C,OAAOf,KAAKS,OAAOkC,SAASD,EAAKA,EAAM,EAC3C,CAQAE,WAAW7B,EAAGD,EAAG+B,GAKb,OAJA9B,IAAMA,EACND,IAAMA,EACNd,KAAKwC,qBAAqBzB,EAAGD,GAC7Bd,KAAK8C,cAAc/B,EAAGD,EAAG+B,GAClB7C,IACX,CAQA8C,cAAc/B,EAAGD,EAAG+B,GAChB7C,KAAKK,SAAS0C,UAA6C,IAAjCjC,EAAI,GAAKd,KAAKH,OAASkB,EAAI,IAAS8B,GAAY,EAC9E,CAOAL,qBAAqBzB,EAAGD,GACpB,GAAIkC,MAAMjC,GAAI,MAAM,IAAIkC,UAAU,gCAAgClC,MAClE,GAAIiC,MAAMlC,GAAI,MAAM,IAAImC,UAAU,gCAAgCnC,MAClE,GAAIC,EAAI,EACJ,MAAM,IAAIhB,WAAW,GAAGJ,EAAMuD,wBAAwBnC,QAC1D,GAAIA,EAAIf,KAAKH,MACT,MAAM,IAAIE,WAAW,GAAGJ,EAAMuD,wBAAwBnC,aAAaf,KAAKH,UAC5E,GAAIiB,EAAI,EACJ,MAAM,IAAIf,WAAW,GAAGJ,EAAMuD,wBAAwBpC,QAC1D,GAAIA,EAAId,KAAKF,OACT,MAAM,IAAIC,WAAW,GAAGJ,EAAMuD,wBAAwBpC,cAAcd,KAAKF,UACjF,CAKWoD,+BACP,MAAO,6DACX,CAcAC,KAAKf,GAED,GAAa,mBADOA,EAEhBpC,KAAKK,SAAS0C,UAAU,EAAGX,GAAO,GAClCpC,KAAKO,QAAQ4C,KAAKnD,KAAKO,QAAQ,QAC5B,CACH,IAAIS,EAAS,EACb,IAAK,IAAIF,EAAI,EAAGA,GAAKd,KAAKF,OAAQgB,IAC9B,IAAK,IAAIC,EAAI,EAAGA,GAAKf,KAAKH,MAAOkB,IAC7Bf,KAAKK,SAAS0C,UAAU/B,EAAQoB,EAAMrB,EAAGD,IAAI,GAC7CE,GAAU,CAGtB,CAEA,OAAOhB,IACX,CAMAoD,QACI,MAAMC,EAAQ,IAAI1D,EAAMK,KAAKH,MAAOG,KAAKF,QAEzC,OADAuD,EAAM5C,OAAO6C,IAAItD,KAAKS,QACf4C,CACX,CAMWE,qCACP,MAAO,yBACX,CAMWC,yBACP,OAAQ,CACZ,CAQAC,MAAMC,EAAQC,EAAOhE,EAAM4D,yBACvB,MAAMF,EAAQrD,KAAK4D,UAAUF,EAAQC,GACrC,OAAO3D,KAAK6D,UAAUR,EAC1B,CAGAO,UAAUF,EAAQC,EAAOhE,EAAM4D,yBAC3B,OAAe,IAAXG,EAAqB1D,KAClBA,KAAK8D,WAAW9D,KAAKH,MAAQ6D,EAAQ1D,KAAKF,OAAS4D,EAAQC,EACtE,CAUAI,OAAOlE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBAC/B,MAAMF,EAAQrD,KAAK8D,WAAWjE,EAAOC,EAAQ6D,GAC7C,OAAO3D,KAAK6D,UAAUR,EAC1B,CAUAW,QAAQnE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBAChC,MAAMU,EAAcpE,EAAQC,EAASE,KAAKH,MAAQG,KAAKF,OAASA,EAASE,KAAKF,OAASD,EAAQG,KAAKH,MACpG,OAAOG,KAAKyD,MAAMQ,EAAaN,EACnC,CAUAO,IAAIrE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBAC5B,MAAMY,EAAS,IAAIxE,EAAME,EAAOC,GAGhC,OAFAE,KAAKgE,QAAQnE,EAAOC,EAAQ6D,GAC5BQ,EAAOC,UAAUpE,MAAOH,EAAQG,KAAKH,OAAS,GAAIC,EAASE,KAAKF,QAAU,GACnEE,KAAK6D,UAAUM,EAC1B,CAUAE,MAAMxE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBAC9B,MAAMU,EAAcpE,EAAQC,EAASE,KAAKH,MAAQG,KAAKF,OAASD,EAAQG,KAAKH,MAAQC,EAASE,KAAKF,OAC7FqE,EAASnE,KAAKyD,MAAMQ,EAAaN,GACvC,OAAOQ,EAAOG,MAAMH,EAAOtE,MAAQA,GAAS,GAAIsE,EAAOrE,OAASA,GAAU,EAAGD,EAAOC,EACxF,CAGAgE,WAAWjE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBACnC,GAAI1D,IAAUF,EAAM6D,aAAe1D,IAAWH,EAAM6D,YAAa,MAAM,IAAIe,MAAM,yEAMjF,GALS1E,IAAUF,EAAM6D,YAAa3D,EAAQG,KAAKH,MAAQG,KAAKF,OAASA,EAChEA,IAAWH,EAAM6D,cAAa1D,EAASE,KAAKF,OAASE,KAAKH,MAAQA,GAE3EA,EAAQ8B,KAAK6C,MAAM3E,GACnBC,EAAS6B,KAAK6C,MAAM1E,GAChBD,EAAQ,EACR,MAAM,IAAIE,WAAW,yCACzB,GAAID,EAAS,EACT,MAAM,IAAIC,WAAW,yCAEzB,IAAIsD,EACJ,GAAIM,IAAShE,EAAM4D,wBAEd,MAAM,IAAIgB,MAAM,uBAErB,OAHIlB,EAAQrD,KAAKyE,4BAA4B5E,EAAOC,GAG7CuD,CACX,CAOAoB,4BAA4B5E,EAAOC,GAC/B,MAAMuD,EAAQ,IAAIrD,KAAKJ,YAAYC,EAAOC,GAE1C,IAAK,IAAIgB,EAAI,EAAGA,EAAIhB,EAAQgB,IACxB,IAAK,IAAIC,EAAI,EAAGA,EAAIlB,EAAOkB,IAAK,CAC5B,MAAM2D,EAAO/C,KAAK6C,MAAO1D,EAAId,KAAKF,OAAUA,GACtC6E,EAAOhD,KAAK6C,MAAOzD,EAAIf,KAAKH,MAASA,GAErC+E,EAA4B,GAAjB9D,EAAIjB,EAAQkB,GACvB8D,EAAsC,GAA5BH,EAAO1E,KAAKH,MAAQ8E,GAEpCtB,EAAMhD,SAAS0C,UAAU6B,EAAS5E,KAAKK,SAASY,UAAU4D,GAAQ,IAAQ,EAC9E,CAGJ,OAAOxB,CACX,CAUAiB,KAAKvD,EAAGD,EAAGjB,EAAOC,GAId,OAHID,EAAQG,KAAKH,QAAOA,EAAQG,KAAKH,OACjCC,EAASE,KAAKF,SAAQA,EAASE,KAAKF,QAEjCE,KAAK6D,UAAU7D,KAAK8E,WAAW/D,IAAKD,IAAKjB,IAASC,GAC7D,CAUAgF,SAAS/D,EAAGD,EAAGjB,EAAOC,GAClBiB,IAAMA,EACND,IAAMA,EAEN,MAAMuC,EAAQ,IAAIrD,KAAKJ,YAAYC,EAAOC,GAE1C,IAAK,IAAIiF,EAAK,EAAGA,EAAKjF,EAAQiF,IAAM,CAChC,MAAMrC,GAAOqC,EAAKjE,GAAKd,KAAKH,MAAQkB,EACpCsC,EAAM9C,QAAQ+C,IAAItD,KAAKO,QAAQoC,SAASD,EAAKA,EAAM7C,GAAQkF,EAAKlF,EACpE,CAEA,OAAOwD,CACX,CAWA2B,QAAQjE,EAAGD,EAAGjB,EAAOC,EAAQsC,GAMzB,GALArB,KAAOA,EAAI,GACXD,KAAOA,EAAI,GACXjB,IAAUA,EACVC,IAAWA,EAEU,mBAAVsC,EAYJ,OAAOpC,KAAKiF,aAAalE,EAAGD,EAAGjB,EAAOC,EAAQsC,GAXjD,IAAK,IAAI2C,EAAK,EAAGA,GAAMjF,EAAQiF,IAC3B,IAAK,IAAIG,EAAK,EAAGA,GAAMrF,EAAOqF,IAAM,CAChC,MAAMC,EAAKD,EAAKnE,EACVqE,EAAKL,EAAKjE,EAChB,GAAIa,KAAKC,IAAIuD,EAAIC,GAAM,GAAKD,EAAKnF,KAAKH,OAASuF,EAAKpF,KAAKF,OACrD,SAEJ,MAAMuF,EAAKjD,EAAM8C,EAAIH,GACrB/E,KAAK8C,cAAcqC,EAAIC,EAAIC,EAC/B,CAIR,OAAOrF,IACX,CAUAiF,aAAalE,EAAGD,EAAGjB,EAAOC,EAAQsC,GAC1BrB,EAAI,IACJlB,GAASkB,EACTA,EAAI,GAGJD,EAAI,IACJhB,GAAUgB,EACVA,EAAI,GAGR,MAAMwE,EAAQ3D,KAAKE,IAAIF,KAAKC,IAAIb,EAAIlB,EAAOG,KAAKH,OAAQ,GACxD,IAAI0F,EAAOD,EACX,KAAOvE,KAAOwE,GACVvF,KAAKK,SAAS0C,UAAU,GAAKwC,EAAOzE,EAAId,KAAKH,OAAQuC,GACzD,MAAMoD,EAAM,GAAKF,EAAQxE,EAAId,KAAKH,OAC5B4F,EAAQ,GAAK1E,EAAID,EAAId,KAAKH,OAEhC,IAAI6F,EAAS/D,KAAKE,IAAIF,KAAKC,IAAId,EAAIhB,EAAQE,KAAKF,QAAS,GACzD,KAAOgB,IAAM4E,GACT1F,KAAKS,OAAOkF,WAAW,GAAK5E,EAAI2E,EAAS1F,KAAKH,OAAQ4F,EAAOD,GAEjE,OAAOxF,IACX,CAUA4F,WAAW7E,EAAGD,EAAG+E,EAAQzD,GACrB,MAAM0D,EAAaD,GAAU,EAC7B,IAAK,IAAIE,EAAWpE,KAAKE,IAAI,EAAGf,EAAI+E,GAASE,GAAYpE,KAAKC,IAAId,EAAI+E,EAAQ7F,KAAKF,QAASiG,IACxF,IAAK,IAAIC,EAAWrE,KAAKE,IAAI,EAAGd,EAAI8E,GAASG,GAAYrE,KAAKC,IAAIb,EAAI8E,EAAQ7F,KAAKH,OAAQmG,KAClFA,EAAWjF,IAAM,GAAKgF,EAAWjF,IAAM,EAAIgF,GAC5C9F,KAAK8C,cAAckD,EAAUD,EAA2B,mBAAV3D,EAAuBA,EAAM4D,EAAWjF,EAAI8E,EAAQE,EAAWjF,EAAI+E,GAAUzD,GAIvI,OAAOpC,IACX,CAQAiG,WAAWpE,GAAM,EAAOqE,EAAa,GACjC,MACMJ,GADMnE,KAAKE,EAAM,MAAQ,OAAO7B,KAAKH,MAAOG,KAAKF,QAAU,IACvC,EACpBqG,EAAUnG,KAAKH,MAAQ,EACvBuG,EAAUpG,KAAKF,OAAS,EAE9B,IAAK,MAAOiB,EAAGD,KAAMd,KAAM,CACvB,MAAMqG,GAAsBtF,EAAIoF,IAAY,GAAKrF,EAAIsF,IAAY,EAC3DE,EAA8C,IAAjCxF,EAAI,GAAKd,KAAKH,OAASkB,EAAI,IAAU,EACpDsF,EAAqBP,EACrB9F,KAAKS,OAAO6F,GAAY,EACnBJ,IACLlG,KAAKS,OAAO6F,IAAa3E,KAAKE,IAAI,EAAGF,KAAKC,IAAI,EAAG,EAAKyE,EAAqBP,EAAcI,GAAc,KAC/G,CAEA,OAAOlG,IACX,CAQAuG,QAAQA,EAASC,GAAW,GACxB,GAAIxD,MAAMuD,IAAYA,EAAU,EAC5B,MAAM,IAAIxG,WAAW,yBAIzB,OAFAC,KAAKyG,sBAAsBF,EAASC,EAAU,GAEvCxG,IACX,CAQA0G,IAAIC,EAAYH,GAAW,GACvB,GAAIxD,MAAM2D,IAAeA,EAAa,EAClC,MAAM,IAAI5G,WAAW,4BAIzB,OAFAC,KAAKyG,sBAAsBE,EAAYH,EAAU,GAE1CxG,IACX,CAQA4G,MAAMD,EAAYH,GAAW,GACzB,GAAIxD,MAAM2D,IAAeA,EAAa,EAClC,MAAM,IAAI5G,WAAW,4BAIzB,OAFAC,KAAKyG,sBAAsBE,EAAYH,EAAU,GAE1CxG,IACX,CAQA6G,KAAKF,EAAYH,GAAW,GACxB,GAAIxD,MAAM2D,IAAeA,EAAa,EAClC,MAAM,IAAI5G,WAAW,4BAIzB,OAFAC,KAAKyG,sBAAsBE,EAAYH,EAAU,GAE1CxG,IACX,CAQAyG,sBAAsBK,EAAON,EAAUxF,GACnC,IAAK,IAAI+F,EAAI/F,EAAQ+F,EAAI/G,KAAKS,OAAOuG,OAAQD,GAAK,EAC9C/G,KAAKS,OAAOsG,GAAKD,GAASN,EAAW,IAAMxG,KAAKS,OAAOsG,GAC/D,CAQAE,UAAUH,EAAON,GAAW,GACxB,GAAIxD,MAAM8D,IAAUA,EAAQ,EACxB,MAAM,IAAI/G,WAAW,2BAEzB,OAAOC,KAAKmD,MAAK,CAACpC,EAAGD,KACjB,MAAOU,EAAGC,EAAGC,EAAGJ,GAAK3B,EAAMuH,cAAclH,KAAKyC,UAAU1B,EAAGD,IAC3D,OAAOnB,EAAMuC,YAAYV,EAAGC,EAAGqF,GAASN,EAAW,EAAI9E,GAAIJ,EAAE,GAErE,CAQAqF,WAAWG,EAAON,GAAW,GACzB,GAAIxD,MAAM8D,IAAUA,EAAQ,EACxB,MAAM,IAAI/G,WAAW,4BAEzB,OAAOC,KAAKmD,MAAK,CAACpC,EAAGD,KACjB,MAAOU,EAAGC,EAAGC,EAAGJ,GAAK3B,EAAMuH,cAAclH,KAAKyC,UAAU1B,EAAGD,IAC3D,OAAOnB,EAAMuC,YAAYV,EAAGsF,GAASN,EAAW,EAAI/E,GAAIC,EAAGJ,EAAE,GAErE,CASA8C,UAAU+C,EAAQpG,EAAI,EAAGD,EAAI,GACzBC,IAAMA,EACND,IAAMA,EAEN,IAAK,IAAIsG,EAAK,EAAGA,EAAKD,EAAOrH,OAAQsH,IAAM,CACvC,IAAIC,EAAWvG,EAAIsG,EACnB,KAAIC,EAAW,GAAf,CACA,GAAIA,GAAYrH,KAAKF,OAAQ,MAE7B,IAAK,IAAIwH,EAAK,EAAGA,EAAKH,EAAOtH,MAAOyH,IAAM,CACtC,IAAIC,EAAWxG,EAAIuG,EACnB,GAAIC,EAAW,EAAG,SAClB,GAAIA,GAAYvH,KAAKH,MAAO,MAE5B,MAAMmB,EAAS,GAAKuG,EAAWF,EAAWrH,KAAKH,OACzC2H,EAAKL,EAAO9G,SAASY,UAAU,GAAKqG,EAAKF,EAAKD,EAAOtH,QAAQ,GAC7D4H,EAAKzH,KAAKK,SAASY,UAAUD,GAAQ,GAEvB,MAAV,IAALwG,GAAqBxH,KAAKK,SAAS0C,UAAU/B,EAAQwG,GAAI,GACrC,IAAV,IAALA,GAAqBxH,KAAKK,SAAS0C,UAAU/B,EAAQyG,GAAI,GAC9DzH,KAAKK,SAAS0C,UAAU/B,EAAQrB,EAAM+H,gBAAgBF,EAAIC,IAAK,EACxE,CAf0B,CAgB9B,CAEA,OAAOzH,IACX,CAQAkB,uBAAuBsG,EAAIC,GACvB,MAAME,EAAU,IAALH,EACLI,EAAQD,EAAK,EACbE,EAAY,IAAMF,EAIxB,OAAc,IAHHC,GAASJ,IAAO,IAAMK,GAAaJ,IAAO,KAAQ,IAGtC,IAAY,IADxBG,GAASJ,GAAM,GAAK,KAAQK,GAAaJ,GAAM,GAAK,MAAU,IAC7B,IAAY,IAF7CG,GAASJ,GAAM,EAAI,KAAQK,GAAaJ,GAAM,EAAI,MAAU,IAEN,EAAgC,IAA1B9F,KAAKE,IAAI8F,EAAS,IAALF,EACxF,CAMAK,SACI,IAAK,MAAO/G,EAAGD,EAAGsB,KAAUpC,KAAK+H,oBAC7B/H,KAAK8C,cAAc/B,EAAGD,EAAK,WAAasB,EAAS,WAAuB,IAARA,GAEpE,OAAOpC,IACX,CAMAgI,cACI,IAAK,MAAOjH,EAAGD,EAAGsB,KAAUpC,KAAK+H,oBAAqB,CAClD,MAAOvG,EAAGC,EAAGC,EAAGJ,GAAK3B,EAAMuH,cAAcvH,EAAM0C,YAAYD,IAC3DpC,KAAK8C,cAAc/B,EAAGD,EAAGnB,EAAMuC,YAAYV,EAAGC,EAAG,EAAIC,EAAGJ,GAC5D,CAEA,OAAOtB,IACX,CAMAiI,mBACI,IAAK,MAAOlH,EAAGD,EAAGsB,KAAUpC,KAAK+H,oBAAqB,CAClD,MAAOvG,EAAGC,EAAGC,EAAGJ,GAAK3B,EAAMuH,cAAcvH,EAAM0C,YAAYD,IAC3DpC,KAAK8C,cAAc/B,EAAGD,EAAGnB,EAAMuC,YAAYV,EAAG,EAAIC,EAAGC,EAAGJ,GAC5D,CAEA,OAAOtB,IACX,CAMAkI,YACI,IAAK,MAAOnH,EAAGD,EAAGsB,KAAUpC,KAAK+H,oBAAqB,CAClD,MAAOvG,EAAGC,EAAGC,EAAGJ,GAAK3B,EAAMuH,cAAcvH,EAAM0C,YAAYD,IAC3DpC,KAAK8C,cAAc/B,EAAGD,EAAGnB,EAAMuC,YAAY,EAAIV,EAAGC,EAAGC,EAAGJ,GAC5D,CAEA,OAAOtB,IACX,CAMAmI,SAASC,GACL,IAAK,MAAOrH,EAAGD,EAAGsB,KAAUpC,KAAK+H,oBAAqB,CAClD,MAAOvG,EAAGC,EAAGC,EAAGJ,GAAK3B,EAAMuH,cAAcvH,EAAM0C,YAAYD,IAC3DpC,KAAK8C,cAAc/B,EAAGD,EAAGnB,EAAMuC,YAAYV,EAAI4G,EAAU,IAAK3G,EAAGC,EAAGJ,GACxE,CAEA,OAAOtB,IACX,CAMAqI,eACI,IAAIC,EAAW,CAAC,EAAG,EAAG,GAClBC,EAAU,EACd,IAAK,IAAI7F,EAAM,EAAGA,EAAM1C,KAAKS,OAAOuG,OAAQtE,GAAO,EAAG,CAClD,MAAM8F,EAAOxI,KAAKS,OAAOkC,SAASD,EAAKA,EAAM,GAC7C,IAAK,IAAIqE,EAAI,EAAGA,EAAI,EAAGA,IACnBuB,EAASvB,IAAMyB,EAAKzB,GACxBwB,GAAWC,EAAK,GAAK,GACzB,CAEA,OAAO7I,EAAM4B,eAAe+G,EAASG,KAAIC,GAAKA,EAAIH,IAAU,IAChE,CASAI,cAAcC,GAAc,EAAMC,GAAc,EAAMC,EAAc,IAChE,MAAMC,EAAc,IAAIC,MAAM,QAC9B,IAAK,IAAIjC,EAAI,EAAGA,EAAI/G,KAAKS,OAAOuG,OAAQD,GAAK,EAAG,CAC5C,MAAM3E,EAAQpC,KAAKK,SAASY,UAAU8F,GAAG,IAClCvF,EAAGC,EAAGC,GAAK/B,EAAMuH,cAAcvH,EAAM0C,YAAYD,IAAQqG,KAAIC,MAAa,GAAJA,KAC7E,GAAIE,GAAelH,EAAIoH,EAAa,SACpC,GAAID,GAAenH,EAAI,GAAOoH,EAAa,SAC3C,MAAMG,EAAMzH,GAAK,GAAKC,GAAK,EAAIC,EAC/BqH,EAAYE,IAAQF,EAAYE,IAAQ,GAAK,CACjD,CAEA,IAAIC,GAAiB,EACjBC,EAAqB,EAOzB,GANAJ,EAAYK,SAAQ,CAACC,EAAItC,KACjBsC,EAAKH,IACTA,EAAgBG,EAChBF,EAAqBpC,EAAC,KAGE,IAAxBoC,EACA,OAAOnJ,KAAK2I,cAAcC,EAAaC,EAAaC,EAAc,GAEtE,MAAMtH,EAAK2H,IAAuB,GAAM,GAClC1H,EAAK0H,IAAuB,EAAK,GACjCzH,EAAyB,GAArByH,EAEV,OAAOxJ,EAAMuC,YAAYV,EAAI,GAAMC,EAAI,GAAMC,EAAI,GAAM,EAC3D,CAOA4H,OAAOC,EAAOxF,GAAS,GACnB,GAAIwF,EAAQ,KAAQ,EAAG,OAAOvJ,KAC9B,GAAIuJ,EAAQ,KAAQ,EAAG,OAAOvJ,KAAKwJ,iBAEnC,MAAMC,EAAM9H,KAAK+H,IAAMH,EAAQ,KAEzBI,EAAMhI,KAAKgI,IAAIF,GACfG,EAAMjI,KAAKiI,IAAIH,GAEf5J,EAAQkE,EACRpC,KAAKkI,IAAI7J,KAAKH,MAAQ8J,GAAOhI,KAAKkI,IAAI7J,KAAKF,OAAS8J,GACpD5J,KAAKH,MACLC,EAASiE,EACTpC,KAAKkI,IAAI7J,KAAKH,MAAQ+J,GAAOjI,KAAKkI,IAAI7J,KAAKF,OAAS6J,GACpD3J,KAAKF,OAELgK,EAAM,IAAInK,EAAME,EAAOC,GAEvBiK,EAASlK,EAAQ,EAAI,GACrBmK,EAASlK,EAAS,EAAI,GACtBmK,EAASjK,KAAKH,MAAQ,EAAI,GAC1BqK,EAASlK,KAAKF,OAAS,EAAI,GAEjC,IAAI0B,EAAI,EACR,EAAG,CACC,IAAI2I,EAAI,EACR,MAAMC,EAAOH,EAASN,GAAOnI,EAAIwI,GAC3BK,EAAOH,EAASN,GAAOpI,EAAIwI,GAEjC,EAAG,CACC,MAAMM,EAAKF,EAAOR,GAAOO,EAAIJ,GACvBQ,EAAKF,EAAOV,GAAOQ,EAAIJ,GAC7BpK,EAAM6K,gBAAgBxK,KAAM8J,EAAKK,EAAG3I,EAAG8I,EAAIC,EAC/C,OAASJ,IAAMtK,EACnB,OAAS2B,IAAM1B,GAEf,OAAOE,KAAK6D,UAAUiG,EAC1B,CAMAN,iBACI,IAAIxI,EAAS,EAEb,IADAhB,KAAKS,OAAOgK,UACLzJ,EAAShB,KAAKS,OAAOuG,QAAQhH,KAAKS,OAAOkC,SAAS3B,EAAQA,GAAU,GAAGyJ,UAE9E,OAAOzK,IACX,CAWAkB,uBAAuBwJ,EAAKZ,EAAKa,EAAIC,EAAIC,EAAIC,GACzC,MAAMC,IAAOF,EACPG,IAAOF,EACPG,EAAKJ,EAAKE,EACVG,EAAKJ,EAAKE,EACVG,EAAYrB,EAAIrJ,OAAOkC,SAAS,GAAKgI,EAAKC,EAAKd,EAAIjK,QAAS,GAE5DuL,EAAM,CACRjK,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,GAGP3B,EAAM0L,SAASN,EAAIC,GAAK,EAAIC,IAAO,EAAIC,GAAKE,EAAKV,GACjD/K,EAAM0L,SAAS,EAAIN,EAAIC,EAAIC,GAAM,EAAIC,GAAKE,EAAKV,GAC/C/K,EAAM0L,SAASN,EAAI,EAAIC,GAAK,EAAIC,GAAMC,EAAIE,EAAKV,GAC/C/K,EAAM0L,SAAS,EAAIN,EAAI,EAAIC,EAAIC,EAAKC,EAAIE,EAAKV,GAE7CS,EAAU,GAAKC,EAAI9J,EACnB6J,EAAU,GAAKC,EAAIjK,EAAIiK,EAAI9J,EAC3B6J,EAAU,GAAKC,EAAIhK,EAAIgK,EAAI9J,EAC3B6J,EAAU,GAAKC,EAAI/J,EAAI+J,EAAI9J,CAC/B,CAGAJ,gBAAgBoK,EAAQC,EAAQC,EAAQJ,EAAKV,GACzC,GACIY,EAAS,GACNC,EAAS,GACTD,EAASZ,EAAI7K,OACb0L,EAASb,EAAI5K,OAClB,CACE,MAAMkB,EAAS,GAAKsK,EAASC,EAASb,EAAI7K,OACpC4L,EAAYf,EAAIjK,OAAOkC,SAAS3B,EAAQA,EAAS,GAEjD0K,EAAKF,EAASC,EAAU,GAE9BL,EAAI9J,GAAKoK,EACTN,EAAIjK,GAAKuK,EAAKD,EAAU,GACxBL,EAAIhK,GAAKsK,EAAKD,EAAU,GACxBL,EAAI/J,GAAKqK,EAAKD,EAAU,EAC5B,CACJ,CAOA5H,UAAUR,GAON,OANArD,KAAKC,UAAYoD,EAAMpD,UACvBD,KAAKE,WAAamD,EAAMnD,WACxBF,KAAKK,SAAWgD,EAAMhD,SACtBL,KAAKO,QAAU8C,EAAM9C,QACrBP,KAAKS,OAAS4C,EAAM5C,OAEhB4C,aAAiBsI,EACVA,EAAMC,KAAK5L,KAAMqD,EAAMwI,SAAUxI,EAAMyI,QAASzI,EAAM0I,QAAS1I,EAAM2I,cAEzEhM,IACX,CAOAkB,gBAAgB+K,GACZ,MAAMC,EAAUC,OAAOD,QAAQD,GAAQG,MAAK,CAAC9K,EAAGD,IAAMC,EAAE,GAAKD,EAAE,KACzDgL,EAAYH,EAAQzD,KAAI6D,GAAKC,WAAWD,EAAE,MAC1CE,EAASN,EAAQzD,KAAI6D,GAAKA,EAAE,KAElC,GAAyB,IAArBD,EAAUrF,OAAc,MAAM,IAAIjH,WAAW,gCAC5C,GAAyB,IAArBsM,EAAUrF,OACf,MAAO,IAAMwF,EAAO,GACjB,GAAyB,IAArBH,EAAUrF,OAAc,CAC/B,MAAMyF,EAAWzM,KAAK0M,aAAaF,EAAO,GAAIA,EAAO,IACrD,OAAOG,GACCA,GAAYN,EAAU,GAAWG,EAAO,GACxCG,GAAYN,EAAU,GAAWG,EAAO,GACrCC,GAAUE,EAAWN,EAAU,KAAOA,EAAU,GAAKA,EAAU,IAE9E,CAEA,MAAMO,EAASjL,KAAKC,OAAOyK,GACrBQ,EAASlL,KAAKE,OAAOwK,GAC3B,IAAIS,EAAY,GAEhB,IAAK,IAAI/F,EAAI,EAAGA,EAAIsF,EAAUrF,OAAQD,IAAK,CACvC,IAAIgG,EAASV,EAAUtF,EAAI,GAC3B,QAAeiG,IAAXD,EAAsB,SAE1B,IAAIE,EAASZ,EAAUtF,GAEnBmG,EAASV,EAAOzF,EAAI,QACTiG,IAAXE,IAAsBA,EAASV,EAAOzF,IAE1C,MAAMoG,EAASX,EAAOzF,GAChB0F,EAAWzM,KAAK0M,aAAaQ,EAAQC,GAE3CL,EAAUM,KAAK,CAACxL,IAAKmL,EAAQlL,IAAKoL,EAAQR,YAC9C,CAEA,OAAOE,IACH,GAAIA,GAAYC,EAAQ,OAAOE,EAAU,GAAGL,SAAS,GACrD,GAAIE,GAAYE,EAAQ,OAAOC,EAAUA,EAAU9F,OAAS,GAAGyF,SAAS,GAExE,IAAK,MAAMA,KAAYK,EACnB,GAAIH,GAAYF,EAAS7K,KAAO+K,GAAYF,EAAS5K,IACjD,OAAO4K,EAASA,UAAUE,EAAWF,EAAS7K,MAAQ6K,EAAS5K,IAAM4K,EAAS7K,MACtF,MAAM,IAAI7B,WAAW,8BAA8B4M,IAAW,CAEtE,CAOAU,aAAaxH,EAASlE,KAAKC,IAAI5B,KAAKH,MAAOG,KAAKF,QAAU,GACtD,MAAMgG,EAAaD,GAAU,EAC7B,IAAK,IAAI9E,EAAI,EAAGA,GAAK8E,EAAQ9E,IAAK,CAC9B,MAAMuM,GAAQvM,EAAI8E,IAAW,EAC7B,IAAK,IAAI/E,EAAI,EAAGA,GAAK+E,EAAQ/E,IACrBwM,GAAQxM,EAAI+E,IAAW,EAAIC,IAC3B9F,KAAKS,OAAwC,IAA/BK,EAAI,GAAKd,KAAKH,MAAQkB,EAAI,GAAS,GAAK,EAElE,CAEA,IAAK,IAAIA,EAAI,EAAGA,GAAK8E,EAAQ9E,IAAK,CAC9B,MAAMuM,GAAQvM,EAAI8E,IAAW,EAC7B,IAAK,IAAI/E,EAAId,KAAKF,OAAS+F,EAAQ/E,GAAKd,KAAKF,OAAQgB,IAC7CwM,GAAStN,KAAKF,OAASgB,EAAK+E,IAAW,EAAIC,IAC3C9F,KAAKS,OAAwC,IAA/BK,EAAI,GAAKd,KAAKH,MAAQkB,EAAI,GAAS,GAAK,EAElE,CAEA,IAAK,IAAIA,EAAIf,KAAKH,MAAQgG,EAAQ9E,GAAKf,KAAKH,MAAOkB,IAAK,CACpD,MAAMuM,GAAStN,KAAKH,MAAQkB,EAAK8E,IAAW,EAC5C,IAAK,IAAI/E,EAAI,EAAGA,GAAK+E,EAAQ/E,IACrBwM,GAAQxM,EAAI+E,IAAW,EAAIC,IAC3B9F,KAAKS,OAAwC,IAA/BK,EAAI,GAAKd,KAAKH,MAAQkB,EAAI,GAAS,GAAK,EAElE,CAEA,IAAK,IAAIA,EAAIf,KAAKH,MAAQgG,EAAQ9E,GAAKf,KAAKH,MAAOkB,IAAK,CACpD,MAAMuM,GAAStN,KAAKH,MAAQkB,EAAK8E,IAAW,EAC5C,IAAK,IAAI/E,EAAId,KAAKF,OAAS+F,EAAQ/E,GAAKd,KAAKF,OAAQgB,IAC7CwM,GAAStN,KAAKF,OAASgB,EAAK+E,IAAW,EAAIC,IAC3C9F,KAAKS,OAAwC,IAA/BK,EAAI,GAAKd,KAAKH,MAAQkB,EAAI,GAAS,GAAK,EAElE,CAEA,OAAOf,IACX,CAKAkB,oBAAoBqM,EAAYC,GAC5B,MAAMC,EAAKF,IAAe,GACpBG,EAAKH,GAAc,GAAK,IACxBI,EAAKJ,GAAc,EAAI,IACvBK,EAAkB,IAAbL,EACLM,GAAML,IAAa,IAAMC,EACzBK,GAAMN,GAAY,GAAK,KAAQE,EAC/BK,GAAMP,GAAY,EAAI,KAAQG,EAC9BK,GAAiB,IAAXR,GAAmBI,EAE/B,OAAOjB,IAKW,IAJJc,EAAKd,EAAWkB,IAIH,IAAY,IAHzBH,EAAKf,EAAWmB,IAGkB,IAAY,IAF9CH,EAAKhB,EAAWoB,IAEuC,EAAU,IADjEH,EAAKjB,EAAWqB,CAGlC,CAEAC,QAAQpI,EAAS,GACb,MAAM1E,EAAI,IAAIxB,EAAMK,KAAKH,MAAOG,KAAKF,QAE/BqK,EAAInK,KAAKH,MACT2B,EAAIxB,KAAKF,OACToO,EAAOlO,KAAKO,QACZ4N,EAAOhN,EAAEZ,QACT6N,EAAK,EAAIjE,EACTkE,EAAK,EAAI7M,EAEf,IAAK,MAAOT,EAAGD,KAAMd,KAAM,CACvB,MAAMsO,EAAMvN,EAAIqN,EAAK,GACfG,EAAMzN,EAAIuN,EAAK,GACfG,EAAM7M,KAAK8M,KAAKH,GAAO,EAAIC,GAAO,GAClCG,EAAM,EAAIF,GAAO3I,EACjB8I,GAAOD,EAAMJ,EAAME,EAAM,IAAOrE,EAAK,EACrCyE,GAAOF,EAAMH,EAAMC,EAAM,IAAOhN,EAAK,EAEvCmN,EAAK,GAAKA,EAAKxE,GAAKyE,EAAK,GAAKA,EAAKpN,GAAKwB,MAAM2L,IAAO3L,MAAM4L,KAG/DT,EAAKrN,EAAIqJ,EAAIpJ,GAAKmN,EAAK/D,EAAIyE,EAAKD,GACpC,CAEA,MAAME,EAAmB,GAAdX,EAAKlH,OAAcmD,EAAI,EAGlC,OAFAgE,EAAKU,GAAMX,EAAKW,GAET7O,KAAK6D,UAAU1C,EAC1B,CAsBA2N,aAAaC,EAAc,GAAG,MAC1BC,EAAK,OACLC,EAAM,YACNC,EAAW,UACXC,EAAS,aACTC,EAAY,SACZC,EAAQ,WACRC,EAAU,QACVC,EAAO,OACPpI,EAAM,QACNqI,GACA,CAAC,GACD,OAAOrQ,EAAIsQ,OAAOzP,KAAKS,OAAQ,CAC3BZ,MAAOG,KAAKH,MACZC,OAAQE,KAAKF,OACb4P,MAAOX,EACPY,SAAU,EACVC,KAAM,CACFC,MAAOb,EACPc,OAAQb,EACRc,YAAab,EACbc,UAAWb,EACX,gBAAiB,IAAIc,UAAsBjD,IAAjBoC,EAA6Ba,KAAKC,MAAQd,GAAce,cAClFC,cAAuBpD,IAAbqC,EAAyB,kCAAkC9P,IAAY8P,EACjFgB,WAAYf,EACZgB,QAASf,EACTgB,OAAQpJ,EACRqJ,QAAShB,IAGrB,CAOAV,iBAAiB2B,EAAU,IACvB,aAAchR,EAAQiR,QAAQjB,OAAOzP,KAAKS,OAAQT,KAAKH,MAAOG,KAAKF,OAAQ2Q,EAC/E,CAOAvP,oBAAoByP,GAChB,IAAItN,EAEJsN,EAAOvR,EAAIwR,KAAKD,GAChB,MAAMC,EAAO,IAAItQ,SAASqQ,EAAKE,OAAQF,EAAKG,WAAYH,EAAKI,YAE7D,GAAIC,EAAUC,MAAML,GAAO,CACvB,MAAM,MAAC/Q,EAAK,OAAEC,EAAM,OAAEoR,GAAU/R,EAAIgS,OAAOR,GAC3CtN,EAAQ,IAAI1D,EAAME,EAAOC,GACzBuD,EAAM5C,OAAO6C,IAAI4N,EACrB,MAAO,GAAIF,EAAUI,OAAOR,GAAO,CAC/B,MAAMS,SAAqB5R,EAAQiR,QAAQS,OAAOR,GAE5C9Q,EAAQwR,EAAYxR,MACpBC,EAASuR,EAAYvR,OACrBwR,EAAYD,EAAYE,OAE9BlO,EAAQ,IAAI1D,EAAME,EAAOC,GACzB,MAAM+Q,EAASQ,EAAYR,OAE3B,GAAkB,IAAdS,EAAiB,CACjB,MAAMV,EAAO,IAAItQ,SAAS+C,EAAM5C,OAAOoQ,QAEvC,IAAK,IAAI9J,EAAI,EAAGA,EAAI8J,EAAO7J,OAAQD,IAAK,CACpC,MAAMyK,EAAQX,EAAO9J,GACrB6J,EAAK7N,UAAc,EAAJgE,EAAOyK,GAAS,GAAKA,GAAS,GAAKA,GAAS,EAAI,KAAM,EACzE,CACJ,MAAO,GAAkB,IAAdF,EAAiB,CACxBjO,EAAM5C,OAAO0C,KAAK,KAClB,IAAK,IAAI4D,EAAI,EAAGA,EAAIlH,EAAQC,EAAQiH,IAChC1D,EAAM5C,OAAO6C,IAAIuN,EAAOlO,SAAa,EAAJoE,EAAW,EAAJA,EAAQ,GAAQ,EAAJA,EAC5D,MAAO,GAAkB,IAAduK,EACP,IAAK,IAAIvK,EAAI,EAAGA,EAAI8J,EAAO7J,OAAQD,GAAK,EACpC1D,EAAM5C,OAAOsG,GAAK,KAAQ,EAAI8J,EAAO9J,GAAK,MAAS,EAAI8J,EAAO9J,EAAI,GAAK,KACvE1D,EAAM5C,OAAOsG,EAAI,GAAK,KAAQ,EAAI8J,EAAO9J,EAAI,GAAK,MAAS,EAAI8J,EAAO9J,EAAI,GAAK,KAC/E1D,EAAM5C,OAAOsG,EAAI,GAAK,KAAQ,EAAI8J,EAAO9J,EAAI,GAAK,MAAS,EAAI8J,EAAO9J,EAAI,GAAK,KAC/E1D,EAAM5C,OAAOsG,EAAI,GAAK,GAGlC,KAAO,KAAIiK,EAAUS,OAAOb,GAKrB,MAAM,IAAIrM,MAAM,0BALY,CAC/B,MAAM8M,SAAqB3R,EAAQgR,QAAQS,OAAOR,GAClDtN,EAAQ,IAAI1D,EAAM0R,EAAYxR,MAAOwR,EAAYvR,QAEjDuD,EAAM5C,OAAO6C,IAAI+N,EAAYR,OACjC,CAAgD,CAEhD,OAAOxN,CACX,CAMWqO,4BACP,OAAO,CACX,CAMWC,4BACP,OAAO,CACX,CAMWC,6BACP,OAAO,CACX,CASA1Q,uBAAuB2Q,EAAKC,EAAO,EAAGnO,EAAO3D,KAAK0R,gBAC9C,IAAK,CAAC1R,KAAK2R,eAAgB3R,KAAK4R,gBAAiB5R,KAAK0R,gBAAgBK,SAASpO,GAC3E,MAAM,IAAIY,MAAM,4BAEpB,GAAIZ,IAAS3D,KAAK0R,gBAAkBI,GAAQ,EACxC,MAAM,IAAI/R,WAAW,yBACzB,GAAI4D,IAAS3D,KAAK0R,gBAAkBI,EAAO,EACvC,MAAM,IAAI/R,WAAW,yBAEN,iBAAR8R,IAAkBA,GAAM,IAAIG,aAAcvC,OAAOoC,IAC5D,MAAMR,SAAqB/R,EAAOoR,QAAQuB,UAAUJ,EAAKlO,EAAMmO,GAEzDzO,EAAQ,IAAI1D,EAAM0R,EAAYxR,MAAOwR,EAAYvR,QAIvD,OAFAuD,EAAM5C,OAAO6C,IAAI+N,EAAYR,QAEtBxN,CACX,CAWAnC,wBAAwBgR,EAAMzO,EAAOmM,EAAMxN,EAAQ,WAAY+P,EAAS,IAAIC,GACxE,MAAM,KAAEC,EAAI,OAAEC,SAAiB9S,EAAQkR,OAEvCwB,EAAO,IAAIG,EAAK5O,EAAOyO,GACvB,MAAO/Q,EAAGC,EAAGC,EAAGC,GAAK3B,EAAM0C,YAAYD,GAEjCmQ,EAAgB,IAAID,EAE1BC,EAAcC,MAAM,CAChBC,UAAWN,EAAOO,SAClBC,WAAYR,EAAOS,UACnBC,WAAYV,EAAOW,UACnBC,eAAgBZ,EAAOa,cACvBC,iBAAkBd,EAAOe,gBACzBC,iBAAkBhB,EAAOiB,iBAG7Bb,EAAcc,OAAOnB,EAAMtC,EAAM,CAACnM,UAClC,MAAM4N,EAAckB,EAAcN,UAAU9Q,EAAGC,EAAGC,GAC5CgC,EAAQ,IAAI1D,EAAM0R,EAAYxR,MAAOwR,EAAYvR,QASvD,OAPAuD,EAAM5C,OAAO6C,IAAI+N,EAAYR,QAEzBxN,EAAMvD,OAASqS,EAAOS,WACtBvP,EAAMiB,KAAK,EAAG,EAAGjB,EAAMxD,MAAO8B,KAAK6C,MAAM+N,EAAce,QAAUjQ,EAAMvD,OAASqS,EAAOS,YAAcvP,EAAMvD,OAASyS,EAAce,UAEtIpB,EAAKqB,OACLhB,EAAcgB,OACPlQ,EAAMkD,QAAQjF,EAAI,IAC7B,EAQH,MAAMqK,UAAchM,EAKN6T,2BACP,MAAO,MACX,CAMWC,+BACP,MAAO,UACX,CAMWC,iCACP,MAAO,YACX,CAEAxS,iCAAiCyC,GAG7B,GAFoB,iBAATA,IACPA,EAAO,CAAC,MAAO,OAAQ,WAAY,cAAcgQ,QAAQhQ,IACzDA,EAAO,GAAKA,EAAO,EACnB,MAAM,IAAI5D,WAAW,yBAEzB,OAAO4D,CACX,CAYA/D,YAAYC,EAAOC,EAAQ+L,EAAW,IAAKC,EAAU,EAAGC,EAAU,EAAGC,EAAeL,EAAM6H,eACtF,GAAIxQ,MAAM6I,IAAaA,EAAW,EAC9B,MAAM,IAAI9L,WAAW,0BAEzBiM,EAAeL,EAAMiI,0BAA0B5H,GAE/C6H,MAAMhU,EAAOC,GACbE,KAAK6L,SAAWA,EAChB7L,KAAK8L,QAAUA,EACf9L,KAAK+L,QAAUA,EACf/L,KAAKgM,aAAeA,CACxB,CAEArL,WACI,MAAO,SAASX,KAAKH,SAASG,KAAKF,UAAUE,KAAK6L,aACtD,CAWA3K,YAAYmC,EAAOwI,EAAUC,EAASC,EAASC,EAAeL,EAAM6H,eAChE,KAAMnQ,aAAiB1D,GACnB,MAAM,IAAIsD,UAAU,wBAExB+I,EAAeL,EAAMiI,0BAA0B5H,GAE/C,MAAM8H,EAAQ,IAAInI,EAAMtI,EAAMxD,MAAOwD,EAAMvD,OAAQ+L,EAAUC,EAASC,EAASC,GAG/E,OAFA8H,EAAMrT,OAAO6C,IAAID,EAAM5C,QAEhBqT,CACX,CAEA/P,OAAOlE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBAC/B,MAAMwQ,EAAgB/T,KAAKH,MACrBmU,EAAiBhU,KAAKF,OAEtBqE,EAAS0P,MAAM9P,OAAOlE,EAAOC,EAAQ6D,GAK3C,OAHA3D,KAAK8L,SAAW3H,EAAOtE,MAAQkU,EAC/B/T,KAAK+L,SAAW5H,EAAOrE,OAASkU,EAEzB7P,CACX,EAOJ,MAAM8P,UAAYjL,MAOdpJ,YAAYsU,EAAQC,GAAY,GAC5BN,SAASK,GAET,IAAK,MAAMJ,KAAS9T,KAChB,KAAM8T,aAAiBnI,GACnB,MAAM,IAAI1I,UAAU,SAASjD,KAAK2T,QAAQG,kCAElD,GAAIK,GAAa,GAAKnR,MAAMmR,GACxB,MAAM,IAAIpU,WAAW,sBAEzBC,KAAKmU,UAAYA,CACrB,CAMItU,YACA,IAAIgC,EAAM,EACV,IAAK,MAAMiS,KAAS9T,KAAM,CACtB,IAAIH,EAAQiU,EAAMjU,MAAQiU,EAAMhI,QAC5BjK,EAAMhC,IACNgC,EAAMhC,EACd,CAEA,OAAOgC,CACX,CAMI/B,aACA,IAAI+B,EAAM,EACV,IAAK,MAAMiS,KAAS9T,KAAM,CACtB,IAAIF,EAASgU,EAAMhU,OAASgU,EAAM/H,QAC9BlK,EAAM/B,IACN+B,EAAM/B,EACd,CAEA,OAAO+B,CACX,CAEAlB,WACI,MAAO,OAAOX,KAAKH,SAASG,KAAKF,UAAUE,KAAK6L,aACpD,CAKA,EAAGjL,OAAOC,YACN,IAAK,IAAIkG,EAAI,EAAGA,EAAI/G,KAAKgH,OAAQD,UACvB/G,KAAK+G,EACnB,CAEAzE,MAAMmD,EAAOD,GACLA,IAAQ4O,MACR5O,EAAMxF,KAAKgH,QACf,MAAMkN,EAAS,IAAIlL,MAAMxD,EAAMC,GAC/B,IAAK,IAAIsB,EAAI,EAAGA,EAAImN,EAAOlN,OAAQD,IAC/BmN,EAAOnN,GAAK/G,KAAK+G,EAAItB,GACzB,OAAO,IAAIwO,EAAIC,EAAQlU,KAAKmU,UAChC,CAMItI,eACA,OAAO7L,KAAKqU,QAAO,CAACC,EAAKR,IAAUQ,EAAMR,EAAMjI,UAAU,EAC7D,CAOAiD,aAAa2B,EAAU,IACnB,MAAM8D,EAAU,WAAWlV,EAAOqR,QAAQ8D,SAAQxU,KAAKH,MAAOG,KAAKF,OAAQE,KAAKmU,WAEhF,IAAK,MAAML,KAAS9T,KAAM,CACtB,KAAM8T,aAAiBnI,GAAQ,MAAM,IAAIpH,MAAM,+BAC/CgQ,EAAQE,IAAIX,EAAMhI,QAASgI,EAAM/H,WAAY+H,EAAMjI,SAAW,IAAKiI,EAAMjU,MAAOiU,EAAMhU,OAAQgU,EAAMrT,OAAQqT,EAAM9H,aAAcyE,EAAU,IAAM,GAAK,EACzJ,CAEA,OAAO8D,EAAQG,IACnB,CAQAxT,oBAAoByP,EAAMgE,GAAwB,GAC9C,IAAItR,EACJsN,EAAOvR,EAAIwR,KAAKD,GAChB,MAAMC,EAAO,IAAItQ,SAASqQ,EAAKE,OAAQF,EAAKG,WAAYH,EAAKI,YAE7D,IAAIC,EAAU4D,MAAMhE,GA4Fb,MAAM,IAAIrM,MAAM,0BA5FI,CACvB,MAAM2P,EAAS,GACTW,EAAU,WAAWxV,EAAOqR,QAAQoE,SAAQnE,GAElD,GAAIgE,EAAuB,CACvB,MAAMI,EAAQF,EAAQX,SAASc,OAAOlO,MAChCgN,EAAQ,IAAInI,EAAMoJ,EAAMlV,MAAOkV,EAAMjV,OAAQ,GAAKiV,EAAME,MAAOF,EAAMhU,EAAGgU,EAAMjU,EAAGiU,EAAMG,SAE7FpB,EAAMrT,OAAO6C,IAAIyR,EAAMlE,QAEvBqD,EAAO9G,KAAK0G,GACZzQ,EAAQ,IAAI4Q,EAAIC,EACpB,CAEA,MAAMiB,EAAyB,EAAhBN,EAAQhV,MACjBuV,EAA2B,EAAjBP,EAAQ/U,OAClBuV,EAAM,IAAI7U,YAAYqU,EAAQhV,MAAQgV,EAAQ/U,QAC9C4U,EAAK,IAAIY,WAAWD,EAAIxE,OAAQwE,EAAIvE,WAAYuE,EAAItE,YAE1D,IAAK,MAAM+C,KAASe,EAAQX,SAAU,CAClC,IAAIqB,EAAU,EACVC,EAAW,EACf,MAAMC,EAAe,EAAV3B,EAAM/S,EACX2U,EAAe,EAAV5B,EAAMhT,EACX6U,EAAK7B,EAAMjD,OACXlN,EAAOmQ,EAAMoB,QACbrV,EAAsB,EAAdiU,EAAMjU,MACdC,EAAwB,EAAfgU,EAAMhU,OACf8V,EAAM,IAAIpV,YAAYmV,EAAG9E,OAAQ8E,EAAG7E,WAAYjR,EAAQC,GAGxD+V,EAFI3B,EAAOA,EAAO9G,KAAK,IAAIzB,EAAMwJ,EAAQC,EAAS,GAAKtB,EAAMmB,MAAO,EAAG,EAAG,IAAM,GAEzExU,OACPqV,EAAM,IAAItV,YAAYqV,EAAGhF,QAI/B,GAFAgF,EAAGvS,IAAIoR,GAEH,IAAM/Q,EACN,IAAK,IAAI7C,EAAI,EAAOA,EAAIhB,EAAQgB,IAAK,CACjC,MAAMuG,EAAWoO,EAAKN,GAAUrU,EAAI4U,GAAM,EAE1C,IAAK,IAAI3U,EAAI,EAAOA,EAAIlB,EAAOkB,IAAK,CAChC,MAAMwG,EAAWxG,EAAIsG,EAEjB,IAAMsO,EAAG,EAAIJ,GACjBO,EAAIvO,GAAY8N,EAAI9N,GACfuO,EAAIvO,GAAYqO,EAAIJ,GAEzBA,IACAD,GAAW,CACf,CACJ,MAGC,GAAI,IAAM5R,EACX,IAAK,IAAI7C,EAAI,EAAOA,EAAIhB,EAAQgB,IAAK,CACjC,MAAMuG,EAAWoO,EAAKN,GAAUrU,EAAI4U,GAAM,EAE1C,IAAK,IAAI3U,EAAI,EAAOA,EAAIlB,EAAOkB,IAAK,CAChC,MAAMwG,EAAWxG,EAAIsG,EAEjB,IAAMsO,EAAG,EAAIJ,GACjBO,EAAIvO,GAAY8N,EAAI9N,GACfuO,EAAIvO,GAAYqO,EAAIJ,GAEzBA,IACAD,GAAW,EACXF,EAAI9N,GAAY,CACpB,CACJ,MAGC,GAAI,IAAM5D,GAAQ,IAAMA,EAAM,CAC/BkS,EAAGvS,IAAIoR,GACP,IAAK,IAAI5T,EAAI,EAAOA,EAAIhB,EAAQgB,IAAK,CACjC,MAAMuG,EAAWoO,EAAKN,GAAUrU,EAAI4U,GAAM,EAE1C,IAAK,IAAI3U,EAAI,EAAOA,EAAIlB,EAAOkB,IAAK,CAChC,MAAMwG,EAAWxG,EAAIsG,EAEjB,IAAMsO,EAAG,EAAIJ,GACjBO,EAAIvO,GAAY8N,EAAI9N,GACfuO,EAAIvO,GAAYqO,EAAIJ,GAEzBA,IACAD,GAAW,EACXF,EAAI9N,GAAYuO,EAAIvO,EACxB,CACJ,CACJ,CACJ,CAEAlE,EAAQ,IAAI4Q,EAAIC,EACpB,CAEA,OAAO7Q,CACX,CAEAU,OAAOlE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBAC/B,IAAK,MAAMuQ,KAAS9T,KAChB8T,EAAM/P,OAAOlE,EAAOC,EAAQ6D,EACpC,EAGJ,MAAMyO,EAWFxS,YAAYmW,GACR,MAAM,SAACrD,EAAQ,UAAEE,EAAS,UAAEE,EAAS,cAAEE,EAAa,gBAAEE,EAAe,eAAEE,GAAkB2C,GAAW,CAAC,EAGrG,GADA/V,KAAK0S,SAAWA,GAAY0B,IACxBpR,MAAMhD,KAAK0S,WAAa1S,KAAK0S,SAAW,EACxC,MAAM,IAAI3S,WAAW,oBAGzB,GADAC,KAAK4S,UAAYA,GAAawB,IAC1BpR,MAAMhD,KAAK4S,YAAc5S,KAAK4S,UAAY,EAC1C,MAAM,IAAI7S,WAAW,qBAGzB,GADAC,KAAK8S,UAAYA,GAAa,QACzB,CAAC,OAAQ,QAAQf,SAAS/R,KAAK8S,WAChC,MAAM,IAAI/S,WAAW,qBAGzB,GADAC,KAAKgT,cAAgBA,GAAiB,QACjC,CAAC,OAAQ,SAAU,SAASjB,SAAS/R,KAAKgT,eAC3C,MAAM,IAAIjT,WAAW,yBAGzB,GADAC,KAAKkT,gBAAkBA,GAAmB,OACrC,CAAC,MAAO,SAAU,UAAUnB,SAAS/R,KAAKkT,iBAC3C,MAAM,IAAInT,WAAW,2BAGzB,GADAC,KAAKoT,eAAiBA,IAAkB,EACL,kBAAxBpT,KAAKoT,eACZ,MAAM,IAAInQ,UAAU,yBAC5B,EAGJ,MAAM+N,EAMF9P,eAAeyP,GACX,IAAIC,EASJ,OARKxQ,YAAY4V,OAAOrF,IAIpBA,EAAO,IAAI2E,WAAW3E,EAAKE,OAAQF,EAAKG,WAAYH,EAAKI,YACzDH,EAAO,IAAItQ,SAASqQ,EAAKE,OAAQF,EAAKG,WAAYH,EAAKI,cAJvDJ,EAAO,IAAI2E,WAAW3E,GACtBC,EAAO,IAAItQ,SAASqQ,EAAKE,SAMzB7Q,KAAKiR,MAAML,GAAc,MACzB5Q,KAAKoR,OAAOR,GAAc,OAC1B5Q,KAAKyR,OAAOb,GAAc,OAC1B5Q,KAAK4U,MAAMhE,GAAc,MACtB,IACX,CAMA1P,aAAa0P,GACT,OA/sDC,aA+sDMA,EAAK3P,UAAU,GAAG,EAC7B,CAMAC,cAAc0P,GACV,OAAQA,EAAK3P,UAAU,GAAG,KAAW,GAttDnC,QAutDN,CAMAC,cAAc0P,GACV,OA7tDE,aA6tDKA,EAAK3P,UAAU,GAAG,EAC7B,CAMAC,aAAa0P,GACT,OAAQA,EAAK3P,UAAU,GAAG,KAAW,GApuDpC,OAquDL,EAiBJlC,EAAOD,QAAU,CAACa,QAAOsU,MAAKtI,QAAOyG,aAAYpB,YAAWG,OAR5D,SAAgBR,EAAMgE,GAGlB,MAAa,QAFA3D,EAAUiF,QAAQtF,GAGpBsD,EAAI9C,OAAOR,EAAMgE,GACrBhV,EAAMwR,OAAOR,EACxB,E,QCjwDA,SAASC,EAAKC,EAAQqF,GAAS,GAC3B,GAAIrF,aAAkBzQ,YAAa,OAAO,IAAIkV,WAAWzE,GACzD,GAAIqF,GAAUrF,aAAkBsF,kBAAmB,OAAO,IAAIb,WAAWzE,GACzE,GAAIzQ,YAAY4V,OAAOnF,GAAS,OAAO,IAAIyE,WAAWzE,EAAOA,OAAQA,EAAOC,WAAYD,EAAOE,YAE/F,MAAM,IAAI9N,UAAU,uEACtB,CAmBAlE,EAAOD,QAAU,CAAE8R,OAAMwF,WAjBzB,SAAoBC,EAASH,GAAS,GACpC,IAAIlP,EAAS,EACThG,EAAS,EACbqV,EAAQjN,SAAQyH,GAAU7J,GAAW,MAAQ6J,EAAOE,WAAaF,EAAO7J,OAAS6J,EAAOE,aAExF,MAAM2D,EAAK,IAAIY,WAAWY,EAAS,IAAIC,kBAAkBnP,GAAUA,GASnE,OAPAqP,EAAQjN,SAAQyH,IACd,MAAMzF,EAAMpC,MAAMsN,QAAQzF,GAAUA,EAASD,EAAKC,GAAQ,GAE1D6D,EAAGpR,IAAI8H,EAAKpK,GACZA,GAAUoK,EAAIpE,MAAM,IAGf0N,CACT,E,UCvBF,MAAM6B,EAAQ,IAAI/V,YAAY,CAC1B,EAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAChG,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAChG,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAChG,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,SAChG,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAChG,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAChG,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAChG,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAChG,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAChG,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,YAEtCzB,EAAOD,QAAU,SAAe+R,GAC9B,IAAI7P,EAAS,EACTwV,GAAM,EACV,MAAMC,EAAM5F,EAAO7J,OAAS,EAAK,EAEjC,KAAOyP,EAAKzV,GACVwV,EAAMD,EAAiC,KAA1BC,EAAM3F,EAAO7P,OAAsBwV,IAAQ,EACxDA,EAAMD,EAAiC,KAA1BC,EAAM3F,EAAO7P,OAAsBwV,IAAQ,EACxDA,EAAMD,EAAiC,KAA1BC,EAAM3F,EAAO7P,OAAsBwV,IAAQ,EACxDA,EAAMD,EAAiC,KAA1BC,EAAM3F,EAAO7P,OAAsBwV,IAAQ,EAG1D,KAAOxV,EAAS6P,EAAO7J,QACrBwP,EAAMD,EAAiC,KAA1BC,EAAM3F,EAAO7P,OAAsBwV,IAAQ,EAG1D,OAAc,WAANA,KAAsB,CAChC,C,gBC/CF,MAAMpX,EAAM,EAAQ,GACdsX,EAAQ,EAAQ,MAChB,SAAEC,EAAQ,WAAEC,GAAe,EAAQ,KAEnCC,EAAW,IAAIvB,WAAW,CAAC,GAAI,GAAI,GAAI,KACvCwB,EAAW,IAAIxB,WAAW,CAAC,GAAI,GAAI,GAAI,KACvCyB,EAAW,IAAIzB,WAAW,CAAC,GAAI,GAAI,GAAI,KACvC0B,EAAeN,EAAM,IAAIpB,WAAW,CAAC,GAAI,GAAI,GAAI,MACjD2B,EAAO,IAAI3B,WAAW,CAAC,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,KAUpD4B,EAAyB,CAC7B,EARW,EASX,EANiB,EAQjB,EAVW,EAWX,EARiB,GAWbC,EAAc,IAAInF,YAExBjT,EAAOD,QAAU,CACf2Q,OAAOkB,GAAM,KAAEf,EAAI,MAAE/P,EAAK,OAAEC,EAAM,SAAE6P,EAAQ,MAAEyH,EAAQ,EAAC,MAAE1H,EAAQ,IAC/D,IAAI1O,EAAS,EACTqW,EAAa,EACjB,MAAMC,EAAazX,EAAQ8P,EACrB4H,EAAM,IAAIjC,WAAWxV,EAAS6Q,EAAK3J,QAEzC,KAAOhG,EAAS2P,EAAK3J,QACnBuQ,EAAIF,KAAgB,EACpBE,EAAIjU,IAAIqN,EAAKhO,SAAS3B,EAASA,GAAUsW,GAAcD,GAEvDA,GAAcC,EAGhB,GAAI1H,EAAM,CACR,IAAI4H,EAAS,GACb,IAAK,MAAMvO,KAAO2G,EAAM,CACtB,IAAKA,EAAK3G,GAAM,SAChB,MAAMwO,EAAKN,EAAY1H,OAAOxG,GACxByO,EAAKP,EAAY1H,OAAOG,EAAK3G,IAC7B0O,EAAQ,IAAIrC,WAAW,GAASmC,EAAGzQ,OAAS0Q,EAAG1Q,QAE/C4J,EAAO,IAAItQ,SAASqX,EAAM9G,QAEhC8G,EAAM,GAAK,IACXA,EAAM,GAAK,GACXA,EAAM,GAAK,GACXA,EAAM,GAAK,IACXA,EAAMrU,IAAImU,EAAI,GACdD,EAAOpK,KAAKuK,GACZA,EAAMrU,IAAIoU,EAAI,EAAID,EAAGzQ,QACrB4J,EAAK7N,UAAU,EAAG4U,EAAM3Q,OAAS,IACjC4J,EAAK7N,UAAU4U,EAAM3Q,OAAS,EAAG0P,EAAMiB,EAAMhV,SAAS,EAAGgV,EAAM3Q,OAAS,IAC1E,CAEA4I,EAAOxQ,EAAIgX,WAAWoB,EACxB,CAEAxW,EAAS4O,EAAOA,EAAK5I,OAAS,EAC9B,MAAM4Q,EAAajB,EAASY,EAAK7H,GAC3BmI,EAAQ,IAAIvC,WAAW,GAAKtU,EAASiW,EAAKjQ,OAAS4Q,EAAW5Q,QAEpE6Q,EAAM,IAAM,EACZA,EAAM,IAAM,EACZA,EAAM,IAAM,EACZA,EAAM,IAAMT,EACZS,EAAMvU,IAAI2T,EAAM,GAChBY,EAAMvU,IAAIuT,EAAU,IACpBgB,EAAMvU,IAAIwT,EAAU,IACpBe,EAAMvU,IAAIsU,EAAY,IACtBC,EAAM,IAAMX,EAAuBvH,GAC/BC,GAAMiI,EAAMvU,IAAIsM,EAAM,GAAKgI,EAAW5Q,QAC1C6Q,EAAMvU,IAAIyT,EAAU,GAAK/V,EAAS4W,EAAW5Q,QAE7C,MAAM4J,EAAO,IAAItQ,SAASuX,EAAMhH,QAWhC,OATAD,EAAK7N,UAAU,EAAG,IAClB6N,EAAK7N,UAAU,GAAIlD,GACnB+Q,EAAK7N,UAAU,GAAIjD,GACnB8Q,EAAK7N,UAAU,GAAI6U,EAAW5Q,QAC9B4J,EAAK7N,UAAU,GAAK/B,EAAS4W,EAAW5Q,OAAQ,GAChD4J,EAAK7N,UAAU,GAAK/B,EAAS4W,EAAW5Q,OAAQgQ,GAChDpG,EAAK7N,UAAU,GAAI2T,EAAM,IAAIpB,WAAWuC,EAAMhH,OAAQ,GAAI,MAC1DD,EAAK7N,UAAU,GAAK6U,EAAW5Q,OAAQ0P,EAAM,IAAIpB,WAAWuC,EAAMhH,OAAQ,GAAI,EAAI+G,EAAW5Q,UAEtF6Q,CACT,EAEA1G,OAAO0G,GACL,IAAIjH,EAAO,IAAItQ,SAASuX,EAAMhH,OAAQgH,EAAM/G,WAAY+G,EAAM9G,YAE9D,MAAMlR,EAAQ+Q,EAAK3P,UAAU,IACvBnB,EAAS8Q,EAAK3P,UAAU,IACxB6W,EAAMD,EAAM,IACZE,EAAaF,EAAM,IACzB,IAAIlI,EAAW,CAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAKoI,GAClD,MAAMC,EAAUrI,EAAWmI,EAAM,EAE3BR,EAAazX,EAAQmY,EAC3B,IAAI9G,EAAS,IAAIoE,WAAWxV,EAASwX,GAEjCtW,EAAS,EACTiX,EAAW,EAEXC,EAAW,GACf,MAAMV,EAAS,GAEf,IAAIW,EAASC,EAEb,MAAMC,EAAkBR,EAAM7Q,OAAS,EAEvC,IAAIsR,EACJ,KAAiD,cAAzCA,EAAO1H,EAAK3P,UAAU,EAAIiX,KAA2B,CAC3D,GAAa,aAATI,EACFd,EAAOpK,KAAKyK,EAAMlV,SAAS,EAAIuV,EAAU,EAAIA,EAAWtH,EAAK3P,UAAUiX,UACpE,GAAa,aAATI,EAAqB,CAC5B,GAAIH,EACF,MAAM,IAAI5T,MAAM,wCAClB4T,EAAU,IAAI3X,YAAYoQ,EAAK3P,UAAUiX,IACzC,IAAK,IAAIK,EAAY,EAAGA,EAA6B,EAAjBJ,EAAQnR,OAAYuR,GAAa,EACnEJ,EAAQI,EAAY,GAAKV,EAAM,EAAIK,EAAWK,IAAc,GAAKV,EAAM,EAAIK,EAAWK,EAAY,IAAM,GAAKV,EAAM,EAAIK,EAAWK,EAAY,IAAM,EAAI,GAC5J,MAAO,GAAa,aAATD,EAAqB,CAC9B,GAAIF,EACF,MAAM,IAAI7T,MAAM,wCAClB6T,EAAe,IAAI9C,WAAW1E,EAAK3P,UAAUiX,IAC7C,IAAK,IAAInR,EAAI,EAAGA,EAAIqR,EAAapR,OAAQD,IACvCqR,EAAarR,GAAK8Q,EAAM,EAAIK,EAAWnR,EAC3C,CAGA,GADAmR,GAAY,GAAYtH,EAAK3P,UAAUiX,GACnCA,EAAWG,EACb,KACJ,CAIA,IAFAR,EAAQjB,EAA6B,IAAlBY,EAAOxQ,OAAewQ,EAAO,GAAKpY,EAAIgX,WAAWoB,GAAS1X,EAASA,EAASwX,GAExFtW,EAAS6W,EAAM9G,YAAY,CAChC,MAAMyH,EAASX,EAAM7W,KACfsB,EAAQuV,EAAMlV,SAAS3B,EAAQA,GAAUsW,GAE3C,IAAMkB,EAAQtH,EAAO5N,IAAIhB,EAAO2V,GAC3B,IAAMO,EAAQxY,KAAKyY,SAASnW,EAAO4O,EAAQ+G,EAAUD,EAASV,GAC9D,IAAMkB,EAAQxY,KAAK0Y,SAASpW,EAAO4O,EAAQ+G,EAAUD,EAASV,GAC9D,IAAMkB,EAAQxY,KAAK2Y,SAASrW,EAAO4O,EAAQ+G,EAAUD,EAASV,GAC9D,IAAMkB,GAAQxY,KAAK4Y,SAAStW,EAAO4O,EAAQ+G,EAAUD,EAASV,GAEvEW,GAAYX,CACd,CAEA,GAAmB,IAAfS,EAAkB,CACpB,IAAKI,EACH,MAAM,IAAI5T,MAAM,iCAElB,GAAI6T,EACF,IAAK,IAAIrR,EAAI,EAAGA,EAAIqR,EAAapR,OAAQD,IACvCoR,EAAQpR,IAAM,WAAaqR,EAAarR,GAE5C4I,EAAW,EACX,MAAMkJ,EAAY,IAAIvD,WAAWzV,EAAQC,EAAS,GAC5CgZ,EAAY,IAAIxY,SAASuY,EAAUhI,OAAQgI,EAAU/H,WAAY+H,EAAU9H,YACjF,IAAK,IAAIhK,EAAI,EAAGA,EAAImK,EAAOlK,OAAQD,IACjC+R,EAAU/V,UAAc,EAAJgE,EAAOoR,EAAQjH,EAAOnK,KAAK,GACjDmK,EAAS2H,CACX,CAEA,GAAY,IAARf,EAAW,CACb,MAAMe,EAAY,IAAIvD,WAAWpE,EAAOlK,OAAS8Q,EAAM,GACvD,IAAK,IAAI/Q,EAAI,EAAGA,EAAImK,EAAOlK,OAAQD,GAAK,EACtC8R,EAAU9R,EAAI,GAAKmK,EAAOnK,GAC5BmK,EAAS2H,CACX,CAEA,GAAiB,IAAblJ,EAAgB,CAClB,MAAMkJ,EAAY,IAAIvD,WAAWzV,EAAQC,EAAS,GAC5C8Q,EAAO,IAAItQ,SAASuY,EAAUhI,QAEpC,GAAiB,IAAblB,EACF,IAAK,IAAI5I,EAAI,EAAGA,EAAIlH,EAAQC,EAAQiH,IAAK,CACvC,MAAMyK,EAAQN,EAAOnK,GACrB6J,EAAK7N,UAAc,EAAJgE,EAAOyK,GAAS,GAAKA,GAAS,GAAKA,GAAS,EAAI,KAAM,EACvE,MACK,GAAiB,IAAb7B,EACT,IAAK,IAAI5I,EAAI,EAAGA,EAAIlH,EAAQC,EAAS,EAAGiH,GAAK,EAAG,CAC9C,MAAMyK,EAAQN,EAAOnK,GACrB6J,EAAK7N,UAAc,EAAJgE,EAAOyK,GAAS,GAAKA,GAAS,GAAKA,GAAS,EAAIN,EAAOnK,EAAI,IAAI,EAChF,MACK,GAAiB,IAAb4I,EAAgB,CACzBkJ,EAAU1V,KAAK,KACf,IAAK,IAAI4D,EAAI,EAAGA,EAAIlH,EAAQC,EAAQiH,IAClC8R,EAAUvV,IAAI4N,EAAOvO,SAAa,EAAJoE,EAAW,EAAJA,EAAQ,GAAQ,EAAJA,EACrD,CAEAmK,EAAS2H,CACX,CAEA,MAAO,CAAEhZ,QAAOC,SAAQoR,SAC1B,EAEAuH,SAASnW,EAAO4O,EAAQ+G,EAAUD,EAASV,GACzC,IAAIvQ,EAAI,EACR,KAAOA,EAAIiR,GAAS9G,EAAOnK,EAAIkR,GAAY3V,EAAMyE,KACjD,KAAOA,EAAIuQ,GAAYpG,EAAOnK,EAAIkR,GAAY3V,EAAMyE,GAAKmK,EAAOnK,IAAMkR,EAAWD,EACnF,EAEAU,SAASpW,EAAO4O,EAAQ+G,EAAUD,EAASV,GACzC,GAAI,IAAMW,EAAU/G,EAAO5N,IAAIhB,EAAO2V,OACjC,CACH,IAAIlR,EAAI,EACR,KAAOA,EAAIuQ,GAAYpG,EAAOnK,EAAIkR,GAAY3V,EAAMyE,GAAKmK,EAAOnK,IAAMkR,EAAWX,EACnF,CACF,EAEAqB,SAASrW,EAAO4O,EAAQ+G,EAAUD,EAASV,GACzC,IAAIvQ,EAAI,EAER,GAAI,IAAMkR,EAAU,CAClB,KAAOlR,EAAIiR,GAAS9G,EAAOnK,GAAKzE,EAAMyE,KACtC,KAAOA,EAAIuQ,GAAYpG,EAAOnK,GAAKzE,EAAMyE,IAAMmK,EAAOnK,IAAMiR,IAAY,EAC1E,KAAO,CACL,KAAOjR,EAAIiR,GAAS9G,EAAOnK,EAAIkR,GAAY3V,EAAMyE,IAAMmK,EAAOnK,IAAMkR,EAAWX,IAAe,GAC9F,KAAOvQ,EAAIuQ,GAAYpG,EAAOnK,EAAIkR,GAAY3V,EAAMyE,IAAMmK,EAAOnK,EAAIkR,EAAWD,GAAW9G,EAAOnK,IAAMkR,EAAWX,IAAe,EACpI,CACF,EAEAsB,SAAStW,EAAO4O,EAAQ+G,EAAUD,EAASV,GACzC,IAAIvQ,EAAI,EAER,GAAI,IAAMkR,EAAU,CAClB,KAAOlR,EAAIiR,GAAS9G,EAAOnK,GAAKzE,EAAMyE,KACtC,KAAOA,EAAIuQ,GAAYpG,EAAOnK,GAAKzE,EAAMyE,GAAKmK,EAAOnK,IAAMiR,EAC7D,KAAO,CACL,KAAOjR,EAAIiR,GAAS9G,EAAOnK,EAAIkR,GAAY3V,EAAMyE,GAAKmK,EAAOnK,IAAMkR,EAAWX,GAE9E,KAAOvQ,EAAIuQ,GAAY,CACrB,MAAMhW,EAAI4P,EAAOnK,EAAIkR,EAAWD,GAC1B3W,EAAI6P,EAAOnK,EAAIkR,EAAWX,GAC1ByB,EAAI7H,EAAOnK,EAAIkR,EAAWD,EAAUV,GAEpCvV,EAAIT,EAAID,EAAI0X,EACZC,EAAKrX,KAAKkI,IAAI9H,EAAIT,GAClB2X,EAAKtX,KAAKkI,IAAI9H,EAAIV,GAClB6X,EAAKvX,KAAKkI,IAAI9H,EAAIgX,GAExB7H,EAAOnK,EAAIkR,GAAY3V,EAAMyE,MAASiS,GAAMC,GAAMD,GAAME,EAAM5X,EAAM2X,GAAMC,EAAM7X,EAAI0X,EACtF,CACF,CACF,E,gBC/PF,MAAM,QAAExZ,GAAY,EAAQ,KAE5B,IAAI4Z,EAAM,KACVpa,EAAOD,QAAU,CACfgQ,aACE,IAAKqK,EAAK,CACR,MAAMC,EAAY,qBAAsBC,YACxCF,QAAYE,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiC/Z,wBAA8Bga,MAAKxY,GAAKqY,EAAYrY,EAAIA,EAAEyY,gBAC9K,CAEA,OAAOxZ,KAAKyZ,KACd,EAEAA,MACE,IAAIC,EAAW,KACf,MAAMC,EAAO,IAAIN,YAAYO,SAAST,GAAKra,QAE3C,MAAMM,EACJ8B,gBAAkB,OAAOyY,EAAKE,MAAQ,CACtC3Y,aAAa4Q,GAAQ,OAAO6H,EAAKG,OAAOhI,EAAO,CAC/C5Q,YAAY6Y,EAAKjI,GAAQ,OAAO6H,EAAKK,MAAMD,EAAKjI,EAAO,CACvD5Q,UAAU6Y,EAAKjI,GAAQ,OAAO,IAAIwD,WAAWqE,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAC7E5Q,WAAW6Y,EAAKjI,GAAQ,OAAO,IAAItR,YAAYmZ,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAE/E5Q,qBAAqB6Y,EAAKjI,GACxB,IAAIxP,EAAQlD,EAAIsV,GAAGqF,EAAKjI,GAAMxP,QAC9B,OAAQqX,EAAKK,MAAMD,EAAKjI,GAAOxP,CACjC,EAEF,MAAM4X,EAAc,SAAUC,WAAaC,KAAKC,KAAK5K,OAAS,MAC5D,MAAM8E,EAAU,IAAIvC,YACpB,OAAOsI,GAAU/F,EAAQ9E,OAAO6K,EACjC,EAH6D,GAKxDC,EAAc,SAAUJ,WAAaC,KAAKC,KAAKlJ,OAAS,MAC5D,MAAM0D,EAAU,IAAI2F,YACpB,OAAO3J,GAAUgE,EAAQ1D,OAAON,EACjC,EAH6D,GAyG9D,MApGI,yBAA0BsJ,aAC5BT,EAAW,IAAIe,sBAAqB,EAAExY,EAAG8X,MAC7B,IAAN9X,GAAS0X,EAAKe,UAAUX,GAClB,IAAN9X,GAAS0X,EAAKgB,YAAYZ,EAAI,KAiG/B,CAAE1H,KA7FT,MACEzS,YAAY6D,EAAOoN,GACjB7Q,KAAKyD,MAAQA,EACb,MAAMsW,EAAM3a,EAAIwb,MAAM/J,EAAO7J,QAI7B,GAHA5H,EAAIsV,GAAGqF,EAAKlJ,EAAO7J,QAAQ1D,IAAIuN,GAC/B7Q,KAAK+Z,IAAMJ,EAAKkB,SAASd,EAAKlJ,EAAO7J,OAAQvD,IAExCzD,KAAK+Z,IAAK,MAAM,IAAIxV,MAAM,gBAC3BmV,GAAUA,EAASoB,SAAS9a,KAAM,CAAC,EAAGA,KAAK+Z,KAAM/Z,KACvD,CAEAuT,OACEvT,KAAK+Z,IAAMJ,EAAKe,UAAU1a,KAAK+Z,KAC3BL,GAAUA,EAASqB,WAAW/a,KACpC,CAEAgb,IAAIC,GACF,OAAOtB,EAAKuB,SAASlb,KAAK+Z,IAAKoB,OAAOC,UAAUC,WAAWC,KAAKL,EAAM,GACxE,CAEAM,QAAQN,EAAMxX,EAAQzD,KAAKyD,OACzB,MAAMsW,EAAMJ,EAAK6B,aAAaxb,KAAK+Z,IAAKoB,OAAOC,UAAUC,WAAWC,KAAKL,EAAM,GAAIxX,GAC7E8X,EAAUE,KAAKC,MAAMnB,EAAYnb,EAAIsV,GAAGiF,EAAKgC,oBAAoB5B,GAAM3a,EAAI4H,YAEjF,OAAQ2S,EAAKiC,kBAAkB7B,GAAMwB,CACvC,CAEAtJ,UAAUgJ,EAAMxX,EAAQzD,KAAKyD,OAC3B,MAAMsW,EAAMJ,EAAKkC,eAAe7b,KAAK+Z,IAAKoB,OAAOC,UAAUC,WAAWC,KAAKL,EAAM,GAAIxX,GAE/EqY,EAAQ,CACZjL,OAAQzR,EAAIsV,GAAGiF,EAAKoC,sBAAsBhC,GAAM3a,EAAI4H,UAAU1E,QAC9DiZ,QAASE,KAAKC,MAAMnB,EAAYnb,EAAIsV,GAAGiF,EAAKqC,uBAAuBjC,GAAM3a,EAAI4H,aAG/E,OAAQ2S,EAAKsC,oBAAoBlC,GAAM+B,CACzC,GAyDaxJ,OAtDf,MACE1S,cACEI,KAAK+Z,IAAMJ,EAAKuC,aACZxC,IAAU1Z,KAAKmc,KAAO,IACtBzC,GAAUA,EAASoB,SAAS9a,KAAM,CAAC,EAAGA,KAAK+Z,KAAM/Z,KACvD,CAEAoc,QACEzC,EAAK0C,aAAarc,KAAK+Z,KACnBL,IAAU1Z,KAAKmc,KAAKnV,OAAS,EACnC,CAEAsM,QACE,OAAOqG,EAAK2C,aAAatc,KAAK+Z,IAChC,CAEAxG,OACMmG,IAAU1Z,KAAKmc,KAAKnV,OAAS,GACjChH,KAAK+Z,IAAMJ,EAAKgB,YAAY3a,KAAK+Z,KAC7BL,GAAUA,EAASqB,WAAW/a,KACpC,CAEAwS,MAAMuD,EAAU,CAAC,GACfA,EAAUmE,EAAYuB,KAAKc,UAAUxG,IAEjC2D,IAAU1Z,KAAKmc,KAAKnV,OAAS,GACjC,MAAM+S,EAAM3a,EAAIwb,MAAM7E,EAAQ/O,QAC9B5H,EAAIsV,GAAGqF,EAAKhE,EAAQ/O,QAAQ1D,IAAIyS,GAChC4D,EAAK6C,aAAaxc,KAAK+Z,IAAKA,EAAKhE,EAAQ/O,OAC3C,CAEAqM,OAAOnB,EAAMtC,EAAMc,GACjBd,EAAOsK,EAAYtK,GACnB,MAAMmG,EAAUrF,GAAQ,CAAC,EACrBgJ,GAAU1Z,KAAKmc,KAAK/O,KAAK8E,GAC7B,MAAM6H,EAAM3a,EAAIwb,MAAMhL,EAAK5I,QAC3B5H,EAAIsV,GAAGqF,EAAKnK,EAAK5I,QAAQ1D,IAAIsM,GAC7B,MAAM6M,EAAa,MAAO1G,GAAa,MAAOA,GAAa,MAAOA,EAClE4D,EAAK+C,cAAc1c,KAAK+Z,IAAK7H,EAAK6H,IAAKA,EAAKnK,EAAK5I,OAAyB,MAAjB+O,EAAQtS,MAAgByO,EAAKzO,MAAQsS,EAAQtS,MAAOgZ,EAAW1G,EAAQ5U,EAAG4U,EAAQ3U,EAAG2U,EAAQ1U,EACxJ,CAEA4Q,UAAU9Q,EAAGC,EAAGC,GACd,MAAM0Y,EAAMJ,EAAKgD,iBAAiB3c,KAAK+Z,IAAK5Y,EAAGC,EAAGC,GAE5CgQ,EAAc,CAClBxR,MAAO8Z,EAAKiD,uBAAuB7C,GACnCja,OAAQ6Z,EAAKkD,wBAAwB9C,GACrClJ,OAAQzR,EAAIsV,GAAGiF,EAAKmD,wBAAwB/C,GAAM3a,EAAI4H,UAAU1E,SAGlE,OAAQqX,EAAKoD,sBAAsBhD,GAAM1I,CAC3C,GAIJ,E,gBC5IF,MAAM,QAAE9R,GAAY,EAAQ,KAE5B,IAAI4Z,EAAM,KACVpa,EAAOD,QAAU,CACfgQ,aACE,IAAKqK,EAAK,CACR,MAAMC,EAAY,qBAAsBC,YACxCF,QAAYE,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiC/Z,uBAA6Bga,MAAKxY,GAAKqY,EAAYrY,EAAIA,EAAEyY,gBAC7K,CAEA,OAAOxZ,KAAKyZ,KACd,EAEAA,MACE,MAAMuD,EAAU,IAAIC,IACd9F,EAAc,IAAInF,YAElB2H,EAAO,IAAIN,YAAYO,SAAST,EAAK,CACzC+D,IAAK,CACHC,eAAeC,EAAIrD,GACjBiD,EAAQK,IAAID,GAAIE,GAAGle,EAAIsV,GAAGqF,EAAK3a,EAAI4H,UAAU1E,QAC/C,KAEDxD,QAEH,MAAMM,EACJ8B,gBAAkB,OAAOyY,EAAKE,MAAQ,CACtC3Y,aAAa4Q,GAAQ,OAAO6H,EAAKG,OAAOhI,EAAO,CAC/C5Q,YAAY6Y,EAAKjI,GAAQ,OAAO6H,EAAKK,MAAMD,EAAKjI,EAAO,CACvD5Q,UAAU6Y,EAAKjI,GAAQ,OAAO,IAAIwD,WAAWqE,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAC7E5Q,WAAW6Y,EAAKjI,GAAQ,OAAO,IAAItR,YAAYmZ,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAE/E5Q,qBAAqB6Y,EAAKjI,GACxB,IAAIxP,EAAQlD,EAAIsV,GAAGqF,EAAKjI,GAAMxP,QAC9B,OAAQqX,EAAKK,MAAMD,EAAKjI,GAAOxP,CACjC,EA+FF,MAAO,CAAEkS,QA5FT,MACE5U,YAAYC,EAAOC,EAAQyd,GAAQ,GACjCvd,KAAKwd,OAAS,GACdR,EAAQ1Z,IAAI,EAAGtD,MACfA,KAAK+Z,IAAMJ,EAAK8D,YAAY,EAAG5d,EAAOC,EAAQyd,EAChD,CAEAD,GAAGzM,GACD7Q,KAAKwd,OAAOpQ,KAAKyD,EACnB,CAEA0C,OACEvT,KAAK+Z,IAAMJ,EAAK+D,aAAa1d,KAAK+Z,KAClCiD,EAAQW,OAAO,EACjB,CAEAjJ,KACE1U,KAAKuT,OACL,IAAIvS,EAAS,EACb,MAAM0T,EAAK,IAAIY,WAAWtV,KAAKwd,OAAOnJ,QAAO,CAACuJ,EAAK/F,IAAU+F,EAAM/F,EAAM7Q,QAAQ,IAEjF,IAAK,MAAMjG,KAAKf,KAAKwd,OACnB9I,EAAGpR,IAAIvC,EAAGC,GACVA,GAAUD,EAAEiG,OAGd,OAAO0N,CACT,CAEAD,IAAI1T,EAAGD,EAAGmU,EAAOpV,EAAOC,EAAQ+Q,EAAQqE,EAASzE,GAC/C,MAAMsJ,EAAM3a,EAAIwb,MAAM/J,EAAO7J,QAC7B5H,EAAIsV,GAAGqF,EAAKlJ,EAAO7J,QAAQ1D,IAAIuN,GAC/B8I,EAAKkE,YAAY7d,KAAK+Z,IAAKA,EAAKlJ,EAAO7J,OAAQjG,EAAGD,EAAGjB,EAAOC,EAAQmV,EAAOC,EAASzE,EACtF,CAEIjB,YAAQA,GACV,MAAMqB,EAASsG,EAAY1H,OAAOD,GAE5BuK,EAAM3a,EAAIwb,MAAM/J,EAAO7J,QAC7B5H,EAAIsV,GAAGqF,EAAKlJ,EAAO7J,QAAQ1D,IAAIuN,GAC/B8I,EAAKmE,oBAAoB9d,KAAK+Z,IAAKA,EAAKlJ,EAAO7J,OACjD,CAEI+W,gBAAYA,GACd,MAAMlN,EAASsG,EAAY1H,OAAOsO,GAE5BhE,EAAM3a,EAAIwb,MAAM/J,EAAO7J,QAC7B5H,EAAIsV,GAAGqF,EAAKlJ,EAAO7J,QAAQ1D,IAAIuN,GAC/B8I,EAAKqE,wBAAwBhe,KAAK+Z,IAAKA,EAAKlJ,EAAO7J,OACrD,GA2CgB8N,QAxClB,MACElV,YAAYiR,EAAQoN,EAAQ,GAC1B,MAAMC,EAAO9e,EAAIwb,MAAM/J,EAAO7J,QAG9B,GAFA5H,EAAIsV,GAAGwJ,EAAMrN,EAAO7J,QAAQ1D,IAAIuN,GAChC7Q,KAAK+Z,IAAMJ,EAAKwE,YAAYD,EAAMrN,EAAO7J,OAAQiX,GAC7C,IAAMje,KAAK+Z,IAAK,MAAM,IAAIxV,MAAM,mCAEpCvE,KAAKH,MAAQ8Z,EAAKyE,cAAcpe,KAAK+Z,KACrC/Z,KAAKF,OAAS6Z,EAAK0E,eAAere,KAAK+Z,IACzC,CAEAxG,OACEvT,KAAK+Z,IAAMJ,EAAK2E,aAAate,KAAK+Z,IACpC,CAEA,UACE,IAAIjG,EACJ,KAAOA,EAAQ9T,KAAK8T,eAAeA,CACrC,CAEAA,QACE,MAAMiG,EAAMJ,EAAK4E,cAAcve,KAAK+Z,KAEpC,GAAI,IAAMA,EAAK,OAAO,KACtB,GAAI,IAAMA,EAAK,MAAO/Z,KAAKuT,OAAQ,IAAIhP,MAAM,+BAE7C,MAAM8M,EAAc,CAClBtQ,EAAG4Y,EAAK6E,gBAAgBzE,GACxBjZ,EAAG6Y,EAAK8E,gBAAgB1E,GACxB9E,MAAO0E,EAAK+E,oBAAoB3E,GAChCla,MAAO8Z,EAAKgF,oBAAoB5E,GAChCja,OAAQ6Z,EAAKiF,qBAAqB7E,GAClC7E,QAASyE,EAAKkF,sBAAsB9E,GACpClJ,OAAQzR,EAAIsV,GAAGiF,EAAKmF,qBAAqB/E,GAAM3a,EAAI4H,UAAU1E,SAG/D,OAAQqX,EAAKoF,mBAAmBhF,GAAM1I,CACxC,GAIJ,E,gBCnIF,MAAM,QAAE9R,GAAY,EAAQ,KAE5B,IAAI4Z,EAAM,KACVpa,EAAOD,QAAU,CACfgQ,aACE,IAAKqK,EAAK,CACR,MAAMC,EAAY,qBAAsBC,YACxCF,QAAYE,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiC/Z,wBAA8Bga,MAAKxY,GAAKqY,EAAYrY,EAAIA,EAAEyY,gBAC9K,CAEA,OAAOxZ,KAAKyZ,KACd,EAEAA,MACE,MAAME,EAAO,IAAIN,YAAYO,SAAST,GAAKra,QAE3C,MAAMM,EACJ8B,gBAAkB,OAAOyY,EAAKE,MAAQ,CACtC3Y,aAAa4Q,GAAQ,OAAO6H,EAAKG,OAAOhI,EAAO,CAC/C5Q,YAAY6Y,EAAKjI,GAAQ,OAAO6H,EAAKK,MAAMD,EAAKjI,EAAO,CACvD5Q,UAAU6Y,EAAKjI,GAAQ,OAAO,IAAIwD,WAAWqE,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAC7E5Q,WAAW6Y,EAAKjI,GAAQ,OAAO,IAAItR,YAAYmZ,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAE/E5Q,qBAAqB6Y,EAAKjI,GACxB,IAAIxP,EAAQlD,EAAIsV,GAAGqF,EAAKjI,GAAMxP,QAC9B,OAAQqX,EAAKK,MAAMD,EAAKjI,GAAOxP,CACjC,EA2BF,MAAO,CAAEmN,OAxBT,SAAgBoB,EAAQhR,EAAOC,EAAQ2Q,GACrC,MAAMsJ,EAAM3a,EAAIwb,MAAM/J,EAAO7J,QAE7B,OADA5H,EAAIsV,GAAGqF,EAAKlJ,EAAO7J,QAAQ1D,IAAIuN,GACxBzR,EAAI4f,cAAcrF,EAAKlK,OAAOsK,EAAKla,EAAOC,EAAQ2Q,GAAUrR,EAAI4H,SACzE,EAoBiBmK,OAlBjB,SAAgBN,EAAQhR,EAAOC,GAC7B,MAAMoe,EAAO9e,EAAIwb,MAAM/J,EAAO7J,QAC9B5H,EAAIsV,GAAGwJ,EAAMrN,EAAO7J,QAAQ1D,IAAIuN,GAChC,MAAMkJ,EAAMJ,EAAKxI,OAAO+M,EAAMrN,EAAO7J,OAAQnH,EAAOC,GAEpD,GAAI,IAAMia,EAAK,MAAM,IAAIxV,MAAM,yBAC/B,GAAI,IAAMwV,EAAK,MAAM,IAAIxV,MAAM,gCAE/B,MAAM8M,EAAc,CAClBxR,MAAO8Z,EAAKsF,aAAalF,GACzBja,OAAQ6Z,EAAKuF,cAAcnF,GAC3BxI,OAAQoI,EAAKwF,cAAcpF,GAC3BlJ,OAAQzR,EAAIsV,GAAGiF,EAAKyF,cAAcrF,GAAM3a,EAAI4H,UAAU1E,SAGxD,OAAQqX,EAAK0F,YAAYtF,GAAM1I,CACjC,EAGF,E,gBCtDF,MAAM,QAAE9R,GAAY,EAAQ,KAE5B,IAAI4Z,EAAM,KACVpa,EAAOD,QAAU,CACfgQ,aACE,IAAKqK,EAAK,CACR,MAAMC,EAAY,qBAAsBC,YACxCF,QAAYE,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiC/Z,uBAA6Bga,MAAKxY,GAAKqY,EAAYrY,EAAIA,EAAEyY,gBAC7K,CAEA,OAAOxZ,KAAKyZ,KACd,EAEAA,MACE,MAAME,EAAO,IAAIN,YAAYO,SAAST,GAAKra,QAE3C,MAAMM,EACJ8B,gBAAkB,OAAOyY,EAAKE,MAAQ,CACtC3Y,aAAa4Q,GAAQ,OAAO6H,EAAKG,OAAOhI,EAAO,CAC/C5Q,YAAY6Y,EAAKjI,GAAQ,OAAO6H,EAAKK,MAAMD,EAAKjI,EAAO,CACvD5Q,UAAU6Y,EAAKjI,GAAQ,OAAO,IAAIwD,WAAWqE,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAC7E5Q,WAAW6Y,EAAKjI,GAAQ,OAAO,IAAItR,YAAYmZ,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAE/E5Q,qBAAqB6Y,EAAKjI,GACxB,IAAIxP,EAAQlD,EAAIsV,GAAGqF,EAAKjI,GAAMxP,QAC9B,OAAQqX,EAAKK,MAAMD,EAAKjI,GAAOxP,CACjC,EAoBF,MAAO,CAAE2P,UAjBT,SAAmBpB,EAAQ3M,EAAKT,GAC9B,MAAMya,EAAO9e,EAAIwb,MAAM/J,EAAO7J,QAC9B5H,EAAIsV,GAAGwJ,EAAMrN,EAAO7J,QAAQ1D,IAAIuN,GAChC,MAAMkJ,EAAMJ,EAAK1H,UAAUiM,EAAMrN,EAAO7J,OAAQ9C,EAAKT,GAErD,GAAI,IAAMsW,EAAK,MAAM,IAAIxV,MAAM,wBAC/B,GAAI,IAAMwV,EAAK,MAAM,IAAIxV,MAAM,4BAE/B,MAAM8M,EAAc,CAClBxR,MAAO8Z,EAAK2F,gBAAgBvF,GAC5Bja,OAAQ6Z,EAAK4F,iBAAiBxF,GAC9BlJ,OAAQzR,EAAIsV,GAAGiF,EAAK6F,iBAAiBzF,GAAM3a,EAAI4H,UAAU1E,SAG3D,OAAQqX,EAAK8F,eAAe1F,GAAM1I,CACpC,EAGF,E,gBC/CF,MAAM,QAAE9R,GAAY,EAAQ,KAE5B,IAAI4Z,EAAM,KACVpa,EAAOD,QAAU,CAChBgQ,aACC,IAAKqK,EAAK,CACT,MAAMC,EAAY,qBAAsBC,YACxCF,QAAYE,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiC/Z,wBAA8Bga,MAAKxY,GAAKqY,EAAYrY,EAAIA,EAAEyY,gBAC7K,CAEA,OAAOxZ,KAAKyZ,KACb,EAEAA,MACC,MAAME,EAAO,IAAIN,YAAYO,SAAST,GAAKra,QAE3C,MAAMM,EACL8B,gBAAkB,OAAOyY,EAAKE,MAAQ,CACtC3Y,aAAa4Q,GAAQ,OAAO6H,EAAKG,OAAOhI,EAAO,CAC/C5Q,YAAY6Y,EAAKjI,GAAQ,OAAO6H,EAAKK,MAAMD,EAAKjI,EAAO,CACvD5Q,UAAU6Y,EAAKjI,GAAQ,OAAO,IAAIwD,WAAWqE,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAC7E5Q,WAAW6Y,EAAKjI,GAAQ,OAAO,IAAItR,YAAYmZ,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAE/E5Q,qBAAqB6Y,EAAKjI,GACzB,IAAIxP,EAAQlD,EAAIsV,GAAGqF,EAAKjI,GAAMxP,QAC9B,OAAQqX,EAAKK,MAAMD,EAAKjI,GAAOxP,CAChC,EAkBD,MAAO,CAAE6O,OAfT,SAAgBN,GACf,MAAMqN,EAAO9e,EAAIwb,MAAM/J,EAAO7J,QAC9B5H,EAAIsV,GAAGwJ,EAAMrN,EAAO7J,QAAQ1D,IAAIuN,GAChC,MAAMkJ,EAAMJ,EAAKxI,OAAO+M,EAAMrN,EAAO7J,QACrC,GAAI,IAAM+S,EAAK,MAAM,IAAIxV,MAAM,0BAE/B,MAAM8M,EAAc,CACnBxR,MAAO8Z,EAAKsF,aAAalF,GACzBja,OAAQ6Z,EAAKuF,cAAcnF,GAC3BlJ,OAAQzR,EAAIsV,GAAGiF,EAAKyF,cAAcrF,GAAM3a,EAAI4H,UAAU1E,SAGvD,OAAQqX,EAAK0F,YAAYtF,GAAM1I,CAChC,EAGD,E,UC3BD,IAAIqD,EAAKY,WACLoK,EAAMC,YACNtK,EAAM7U,YACNof,EAAO,IAAIlL,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAC5GmL,EAAO,IAAInL,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,IACpHoL,EAAO,IAAIpL,EAAG,CAAC,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,KAC7EqL,EAAO,SAAUhS,EAAItI,GAEvB,IADA,IAAIpE,EAAI,IAAIqe,EAAI,IACP3Y,EAAI,EAAGA,EAAI,KAAMA,EACxB1F,EAAE0F,GAAKtB,GAAS,GAAKsI,EAAGhH,EAAI,GAE9B,IAAI5F,EAAI,IAAIkU,EAAIhU,EAAE,KAClB,IAAS0F,EAAI,EAAGA,EAAI,KAAMA,EACxB,IAAK,IAAIiZ,EAAI3e,EAAE0F,GAAIiZ,EAAI3e,EAAE0F,EAAI,KAAMiZ,EACjC7e,EAAE6e,GAAKA,EAAI3e,EAAE0F,IAAM,EAAIA,EAG3B,MAAO,CAAC1F,EAAGF,EACb,EACI8e,EAAKF,EAAKH,EAAM,GAChBM,EAAKD,EAAG,GACRE,EAAQF,EAAG,GACfC,EAAG,IAAM,IAAKC,EAAM,KAAO,GAK3B,IAJA,IAUIpf,EAVAqf,EAAKL,EAAKF,EAAM,GAChBQ,EAAKD,EAAG,GACRE,EAAQF,EAAG,GACXG,EAAM,IAAIb,EAAI,OACT3Y,EAAI,EAAGA,EAAI,QAASA,EAG3BhG,GAAS,OADTA,GAAS,OADTA,GAAS,MAAJgG,KAAe,GAAS,MAAJA,IAAc,MACnB,GAAS,MAAJhG,IAAc,MACnB,GAAS,KAAJA,IAAa,EACtCwf,EAAIxZ,KAAW,MAAJhG,KAAe,GAAS,IAAJA,IAAY,KAAO,EAGpD,IAAIyf,EAAO,SAAUC,EAAIC,EAAIvf,GAI3B,IAHA,IAAIM,EAAIgf,EAAGzZ,OACPD,EAAI,EACJrF,EAAI,IAAIge,EAAIgB,GACT3Z,EAAItF,IAAKsF,IACZrF,EAAE+e,EAAG1Z,GAAK,GACd,IAII4Z,EAJAC,EAAK,IAAIlB,EAAIgB,GACjB,IAAK3Z,EAAI,EAAGA,EAAI2Z,IAAM3Z,EACpB6Z,EAAG7Z,GAAK6Z,EAAG7Z,EAAI,GAAKrF,EAAEqF,EAAI,IAAM,EAGlC,GAAI5F,EAAG,CACLwf,EAAK,IAAIjB,EAAI,GAAKgB,GAClB,IAAIG,EAAM,GAAKH,EACf,IAAK3Z,EAAI,EAAGA,EAAItF,IAAKsF,EACnB,GAAI0Z,EAAG1Z,GAIL,IAHA,IAAI+Z,EAAK/Z,GAAK,EAAI0Z,EAAG1Z,GACjBga,EAAML,EAAKD,EAAG1Z,GACd2B,EAAIkY,EAAGH,EAAG1Z,GAAK,MAAQga,EAClBC,EAAItY,GAAK,GAAKqY,GAAO,EAAGrY,GAAKsY,IAAKtY,EACzCiY,EAAGJ,EAAI7X,KAAOmY,GAAOC,CAI7B,MAEE,IADAH,EAAK,IAAIjB,EAAIje,GACRsF,EAAI,EAAGA,EAAItF,IAAKsF,EACf0Z,EAAG1Z,KACL4Z,EAAG5Z,GAAKwZ,EAAIK,EAAGH,EAAG1Z,GAAK,QAAU,GAAK0Z,EAAG1Z,IAI/C,OAAO4Z,CACT,EACIM,EAAM,IAAIvM,EAAG,KACjB,IAAS3N,EAAI,EAAGA,EAAI,MAAOA,EACzBka,EAAIla,GAAK,EACX,IAASA,EAAI,IAAKA,EAAI,MAAOA,EAC3Bka,EAAIla,GAAK,EACX,IAASA,EAAI,IAAKA,EAAI,MAAOA,EAC3Bka,EAAIla,GAAK,EACX,IAASA,EAAI,IAAKA,EAAI,MAAOA,EAC3Bka,EAAIla,GAAK,EACX,IAAIma,EAAM,IAAIxM,EAAG,IACjB,IAAS3N,EAAI,EAAGA,EAAI,KAAMA,EACxBma,EAAIna,GAAK,EACX,IAAIoa,EAAMX,EAAKS,EAAK,EAAG,GACnBG,EAAOZ,EAAKS,EAAK,EAAG,GACpBI,EAAMb,EAAKU,EAAK,EAAG,GACnBI,EAAOd,EAAKU,EAAK,EAAG,GACpBrf,EAAM,SAAUP,GAElB,IADA,IAAI0f,EAAI1f,EAAE,GACDyF,EAAI,EAAGA,EAAIzF,EAAE0F,SAAUD,EAC1BzF,EAAEyF,GAAKia,IACTA,EAAI1f,EAAEyF,IAEV,OAAOia,CACT,EACIO,EAAO,SAAUpf,EAAGJ,EAAGif,GACzB,IAAIQ,EAAIzf,GAAK,EAAI,EACjB,OAAQI,EAAEqf,GAAKrf,EAAEqf,EAAI,IAAM,KAAW,EAAJzf,GAASif,CAC7C,EACIS,EAAS,SAAUtf,EAAGJ,GACxB,IAAIyf,EAAIzf,GAAK,EAAI,EACjB,OAAQI,EAAEqf,GAAKrf,EAAEqf,EAAI,IAAM,EAAIrf,EAAEqf,EAAI,IAAM,MAAY,EAAJzf,EACrD,EACI2f,EAAO,SAAU3f,GACnB,OAAQA,GAAK,EAAI,IAAU,EAAJA,GAAS,EAClC,EACI4f,EAAM,SAAUjZ,EAAGjH,EAAG6K,IACf,MAAL7K,GAAaA,EAAI,KACnBA,EAAI,IACG,MAAL6K,GAAaA,EAAI5D,EAAE1B,UACrBsF,EAAI5D,EAAE1B,QACR,IAAI4a,EAAI,IAAKlZ,aAAagX,EAAMA,EAAMhX,aAAa2M,EAAMA,EAAMX,GAAIpI,EAAI7K,GAEvE,OADAmgB,EAAEte,IAAIoF,EAAE/F,SAASlB,EAAG6K,IACbsV,CACT,EA6IIC,EAAQ,SAAU1f,EAAGJ,EAAG2G,GAC1BA,IAAU,EAAJ3G,EACN,IAAIyf,EAAIzf,GAAK,EAAI,EACjBI,EAAEqf,IAAM9Y,EACRvG,EAAEqf,EAAI,IAAM9Y,IAAM,CACpB,EACIoZ,EAAU,SAAU3f,EAAGJ,EAAG2G,GAC5BA,IAAU,EAAJ3G,EACN,IAAIyf,EAAIzf,GAAK,EAAI,EACjBI,EAAEqf,IAAM9Y,EACRvG,EAAEqf,EAAI,IAAM9Y,IAAM,EAClBvG,EAAEqf,EAAI,IAAM9Y,IAAM,EACpB,EACIqZ,EAAQ,SAAU5f,EAAGue,GAEvB,IADA,IAAIze,EAAI,GACC8E,EAAI,EAAGA,EAAI5E,EAAE6E,SAAUD,EAC1B5E,EAAE4E,IACJ9E,EAAEmL,KAAK,CAAE3L,EAAMugB,EAAG7f,EAAE4E,KAExB,IAAItF,EAAIQ,EAAE+E,OACNib,EAAKhgB,EAAEK,QACX,IAAKb,EACH,MAAO,CAACygB,EAAI,GACd,GAAU,IAANzgB,EAAS,CACX,IAAIiH,EAAI,IAAIgM,EAAGzS,EAAE,GAAGR,EAAI,GAExB,OADAiH,EAAEzG,EAAE,GAAGR,GAAK,EACL,CAACiH,EAAG,EACb,CACAzG,EAAEmK,MAAK,SAAU9K,EAAGD,GAClB,OAAOC,EAAE0gB,EAAI3gB,EAAE2gB,CACjB,IACA/f,EAAEmL,KAAK,CAAE3L,GAAI,EAAGugB,EAAG,QACnB,IAAItgB,EAAIO,EAAE,GAAId,EAAIc,EAAE,GAAIkgB,EAAK,EAAGC,EAAK,EAAGC,EAAK,EAE7C,IADApgB,EAAE,GAAK,CAAER,GAAI,EAAGugB,EAAGtgB,EAAEsgB,EAAI7gB,EAAE6gB,EAAGtgB,EAAGP,KAC1BihB,IAAO3gB,EAAI,GAChBC,EAAIO,EAAEA,EAAEkgB,GAAIH,EAAI/f,EAAEogB,GAAIL,EAAIG,IAAOE,KACjClhB,EAAIc,EAAEkgB,IAAOC,GAAMngB,EAAEkgB,GAAIH,EAAI/f,EAAEogB,GAAIL,EAAIG,IAAOE,KAC9CpgB,EAAEmgB,KAAQ,CAAE3gB,GAAI,EAAGugB,EAAGtgB,EAAEsgB,EAAI7gB,EAAE6gB,EAAGtgB,EAAGP,KAEtC,IAAImhB,EAASL,EAAG,GAAGxgB,EACnB,IAASsF,EAAI,EAAGA,EAAItF,IAAKsF,EACnBkb,EAAGlb,GAAGtF,EAAI6gB,IACZA,EAASL,EAAGlb,GAAGtF,GAEnB,IAAI8gB,EAAK,IAAI7C,EAAI4C,EAAS,GACtBE,EAAMC,EAAGxgB,EAAEmgB,EAAK,GAAIG,EAAI,GAC5B,GAAIC,EAAM9B,EAAI,CACR3Z,EAAI,EAAR,IAAW2b,EAAK,EACZC,EAAMH,EAAM9B,EAAIkC,EAAM,GAAKD,EAI/B,IAHAV,EAAG7V,MAAK,SAAU9K,EAAGD,GACnB,OAAOkhB,EAAGlhB,EAAEI,GAAK8gB,EAAGjhB,EAAEG,IAAMH,EAAE0gB,EAAI3gB,EAAE2gB,CACtC,IACOjb,EAAItF,IAAKsF,EAAG,CACjB,IAAI8b,EAAOZ,EAAGlb,GAAGtF,EACjB,KAAI8gB,EAAGM,GAAQnC,GAIb,MAHAgC,GAAME,GAAO,GAAKJ,EAAMD,EAAGM,IAC3BN,EAAGM,GAAQnC,CAGf,CAEA,IADAgC,KAAQC,EACDD,EAAK,GAAG,CACb,IAAII,EAAOb,EAAGlb,GAAGtF,EACb8gB,EAAGO,GAAQpC,EACbgC,GAAM,GAAKhC,EAAK6B,EAAGO,KAAU,IAE3B/b,CACN,CACA,KAAOA,GAAK,GAAK2b,IAAM3b,EAAG,CACxB,IAAIgc,EAAOd,EAAGlb,GAAGtF,EACb8gB,EAAGQ,KAAUrC,MACb6B,EAAGQ,KACHL,EAEN,CACAF,EAAM9B,CACR,CACA,MAAO,CAAC,IAAIhM,EAAG6N,GAAKC,EACtB,EACIC,EAAK,SAAUb,EAAGlgB,EAAGS,GACvB,OAAgB,IAATyf,EAAEngB,EAAWE,KAAKE,IAAI4gB,EAAGb,EAAElgB,EAAGA,EAAGS,EAAI,GAAIsgB,EAAGb,EAAEzgB,EAAGO,EAAGS,EAAI,IAAMT,EAAEkgB,EAAEngB,GAAKU,CAChF,EACI6gB,EAAK,SAAUjK,GAEjB,IADA,IAAItX,EAAIsX,EAAE/R,OACHvF,IAAMsX,IAAItX,KAOjB,IALA,IAAIwhB,EAAK,IAAIvD,IAAMje,GACfyhB,EAAM,EAAGC,EAAMpK,EAAE,GAAIqK,EAAM,EAC3BjZ,EAAI,SAAUzB,GAChBua,EAAGC,KAASxa,CACd,EACS3B,EAAI,EAAGA,GAAKtF,IAAKsF,EACxB,GAAIgS,EAAEhS,KAAOoc,GAAOpc,IAAMtF,IACtB2hB,MACC,CACH,IAAKD,GAAOC,EAAM,EAAG,CACnB,KAAOA,EAAM,IAAKA,GAAO,IACvBjZ,EAAE,OACAiZ,EAAM,IACRjZ,EAAEiZ,EAAM,GAAKA,EAAM,IAAM,EAAI,MAAQA,EAAM,GAAK,EAAI,OACpDA,EAAM,EAEV,MAAO,GAAIA,EAAM,EAAG,CAElB,IADAjZ,EAAEgZ,KAAQC,EACHA,EAAM,EAAGA,GAAO,EACrBjZ,EAAE,MACAiZ,EAAM,IACRjZ,EAAEiZ,EAAM,GAAK,EAAI,MAAOA,EAAM,EAClC,CACA,KAAOA,KACLjZ,EAAEgZ,GACJC,EAAM,EACND,EAAMpK,EAAEhS,EACV,CAEF,MAAO,CAACkc,EAAGtgB,SAAS,EAAGugB,GAAMzhB,EAC/B,EACI4hB,EAAO,SAAUC,EAAIL,GAEvB,IADA,IAAIvhB,EAAI,EACCqF,EAAI,EAAGA,EAAIkc,EAAGjc,SAAUD,EAC/BrF,GAAK4hB,EAAGvc,GAAKkc,EAAGlc,GAClB,OAAOrF,CACT,EACI6hB,EAAQ,SAAUzZ,EAAK0Z,EAAKC,GAC9B,IAAIhiB,EAAIgiB,EAAIzc,OACRwa,EAAIE,EAAK8B,EAAM,GACnB1Z,EAAI0X,GAAS,IAAJ/f,EACTqI,EAAI0X,EAAI,GAAK/f,IAAM,EACnBqI,EAAI0X,EAAI,GAAc,IAAT1X,EAAI0X,GACjB1X,EAAI0X,EAAI,GAAkB,IAAb1X,EAAI0X,EAAI,GACrB,IAAK,IAAIza,EAAI,EAAGA,EAAItF,IAAKsF,EACvB+C,EAAI0X,EAAIza,EAAI,GAAK0c,EAAI1c,GACvB,OAAqB,GAAbya,EAAI,EAAI/f,EAClB,EACIiiB,EAAO,SAAUD,EAAK3Z,EAAK6Z,EAAOC,EAAMC,EAAIC,EAAI/V,EAAIgW,EAAIC,EAAIvN,EAAI1U,GAClE8f,EAAM/X,EAAK/H,IAAK4hB,KACdE,EAAG,KAML,IALA,IAAII,EAAMlC,EAAM8B,EAAI,IAAKK,EAAMD,EAAI,GAAIE,EAAMF,EAAI,GAC7CG,EAAMrC,EAAM+B,EAAI,IAAKO,EAAMD,EAAI,GAAIE,EAAMF,EAAI,GAC7CG,EAAKvB,EAAGkB,GAAMM,EAAOD,EAAG,GAAIE,EAAMF,EAAG,GACrCG,EAAK1B,EAAGqB,GAAMM,EAAOD,EAAG,GAAIE,EAAMF,EAAG,GACrCG,EAAS,IAAInF,EAAI,IACZ3Y,EAAI,EAAGA,EAAIyd,EAAKxd,SAAUD,EACjC8d,EAAiB,GAAVL,EAAKzd,MACd,IAASA,EAAI,EAAGA,EAAI4d,EAAK3d,SAAUD,EACjC8d,EAAiB,GAAVF,EAAK5d,MAGd,IAFA,IAAI+d,EAAK/C,EAAM8C,EAAQ,GAAIE,EAAMD,EAAG,GAAIE,EAAOF,EAAG,GAC9CG,EAAO,GACJA,EAAO,IAAMF,EAAIjF,EAAKmF,EAAO,MAAOA,GAE3C,IAKIC,EAAIC,EAAIC,EAAIC,EALZC,EAAO7O,EAAK,GAAK,EACjB8O,EAAQlC,EAAKQ,EAAI5C,GAAOoC,EAAKS,EAAI5C,GAAOnT,EACxCyX,EAAQnC,EAAKQ,EAAIK,GAAOb,EAAKS,EAAIO,GAAOtW,EAAK,GAAK,EAAIkX,EAAO5B,EAAKwB,EAAQE,IAAQ,EAAIF,EAAO,IAAM,EAAIA,EAAO,IAAM,EAAIA,EAAO,KACnI,GAAIS,GAAQC,GAASD,GAAQE,EAC3B,OAAOjC,EAAMzZ,EAAK/H,EAAG0hB,EAAI9gB,SAASqhB,EAAIA,EAAKvN,IAG7C,GADAoL,EAAM/X,EAAK/H,EAAG,GAAKyjB,EAAQD,IAASxjB,GAAK,EACrCyjB,EAAQD,EAAO,CACjBL,EAAK1E,EAAK0D,EAAKC,EAAK,GAAIgB,EAAKjB,EAAKkB,EAAK5E,EAAK6D,EAAKC,EAAK,GAAIe,EAAKhB,EAC/D,IAAIoB,EAAMjF,EAAKuE,EAAKC,EAAM,GAK1B,IAJAnD,EAAM/X,EAAK/H,EAAG0iB,EAAM,KACpB5C,EAAM/X,EAAK/H,EAAI,EAAG6iB,EAAM,GACxB/C,EAAM/X,EAAK/H,EAAI,GAAIkjB,EAAO,GAC1BljB,GAAK,GACIgF,EAAI,EAAGA,EAAIke,IAAQle,EAC1B8a,EAAM/X,EAAK/H,EAAI,EAAIgF,EAAGge,EAAIjF,EAAK/Y,KACjChF,GAAK,EAAIkjB,EAET,IADA,IAAIS,EAAO,CAAClB,EAAMG,GACTgB,EAAK,EAAGA,EAAK,IAAKA,EACzB,KAAIC,GAAOF,EAAKC,GAChB,IAAS5e,EAAI,EAAGA,EAAI6e,GAAK5e,SAAUD,EAAG,CACpC,IAAI8e,GAAgB,GAAVD,GAAK7e,GACf8a,EAAM/X,EAAK/H,EAAG0jB,EAAII,KAAO9jB,GAAKgjB,EAAIc,IAC9BA,GAAM,KACRhE,EAAM/X,EAAK/H,EAAG6jB,GAAK7e,KAAO,EAAI,KAAMhF,GAAK6jB,GAAK7e,KAAO,GACzD,CANmB,CAQvB,MACEme,EAAK/D,EAAKgE,EAAKlE,EAAKmE,EAAK/D,EAAKgE,EAAKnE,EAErC,IAASna,EAAI,EAAGA,EAAIgd,IAAMhd,EACxB,GAAI6c,EAAK7c,GAAK,IAAK,CACb8e,GAAMjC,EAAK7c,KAAO,GAAK,GAC3B+a,EAAQhY,EAAK/H,EAAGmjB,EAAGW,GAAM,MAAO9jB,GAAKojB,EAAGU,GAAM,KAC1CA,GAAM,IACRhE,EAAM/X,EAAK/H,EAAG6hB,EAAK7c,KAAO,GAAK,IAAKhF,GAAK6d,EAAKiG,KAChD,IAAIC,GAAgB,GAAVlC,EAAK7c,GACf+a,EAAQhY,EAAK/H,EAAGqjB,EAAGU,KAAO/jB,GAAKsjB,EAAGS,IAC9BA,GAAM,IACRhE,EAAQhY,EAAK/H,EAAG6hB,EAAK7c,KAAO,EAAI,MAAOhF,GAAK8d,EAAKiG,IACrD,MACEhE,EAAQhY,EAAK/H,EAAGmjB,EAAGtB,EAAK7c,KAAMhF,GAAKojB,EAAGvB,EAAK7c,IAI/C,OADA+a,EAAQhY,EAAK/H,EAAGmjB,EAAG,MACZnjB,EAAIojB,EAAG,IAChB,EACIY,EAAM,IAAI1Q,EAAI,CAAC,MAAO,OAAQ,OAAQ,OAAQ,OAAQ,QAAS,QAAS,QAAS,UACjF6M,EAAK,IAAIxN,EAAG,GAiIhB,SAASsR,EAASrV,EAAMsV,GACjBA,IACHA,EAAO,CAAC,GACV,IAAI3kB,EAxCM,WACV,IAAIA,EAAI,EAAGD,EAAI,EACf,MAAO,CACLU,EAAG,SAAUI,GAGX,IAFA,IAAIyf,EAAItgB,EAAG0f,EAAI3f,EACXK,EAAe,EAAXS,EAAE6E,OACDD,EAAI,EAAGA,IAAMrF,GAAI,CAExB,IADA,IAAI4K,EAAI3K,KAAKC,IAAImF,EAAI,KAAMrF,GACpBqF,EAAIuF,IAAKvF,EACdia,GAAKY,GAAKzf,EAAE4E,GACd6a,GAAS,MAAJA,GAAa,IAAMA,GAAK,IAAKZ,GAAS,MAAJA,GAAa,IAAMA,GAAK,GACjE,CACA1f,EAAIsgB,EAAGvgB,EAAI2f,CACb,EACA7e,EAAG,WAED,OAAY,KADZb,GAAK,SACe,GAAKA,IAAM,GAAK,IAAU,KADlCD,GAAK,SACqC,EAAIA,IAAM,CAClE,EAEJ,CAqBU6kB,GACR5kB,EAAES,EAAE4O,GACJ,IAfkBoI,EACdoN,EAAcC,EARC3C,EAAK4C,EAAKC,EAAKC,EAAMC,EAsBpCrkB,GAtByBmkB,EAsBJ,EAtBSC,EAsBN,EArInB,SAAU9C,EAAKgD,EAAKC,EAAMJ,EAAKC,EAAMI,GAC9C,IAAIllB,EAAIgiB,EAAIzc,OACRwa,EAAI,IAAI9M,EAAG4R,EAAM7kB,EAAI,GAAK,EAAIE,KAAKilB,KAAKnlB,EAAI,MAAQ8kB,GACpDpc,EAAIqX,EAAE7e,SAAS2jB,EAAK9E,EAAExa,OAASuf,GAC/B/C,EAAM,EACV,IAAKiD,GAAOhlB,EAAI,EACd,IAAK,IAAIsF,EAAI,EAAGA,GAAKtF,EAAGsF,GAAK,MAAO,CAClC,IAAIuF,EAAIvF,EAAI,MACRuF,EAAI7K,EACN+hB,EAAMD,EAAMpZ,EAAGqZ,EAAKC,EAAI9gB,SAASoE,EAAGuF,KAEpCnC,EAAEpD,GAAK4f,EACPnD,EAAMD,EAAMpZ,EAAGqZ,EAAKC,EAAI9gB,SAASoE,EAAGtF,IAExC,KACK,CAYL,IAXA,IAAI4kB,EAAMN,EAAIU,EAAM,GAChB7E,EAAIyE,IAAQ,GAAItN,EAAU,KAANsN,EACpBQ,GAAS,GAAKH,GAAQ,EACtBI,EAAO,IAAIpH,EAAI,OAAQqH,EAAO,IAAIrH,EAAImH,EAAQ,GAC9CG,EAAQrlB,KAAKilB,KAAKF,EAAO,GAAIO,EAAQ,EAAID,EACzCE,EAAM,SAAU7E,GAClB,OAAQoB,EAAIpB,GAAMoB,EAAIpB,EAAK,IAAM2E,EAAQvD,EAAIpB,EAAK,IAAM4E,GAASJ,CACnE,EACIjD,EAAO,IAAIvO,EAAI,MACfwO,EAAK,IAAInE,EAAI,KAAMoE,EAAK,IAAIpE,EAAI,IAChCyH,EAAO,EAAGpZ,EAAK,EAAUgW,GAAPhd,EAAI,EAAQ,GAAGqgB,EAAK,EAAGpD,EAAK,EAC3Cjd,EAAItF,IAAKsF,EAAG,CACjB,IAAIsgB,EAAKH,EAAIngB,GACTugB,EAAW,MAAJvgB,EAAWwgB,EAAQR,EAAKM,GAGnC,GAFAP,EAAKQ,GAAQC,EACbR,EAAKM,GAAMC,EACPF,GAAMrgB,EAAG,CACX,IAAIygB,EAAM/lB,EAAIsF,EACd,IAAKogB,EAAO,KAAOpD,EAAK,QAAUyD,EAAM,IAAK,CAC3ChE,EAAME,EAAKD,EAAKtZ,EAAG,EAAGyZ,EAAMC,EAAIC,EAAI/V,EAAIgW,EAAIC,EAAIjd,EAAIid,EAAIR,GACxDO,EAAKoD,EAAOpZ,EAAK,EAAGiW,EAAKjd,EACzB,IAAK,IAAIiZ,EAAI,EAAGA,EAAI,MAAOA,EACzB6D,EAAG7D,GAAK,EACV,IAASA,EAAI,EAAGA,EAAI,KAAMA,EACxB8D,EAAG9D,GAAK,CACZ,CACA,IAAIte,EAAI,EAAGS,EAAI,EAAGslB,EAAO1O,EAAG2O,EAAMJ,EAAOC,EAAQ,MACjD,GAAIC,EAAM,GAAKH,IAAOH,EAAIngB,EAAI2gB,GAI5B,IAHA,IAAIC,EAAOhmB,KAAKC,IAAIggB,EAAG4F,GAAO,EAC1BI,EAAOjmB,KAAKC,IAAI,MAAOmF,GACvB8gB,EAAKlmB,KAAKC,IAAI,IAAK4lB,GAChBE,GAAOE,KAAUH,GAAQH,IAASC,GAAO,CAC9C,GAAI9D,EAAI1c,EAAIrF,KAAO+hB,EAAI1c,EAAIrF,EAAIgmB,GAAM,CAEnC,IADA,IAAII,GAAK,EACFA,GAAKD,GAAMpE,EAAI1c,EAAI+gB,MAAQrE,EAAI1c,EAAI+gB,GAAKJ,KAAQI,IAEvD,GAAIA,GAAKpmB,EAAG,CAEV,GADAA,EAAIomB,GAAI3lB,EAAIulB,EACRI,GAAKH,EACP,MACF,IAAII,GAAMpmB,KAAKC,IAAI8lB,EAAKI,GAAK,GACzBE,GAAK,EACT,IAAShI,EAAI,EAAGA,EAAI+H,KAAO/H,EAAG,CAC5B,IAAIiI,GAAKlhB,EAAI2gB,EAAM1H,EAAI,MAAQ,MAE3BS,GAAKwH,GADCnB,EAAKmB,IACK,MAAQ,MACxBxH,GAAKuH,KACPA,GAAKvH,GAAI8G,EAAQU,GACrB,CACF,CACF,CAEAP,IADAJ,EAAOC,IAAOA,EAAQT,EAAKQ,IACL,MAAQ,KAChC,CAEF,GAAInlB,EAAG,CACLyhB,EAAKG,KAAQ,UAAY5D,EAAMze,IAAM,GAAK4e,EAAMne,GAChD,IAAI+lB,GAAiB,GAAX/H,EAAMze,GAASymB,GAAiB,GAAX7H,EAAMne,GACrC4L,GAAM6R,EAAKsI,IAAOrI,EAAKsI,MACrBtE,EAAG,IAAMqE,MACTpE,EAAGqE,IACLf,EAAKrgB,EAAIrF,IACPylB,CACJ,MACEvD,EAAKG,KAAQN,EAAI1c,KACf8c,EAAGJ,EAAI1c,GAEb,CACF,CACAyc,EAAME,EAAKD,EAAKtZ,EAAGwc,EAAK/C,EAAMC,EAAIC,EAAI/V,EAAIgW,EAAIC,EAAIjd,EAAIid,EAAIR,IACrDmD,GAAa,EAANnD,IACVA,EAAMD,EAAMpZ,EAAGqZ,EAAM,EAAGtB,GAC5B,CACA,OAAOP,EAAIH,EAAG,EAAG8E,EAAM5E,EAAK8B,GAAO+C,EACrC,CAsBS6B,CADY3E,EAsBN9S,EArBiB,OADN0V,EAsBLJ,GArBEvW,MAAgB,EAAI2W,EAAI3W,MAAkB,MAAX2W,EAAIjnB,IAAcuC,KAAKilB,KAAuD,IAAlDjlB,KAAKE,IAAI,EAAGF,KAAKC,IAAI,GAAID,KAAK0mB,IAAI5E,EAAIzc,WAAmB,GAAKqf,EAAIjnB,IAAKknB,EAAKC,GAAOC,IAsBnK,OAhBkBzN,EAgBP5W,EAfOikB,EAAa,KAA3BD,EAeUF,EAfHvW,OAAwB,EAAIyW,EAAK,EAAI,EAAW,IAAPA,EAAW,EAAI,EACnEpN,EAAE,GAAK,IAAKA,EAAE,GAAKqN,GAAO,GAAKA,EAAM,GAAK,EAAIA,EAAM,GANzC,SAAUjkB,EAAGd,EAAGqH,GAC3B,KAAOA,IAAKrH,EACVc,EAAEd,GAAKqH,EAAGA,KAAO,CACrB,CAiBuB4f,CAAOnmB,EAAGA,EAAE6E,OAAS,EAAG1F,EAAEa,KAAMA,CACvD,CAcApD,EAAOD,QAAU,CACf6X,SATF,SAAkB4R,EAAK7Y,GACrB,OAAOsW,EAASuC,EAAK,CAAE7Y,SACzB,EAQEkH,WANF,SAAoB2R,EAAKtK,GACvB,OAVkBtN,EAUA4X,EAVMze,EAUD,IAAIwL,WAAW2I,GAre5B,SAAUwF,EAAK8E,EAAK/B,GAC9B,IAAIgC,EAAK/E,EAAIzc,OACb,IAAKwhB,GAAMhC,IAAOA,EAAG9kB,GAAK8mB,EAAK,EAC7B,OAAOD,GAAO,IAAI7T,EAAG,GACvB,IAAI+T,GAASF,GAAO/B,EAChBkC,GAAQlC,GAAMA,EAAGzf,EAChByf,IACHA,EAAK,CAAC,GACH+B,IACHA,EAAM,IAAI7T,EAAQ,EAAL8T,IACf,IAAIG,EAAO,SAAUC,GACnB,IAAInS,EAAK8R,EAAIvhB,OACb,GAAI4hB,EAAKnS,EAAI,CACX,IAAIoS,EAAO,IAAInU,EAAG/S,KAAKE,IAAS,EAAL4U,EAAQmS,IACnCC,EAAKvlB,IAAIilB,GACTA,EAAMM,CACR,CACF,EACIlF,EAAQ6C,EAAGxE,GAAK,EAAGwB,EAAMgD,EAAGzkB,GAAK,EAAG+mB,EAAKtC,EAAGnlB,GAAK,EAAG6jB,EAAKsB,EAAG9kB,EAAG0jB,EAAKoB,EAAGrkB,EAAG4mB,EAAMvC,EAAGxF,EAAGgI,EAAMxC,EAAG5E,EAC/FqH,EAAY,EAALT,EACX,EAAG,CACD,IAAKtD,EAAI,CACPsB,EAAGxE,EAAI2B,EAAQpC,EAAKkC,EAAKD,EAAK,GAC9B,IAAIlL,EAAOiJ,EAAKkC,EAAKD,EAAM,EAAG,GAE9B,GADAA,GAAO,GACFlL,EAAM,CACT,IAAuB5W,EAAI+hB,GAAvBhiB,EAAIigB,EAAK8B,GAAO,GAAe,GAAKC,EAAIhiB,EAAI,IAAM,EAAGQ,EAAIR,EAAIC,EACjE,GAAIO,EAAIumB,EAAI,CACV,GAAIE,EACF,KAAM,iBACR,KACF,CACID,GACFE,EAAKG,EAAKpnB,GACZ6mB,EAAIjlB,IAAImgB,EAAI9gB,SAASlB,EAAGQ,GAAI6mB,GAC5BtC,EAAGnlB,EAAIynB,GAAMpnB,EAAG8kB,EAAGzkB,EAAIyhB,EAAU,EAAJvhB,EAC7B,QACF,CAAO,GAAa,IAATqW,EACT4M,EAAK9D,EAAMgE,EAAK9D,EAAMyH,EAAM,EAAGC,EAAM,MAClC,IAAa,IAAT1Q,EAoCP,KAAM,qBAnCN,IAAI4Q,EAAO3H,EAAKkC,EAAKD,EAAK,IAAM,IAAK2F,EAAQ5H,EAAKkC,EAAKD,EAAM,GAAI,IAAM,EACnE4F,EAAKF,EAAO3H,EAAKkC,EAAKD,EAAM,EAAG,IAAM,EACzCA,GAAO,GAGP,IAFA,IAAI6F,EAAM,IAAI3U,EAAG0U,GACbE,EAAM,IAAI5U,EAAG,IACR3N,EAAI,EAAGA,EAAIoiB,IAASpiB,EAC3BuiB,EAAIxJ,EAAK/Y,IAAMwa,EAAKkC,EAAKD,EAAU,EAAJzc,EAAO,GAExCyc,GAAe,EAAR2F,EACP,IAAII,EAAM1nB,EAAIynB,GAAME,GAAU,GAAKD,GAAO,EACtCE,EAAMjJ,EAAK8I,EAAKC,EAAK,GACzB,IAASxiB,EAAI,EAAGA,EAAIqiB,GAAK,CACvB,IAEI3nB,EAFAN,EAAIsoB,EAAIlI,EAAKkC,EAAKD,EAAKgG,IAG3B,GAFAhG,GAAW,GAAJriB,GACHM,EAAIN,IAAM,GACN,GACNkoB,EAAItiB,KAAOtF,MACN,CACL,IAAIsX,EAAI,EAAG6I,EAAI,EAOf,IANU,KAANngB,GACFmgB,EAAI,EAAIL,EAAKkC,EAAKD,EAAK,GAAIA,GAAO,EAAGzK,EAAIsQ,EAAItiB,EAAI,IACpC,KAANtF,GACPmgB,EAAI,EAAIL,EAAKkC,EAAKD,EAAK,GAAIA,GAAO,GACrB,KAAN/hB,IACPmgB,EAAI,GAAKL,EAAKkC,EAAKD,EAAK,KAAMA,GAAO,GAChC5B,KACLyH,EAAItiB,KAAOgS,CACf,CACF,CACA,IAAI2Q,EAAKL,EAAI1mB,SAAS,EAAGumB,GAAOxG,EAAK2G,EAAI1mB,SAASumB,GAClDH,EAAMlnB,EAAI6nB,GACVV,EAAMnnB,EAAI6gB,GACVwC,EAAK1E,EAAKkJ,EAAIX,EAAK,GACnB3D,EAAK5E,EAAKkC,EAAIsG,EAAK,EAEO,CAC5B,GAAIxF,EAAMyF,EAAM,CACd,GAAIP,EACF,KAAM,iBACR,KACF,CACF,CACID,GACFE,EAAKG,EAAK,QAGZ,IAFA,IAAIa,GAAO,GAAKZ,GAAO,EAAGa,GAAO,GAAKZ,GAAO,EACzCa,EAAOrG,GACFqG,EAAOrG,EAAK,CACnB,IAAoCsG,GAAhC/Q,EAAImM,EAAGzD,EAAOgC,EAAKD,GAAOmG,MAAkB,EAEhD,IADAnG,GAAW,GAAJzK,GACGkQ,EAAM,CACd,GAAIP,EACF,KAAM,iBACR,KACF,CACA,IAAK3P,EACH,KAAM,yBACR,GAAI+Q,EAAM,IACRvB,EAAIO,KAAQgB,MACT,IAAY,MAARA,EAAa,CACpBD,EAAOrG,EAAK0B,EAAK,KACjB,KACF,CACE,IAAIzQ,EAAMqV,EAAM,IAChB,GAAIA,EAAM,IAAK,CACb,IAAmBzoB,EAAIue,EAAnB7Y,EAAI+iB,EAAM,KACdrV,EAAM8M,EAAKkC,EAAKD,GAAM,GAAKniB,GAAK,GAAK6e,EAAGnZ,GACxCyc,GAAOniB,CACT,CACA,IAAIc,EAAIijB,EAAG3D,EAAOgC,EAAKD,GAAOoG,GAAMG,GAAO5nB,IAAM,EACjD,IAAKA,EACH,KAAM,mBAOR,GANAqhB,GAAW,GAAJrhB,EACHugB,EAAKrC,EAAG0J,IACRA,GAAO,IACL1oB,EAAIwe,EAAKkK,IACbrH,GAAMjB,EAAOgC,EAAKD,IAAQ,GAAKniB,GAAK,EAAGmiB,GAAOniB,GAE5CmiB,EAAMyF,EAAM,CACd,GAAIP,EACF,KAAM,iBACR,KACF,CACID,GACFE,EAAKG,EAAK,QAEZ,IADA,IAAItjB,GAAMsjB,EAAKrU,EACRqU,EAAKtjB,GAAKsjB,GAAM,EACrBP,EAAIO,GAAMP,EAAIO,EAAKpG,GACnB6F,EAAIO,EAAK,GAAKP,EAAIO,EAAK,EAAIpG,GAC3B6F,EAAIO,EAAK,GAAKP,EAAIO,EAAK,EAAIpG,GAC3B6F,EAAIO,EAAK,GAAKP,EAAIO,EAAK,EAAIpG,GAE7BoG,EAAKtjB,EACP,CACF,CACAghB,EAAG9kB,EAAIwjB,EAAIsB,EAAGzkB,EAAI8nB,EAAMrD,EAAGnlB,EAAIynB,EAC3B5D,IACFvB,EAAQ,EAAG6C,EAAGxF,EAAI+H,EAAKvC,EAAGrkB,EAAIijB,EAAIoB,EAAG5E,EAAIoH,EAC7C,QAAUrF,GACV,OAAOmF,IAAOP,EAAIvhB,OAASuhB,EAAM5G,EAAI4G,EAAK,EAAGO,EAC/C,CAiVSkB,EAfC,SAAU7nB,GAClB,GAAoB,IAAR,GAAPA,EAAE,KAAkBA,EAAE,KAAO,EAAI,IAAMA,EAAE,IAAM,EAAIA,EAAE,IAAM,GAC9D,KAAM,oBACR,GAAW,GAAPA,EAAE,GACJ,KAAM,sDACV,CAUgB8nB,CAAItZ,GAAOA,EAAKhO,SAAS,GAAI,IAAKmH,GADlD,IAAoB6G,EAAM7G,CAW1B,E,wsBCvmBIogB,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBpd,IAAjBqd,EACH,OAAOA,EAAavrB,QAGrB,IAAIC,EAASmrB,EAAyBE,GAAY,CAGjDtrB,QAAS,CAAC,GAOX,OAHAwrB,EAAoBF,GAAUrrB,EAAQA,EAAOD,QAASqrB,GAG/CprB,EAAOD,OACf,CCnB0BqrB,CAAoB,K,MDF1CD,C","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","offset","getUint32","static","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","rgbaToHSLA","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","iterateWithColors","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","async","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","svg","size","includes","TextEncoder","rasterize","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","indexOf","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","zlibSync","opts","adler","lv","fl2","opt","pre","post","st","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","buf","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file From 63229e276e478dba1119a98a1de9d9766a571e9f Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Wed, 1 Jun 2022 10:27:25 +0200 Subject: [PATCH 097/120] chore: bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 38ad52f..9de8356 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "imagescript", - "version": "1.2.6", + "version": "1.2.15", "description": "zero-dependency javascript image manipulation", "main": "ImageScript.js", "types": "ImageScript.d.ts", From 2fd99f3d4a582070d26ac66e353d78670993892a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 27 Nov 2022 20:52:38 +0000 Subject: [PATCH 098/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index ff01b3e..d156e8b 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(()=>{return t={860:(t,e,r)=>{const i=r(205),n=r(3),s=r(584),o=r(338),{version:a}=r(147),h=r(820),l=r(501),f=r(193);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},3:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},546:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},205:(t,e,r)=>{const i=r(3),n=r(546),{compress:s,decompress:o}=r(223),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},584:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},501:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},338:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},193:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},223:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return B(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=B(g,d,t.subarray(p,m)):(g[p]=c,d=B(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=B(g,d+1,D))}return R(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var B=new e(z),C=new e(19),H=0;H>>4)<16)B[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=B[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)B[H++]=$}}var P=B.subarray(0,N),Z=B.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},147:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.6","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","types":"ImageScript.d.ts","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"Mathis Mensing ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(860);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(()=>{return t={860:(t,e,r)=>{const i=r(205),n=r(3),s=r(584),o=r(338),{version:a}=r(147),h=r(820),l=r(501),f=r(193);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},3:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},546:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},205:(t,e,r)=>{const i=r(3),n=r(546),{compress:s,decompress:o}=r(223),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},584:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},501:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},338:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},193:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},223:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return B(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=B(g,d,t.subarray(p,m)):(g[p]=c,d=B(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=B(g,d+1,D))}return R(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var B=new e(z),C=new e(19),H=0;H>>4)<16)B[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=B[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)B[H++]=$}}var P=B.subarray(0,N),Z=B.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},147:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.15","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","types":"ImageScript.d.ts","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"Mathis Mensing ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(860);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index cbab1a4..dc367f6 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","offset","getUint32","static","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","rgbaToHSLA","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","iterateWithColors","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","async","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","svg","size","includes","TextEncoder","rasterize","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","indexOf","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","zlibSync","opts","adler","lv","fl2","opt","pre","post","st","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","buf","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","offset","getUint32","static","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","rgbaToHSLA","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","iterateWithColors","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","async","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","svg","size","includes","TextEncoder","rasterize","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","indexOf","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","zlibSync","opts","adler","lv","fl2","opt","pre","post","st","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","buf","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file From 1df53656c647059b5b2dab7b0c6343f3e67180e1 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Wed, 1 Jun 2022 10:27:25 +0200 Subject: [PATCH 099/120] fix: TextLayout wrapHardBreaks (cherry picked from commit c1f369934bec5c5fcedf3cd9eaf22d68e7dfe994) --- ImageScript.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ImageScript.js b/ImageScript.js index 5667b1d..3c15b08 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1717,7 +1717,7 @@ class TextLayout { if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign)) throw new RangeError('Invalid horizontalAlign'); - this.wrapHardBreaks = wrapHardBreaks || true; + this.wrapHardBreaks = typeof wrapHardBreaks === 'undefined' ? true : wrapHardBreaks; if (typeof this.wrapHardBreaks !== 'boolean') throw new TypeError('Invalid wrapHardBreaks'); } From 8c2a049ce6baa6353b8db6deb6ff601bbc896a9f Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Thu, 16 Feb 2023 22:07:25 +0100 Subject: [PATCH 100/120] fix: adjust license for dual licensing (cherry picked from commit 7493eddc71552abc51751e671f1ad90689031976) --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9de8356..5321073 100644 --- a/package.json +++ b/package.json @@ -30,12 +30,12 @@ "thumbnail" ], "author": "Mathis Mensing ", - "license": "GPL-3.0-or-later", + "license": "(AGPL-3.0-or-later OR MIT)", "bugs": { "url": "https://github.com/matmen/ImageScript/issues" }, "homepage": "https://github.com/matmen/ImageScript#readme", "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" } } From 27929460d0b467bafdaf329d111b7974b50f8a19 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Thu, 16 Feb 2023 22:09:01 +0100 Subject: [PATCH 101/120] 1.2.16 (cherry picked from commit c80a3bb7ca026177099fec51dd106f33c0155868) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5321073..086d1f9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "imagescript", - "version": "1.2.15", + "version": "1.2.16", "description": "zero-dependency javascript image manipulation", "main": "ImageScript.js", "types": "ImageScript.d.ts", From 867f1cc53c13da90166ca8a6de2fbfe11202c7f5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 16 Feb 2023 21:14:30 +0000 Subject: [PATCH 102/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index d156e8b..a3b65f0 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(()=>{return t={860:(t,e,r)=>{const i=r(205),n=r(3),s=r(584),o=r(338),{version:a}=r(147),h=r(820),l=r(501),f=r(193);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},3:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},546:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},205:(t,e,r)=>{const i=r(3),n=r(546),{compress:s,decompress:o}=r(223),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},584:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},501:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},338:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},193:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},223:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},U=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},I=function(t){return(t>>3|0)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return B(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=B(g,d,t.subarray(p,m)):(g[p]=c,d=B(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=B(g,d+1,D))}return R(u,0,h+I(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=I(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var B=new e(z),C=new e(19),H=0;H>>4)<16)B[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=B[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)B[H++]=$}}var P=B.subarray(0,N),Z=B.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=U(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},147:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.15","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","types":"ImageScript.d.ts","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"Mathis Mensing ","license":"GPL-3.0-or-later","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=12.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(860);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(()=>{return t={860:(t,e,r)=>{const i=r(205),n=r(3),s=r(584),o=r(338),{version:a}=r(147),h=r(820),l=r(501),f=r(193);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},3:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},546:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},205:(t,e,r)=>{const i=r(3),n=r(546),{compress:s,decompress:o}=r(223),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},584:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},501:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},338:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},193:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},223:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},I=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},U=function(t){return(t>>3|0)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return B(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);t.exports={compress:function(t,o){return function(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(c=2,_=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=B(g,d,t.subarray(p,m)):(g[p]=c,d=B(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=B(g,d+1,D))}return R(u,0,h+U(d)+l)}(h=t,null==(l=o).level?6:l.level,null==l.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(h.length)))):12+l.mem,c,_,!u));return g=m,d=o.level,p=0===d?0:d<6?1:9===d?3:2,g[0]=120,g[1]=p<<6|(p?32-2*p:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}(t,{level:o})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=U(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var B=new e(z),C=new e(19),H=0;H>>4)<16)B[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=B[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)B[H++]=$}}var P=B.subarray(0,N),Z=B.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=I(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},147:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","types":"ImageScript.d.ts","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"Mathis Mensing ","license":"(AGPL-3.0-or-later OR MIT)","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=14.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(860);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index dc367f6..8709243 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"file":"ImageScript.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,IAEzBD,EAAkB,YAAIC,GACvB,CATD,CASGK,MAAM,KACT,O,iBCVA,MAAMC,EAAM,EAAQ,KACdC,EAAM,EAAQ,GACdC,EAAS,EAAQ,KACjBC,EAAS,EAAQ,MACjB,QAACC,GAAW,EAAQ,KACpBC,EAAU,EAAQ,KAClBC,EAAU,EAAQ,KAClBC,EAAU,EAAQ,KAYxB,MAAMC,EAOFC,YAAYC,EAAOC,GAIf,GAFAA,IAAWA,GADXD,IAAUA,GAGE,EACR,MAAM,IAAIE,WAAW,yCACzB,GAAID,EAAS,EACT,MAAM,IAAIC,WAAW,yCAGzBC,KAAKC,UAAYJ,EAEjBG,KAAKE,WAAaJ,EAElBE,KAAKG,WAAa,IAAIC,YAAYP,EAAQC,EAAS,GAEnDE,KAAKK,SAAW,IAAIC,SAASN,KAAKG,YAElCH,KAAKO,QAAU,IAAIC,YAAYR,KAAKG,YAKpCH,KAAKS,OAAS,IAAIC,kBAAkBV,KAAKG,WAC7C,CAMAQ,WACI,MAAO,SAASX,KAAKH,SAASG,KAAKF,SACvC,CAMID,YACA,OAAOG,KAAKC,SAChB,CAMIH,aACA,OAAOE,KAAKE,UAChB,CAOA,EAAGU,OAAOC,YACN,IAAK,IAAIC,EAAI,EAAGA,GAAKd,KAAKF,OAAQgB,IAC9B,IAAK,IAAIC,EAAI,EAAGA,GAAKf,KAAKH,MAAOkB,SACvB,CAACA,EAAGD,EAGtB,CAMA,qBACI,IAAIE,EAAS,EACb,IAAK,IAAIF,EAAI,EAAGA,GAAKd,KAAKF,OAAQgB,IAC9B,IAAK,IAAIC,EAAI,EAAGA,GAAKf,KAAKH,MAAOkB,SACvB,CAACA,EAAGD,EAAGd,KAAKK,SAASY,UAAUD,GAAQ,IAC7CA,GAAU,CAGtB,CAUAE,mBAAmBC,EAAGC,EAAGC,EAAGC,GACxB,QAAc,IAAJH,IAAa,IAAY,IAAJC,IAAa,IAAY,IAAJC,IAAa,EAAU,IAAJC,KAAe,CAC1F,CASAJ,kBAAkBC,EAAGC,EAAGC,GACpB,OAAO1B,EAAM4B,YAAYJ,EAAGC,EAAGC,EAAG,IACtC,CAUAH,mBAAmBM,EAAGC,EAAGC,EAAGJ,GAMxB,IAAIH,EAAGC,EAAGC,EAEV,GAPAG,GAAK,EACLC,EAAIE,KAAKC,IAAI,EAAGD,KAAKE,IAAI,EAAGJ,IAC5BC,EAAIC,KAAKC,IAAI,EAAGD,KAAKE,IAAI,EAAGH,IAC5BJ,EAAIK,KAAKC,IAAI,EAAGD,KAAKE,IAAI,EAAGP,IAIlB,IAANG,EACAN,EAAIC,EAAIC,EAAIK,MACT,CACH,MAAMI,EAAU,CAACC,EAAGC,EAAGC,KACfA,EAAI,IAAGA,GAAK,GACZA,EAAI,IAAGA,GAAK,GACZA,EAAI,EAAI,EAAUF,EAAc,GAATC,EAAID,GAASE,EACpCA,EAAI,GAAcD,EAClBC,EAAI,EAAI,EAAUF,GAAKC,EAAID,IAAM,EAAI,EAAIE,GAAK,EAC3CF,GAGLC,EAAIN,EAAI,GAAMA,GAAK,EAAID,GAAKC,EAAID,EAAIC,EAAID,EACxCM,EAAI,EAAIL,EAAIM,EAElBb,EAAIW,EAAQC,EAAGC,EAAGR,EAAI,EAAI,GAC1BJ,EAAIU,EAAQC,EAAGC,EAAGR,GAClBH,EAAIS,EAAQC,EAAGC,EAAGR,EAAI,EAAI,EAC9B,CAEA,OAAO7B,EAAM4B,YAAgB,IAAJJ,EAAa,IAAJC,EAAa,IAAJC,EAAa,IAAJC,EACxD,CASAJ,kBAAkBM,EAAGC,EAAGC,GACpB,OAAO/B,EAAMuC,YAAYV,EAAGC,EAAGC,EAAG,EACtC,CAUAR,kBAAkBC,EAAGC,EAAGC,EAAGC,GACvBH,GAAK,IACLC,GAAK,IACLC,GAAK,IAEL,MAAMQ,EAAMF,KAAKE,IAAIV,EAAGC,EAAGC,GAAIO,EAAMD,KAAKC,IAAIT,EAAGC,EAAGC,GACpD,IAAIG,EAAGC,EAAGC,GAAKG,EAAMD,GAAO,EAE5B,GAAIC,IAAQD,EACRJ,EAAIC,EAAI,MACL,CACH,MAAMU,EAAIN,EAAMD,EAEhB,OADAH,EAAIC,EAAI,GAAMS,GAAK,EAAIN,EAAMD,GAAOO,GAAKN,EAAMD,GACvCC,GACJ,KAAKV,EACDK,GAAKJ,EAAIC,GAAKc,GAAKf,EAAIC,EAAI,EAAI,GAC/B,MACJ,KAAKD,EACDI,GAAKH,EAAIF,GAAKgB,EAAI,EAClB,MACJ,KAAKd,EACDG,GAAKL,EAAIC,GAAKe,EAAI,EAI1BX,GAAK,CACT,CAEA,MAAO,CAACA,EAAGC,EAAGC,EAAGJ,EAAI,IACzB,CAOAJ,mBAAmBkB,GACf,MAAO,CAAEA,GAAS,GAAM,IAAOA,GAAS,GAAM,IAAOA,GAAS,EAAK,IAAc,IAARA,EAC7E,CAOAlB,kBAAkBkB,GACd,OAAOzC,EAAM0C,YAAYD,GAAOE,MAAM,EAAG,EAC7C,CAQAC,WAAWxB,EAAGD,GAEV,OADAd,KAAKwC,qBAAqBzB,EAAGD,GACtBd,KAAKK,SAASY,UAAiD,MAAnCH,EAAI,GAAKd,KAAKH,SAAWkB,EAAI,KAAS,EAC7E,CAQA0B,UAAU1B,EAAGD,GACTd,KAAKwC,qBAAqBzB,EAAGD,GAC7B,MAAM4B,EAA6C,MAAnC5B,EAAI,GAAKd,KAAKH,SAAWkB,EAAI,IAC7C,OAAOf,KAAKS,OAAOkC,SAASD,EAAKA,EAAM,EAC3C,CAQAE,WAAW7B,EAAGD,EAAG+B,GAKb,OAJA9B,IAAMA,EACND,IAAMA,EACNd,KAAKwC,qBAAqBzB,EAAGD,GAC7Bd,KAAK8C,cAAc/B,EAAGD,EAAG+B,GAClB7C,IACX,CAQA8C,cAAc/B,EAAGD,EAAG+B,GAChB7C,KAAKK,SAAS0C,UAA6C,IAAjCjC,EAAI,GAAKd,KAAKH,OAASkB,EAAI,IAAS8B,GAAY,EAC9E,CAOAL,qBAAqBzB,EAAGD,GACpB,GAAIkC,MAAMjC,GAAI,MAAM,IAAIkC,UAAU,gCAAgClC,MAClE,GAAIiC,MAAMlC,GAAI,MAAM,IAAImC,UAAU,gCAAgCnC,MAClE,GAAIC,EAAI,EACJ,MAAM,IAAIhB,WAAW,GAAGJ,EAAMuD,wBAAwBnC,QAC1D,GAAIA,EAAIf,KAAKH,MACT,MAAM,IAAIE,WAAW,GAAGJ,EAAMuD,wBAAwBnC,aAAaf,KAAKH,UAC5E,GAAIiB,EAAI,EACJ,MAAM,IAAIf,WAAW,GAAGJ,EAAMuD,wBAAwBpC,QAC1D,GAAIA,EAAId,KAAKF,OACT,MAAM,IAAIC,WAAW,GAAGJ,EAAMuD,wBAAwBpC,cAAcd,KAAKF,UACjF,CAKWoD,+BACP,MAAO,6DACX,CAcAC,KAAKf,GAED,GAAa,mBADOA,EAEhBpC,KAAKK,SAAS0C,UAAU,EAAGX,GAAO,GAClCpC,KAAKO,QAAQ4C,KAAKnD,KAAKO,QAAQ,QAC5B,CACH,IAAIS,EAAS,EACb,IAAK,IAAIF,EAAI,EAAGA,GAAKd,KAAKF,OAAQgB,IAC9B,IAAK,IAAIC,EAAI,EAAGA,GAAKf,KAAKH,MAAOkB,IAC7Bf,KAAKK,SAAS0C,UAAU/B,EAAQoB,EAAMrB,EAAGD,IAAI,GAC7CE,GAAU,CAGtB,CAEA,OAAOhB,IACX,CAMAoD,QACI,MAAMC,EAAQ,IAAI1D,EAAMK,KAAKH,MAAOG,KAAKF,QAEzC,OADAuD,EAAM5C,OAAO6C,IAAItD,KAAKS,QACf4C,CACX,CAMWE,qCACP,MAAO,yBACX,CAMWC,yBACP,OAAQ,CACZ,CAQAC,MAAMC,EAAQC,EAAOhE,EAAM4D,yBACvB,MAAMF,EAAQrD,KAAK4D,UAAUF,EAAQC,GACrC,OAAO3D,KAAK6D,UAAUR,EAC1B,CAGAO,UAAUF,EAAQC,EAAOhE,EAAM4D,yBAC3B,OAAe,IAAXG,EAAqB1D,KAClBA,KAAK8D,WAAW9D,KAAKH,MAAQ6D,EAAQ1D,KAAKF,OAAS4D,EAAQC,EACtE,CAUAI,OAAOlE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBAC/B,MAAMF,EAAQrD,KAAK8D,WAAWjE,EAAOC,EAAQ6D,GAC7C,OAAO3D,KAAK6D,UAAUR,EAC1B,CAUAW,QAAQnE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBAChC,MAAMU,EAAcpE,EAAQC,EAASE,KAAKH,MAAQG,KAAKF,OAASA,EAASE,KAAKF,OAASD,EAAQG,KAAKH,MACpG,OAAOG,KAAKyD,MAAMQ,EAAaN,EACnC,CAUAO,IAAIrE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBAC5B,MAAMY,EAAS,IAAIxE,EAAME,EAAOC,GAGhC,OAFAE,KAAKgE,QAAQnE,EAAOC,EAAQ6D,GAC5BQ,EAAOC,UAAUpE,MAAOH,EAAQG,KAAKH,OAAS,GAAIC,EAASE,KAAKF,QAAU,GACnEE,KAAK6D,UAAUM,EAC1B,CAUAE,MAAMxE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBAC9B,MAAMU,EAAcpE,EAAQC,EAASE,KAAKH,MAAQG,KAAKF,OAASD,EAAQG,KAAKH,MAAQC,EAASE,KAAKF,OAC7FqE,EAASnE,KAAKyD,MAAMQ,EAAaN,GACvC,OAAOQ,EAAOG,MAAMH,EAAOtE,MAAQA,GAAS,GAAIsE,EAAOrE,OAASA,GAAU,EAAGD,EAAOC,EACxF,CAGAgE,WAAWjE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBACnC,GAAI1D,IAAUF,EAAM6D,aAAe1D,IAAWH,EAAM6D,YAAa,MAAM,IAAIe,MAAM,yEAMjF,GALS1E,IAAUF,EAAM6D,YAAa3D,EAAQG,KAAKH,MAAQG,KAAKF,OAASA,EAChEA,IAAWH,EAAM6D,cAAa1D,EAASE,KAAKF,OAASE,KAAKH,MAAQA,GAE3EA,EAAQ8B,KAAK6C,MAAM3E,GACnBC,EAAS6B,KAAK6C,MAAM1E,GAChBD,EAAQ,EACR,MAAM,IAAIE,WAAW,yCACzB,GAAID,EAAS,EACT,MAAM,IAAIC,WAAW,yCAEzB,IAAIsD,EACJ,GAAIM,IAAShE,EAAM4D,wBAEd,MAAM,IAAIgB,MAAM,uBAErB,OAHIlB,EAAQrD,KAAKyE,4BAA4B5E,EAAOC,GAG7CuD,CACX,CAOAoB,4BAA4B5E,EAAOC,GAC/B,MAAMuD,EAAQ,IAAIrD,KAAKJ,YAAYC,EAAOC,GAE1C,IAAK,IAAIgB,EAAI,EAAGA,EAAIhB,EAAQgB,IACxB,IAAK,IAAIC,EAAI,EAAGA,EAAIlB,EAAOkB,IAAK,CAC5B,MAAM2D,EAAO/C,KAAK6C,MAAO1D,EAAId,KAAKF,OAAUA,GACtC6E,EAAOhD,KAAK6C,MAAOzD,EAAIf,KAAKH,MAASA,GAErC+E,EAA4B,GAAjB9D,EAAIjB,EAAQkB,GACvB8D,EAAsC,GAA5BH,EAAO1E,KAAKH,MAAQ8E,GAEpCtB,EAAMhD,SAAS0C,UAAU6B,EAAS5E,KAAKK,SAASY,UAAU4D,GAAQ,IAAQ,EAC9E,CAGJ,OAAOxB,CACX,CAUAiB,KAAKvD,EAAGD,EAAGjB,EAAOC,GAId,OAHID,EAAQG,KAAKH,QAAOA,EAAQG,KAAKH,OACjCC,EAASE,KAAKF,SAAQA,EAASE,KAAKF,QAEjCE,KAAK6D,UAAU7D,KAAK8E,WAAW/D,IAAKD,IAAKjB,IAASC,GAC7D,CAUAgF,SAAS/D,EAAGD,EAAGjB,EAAOC,GAClBiB,IAAMA,EACND,IAAMA,EAEN,MAAMuC,EAAQ,IAAIrD,KAAKJ,YAAYC,EAAOC,GAE1C,IAAK,IAAIiF,EAAK,EAAGA,EAAKjF,EAAQiF,IAAM,CAChC,MAAMrC,GAAOqC,EAAKjE,GAAKd,KAAKH,MAAQkB,EACpCsC,EAAM9C,QAAQ+C,IAAItD,KAAKO,QAAQoC,SAASD,EAAKA,EAAM7C,GAAQkF,EAAKlF,EACpE,CAEA,OAAOwD,CACX,CAWA2B,QAAQjE,EAAGD,EAAGjB,EAAOC,EAAQsC,GAMzB,GALArB,KAAOA,EAAI,GACXD,KAAOA,EAAI,GACXjB,IAAUA,EACVC,IAAWA,EAEU,mBAAVsC,EAYJ,OAAOpC,KAAKiF,aAAalE,EAAGD,EAAGjB,EAAOC,EAAQsC,GAXjD,IAAK,IAAI2C,EAAK,EAAGA,GAAMjF,EAAQiF,IAC3B,IAAK,IAAIG,EAAK,EAAGA,GAAMrF,EAAOqF,IAAM,CAChC,MAAMC,EAAKD,EAAKnE,EACVqE,EAAKL,EAAKjE,EAChB,GAAIa,KAAKC,IAAIuD,EAAIC,GAAM,GAAKD,EAAKnF,KAAKH,OAASuF,EAAKpF,KAAKF,OACrD,SAEJ,MAAMuF,EAAKjD,EAAM8C,EAAIH,GACrB/E,KAAK8C,cAAcqC,EAAIC,EAAIC,EAC/B,CAIR,OAAOrF,IACX,CAUAiF,aAAalE,EAAGD,EAAGjB,EAAOC,EAAQsC,GAC1BrB,EAAI,IACJlB,GAASkB,EACTA,EAAI,GAGJD,EAAI,IACJhB,GAAUgB,EACVA,EAAI,GAGR,MAAMwE,EAAQ3D,KAAKE,IAAIF,KAAKC,IAAIb,EAAIlB,EAAOG,KAAKH,OAAQ,GACxD,IAAI0F,EAAOD,EACX,KAAOvE,KAAOwE,GACVvF,KAAKK,SAAS0C,UAAU,GAAKwC,EAAOzE,EAAId,KAAKH,OAAQuC,GACzD,MAAMoD,EAAM,GAAKF,EAAQxE,EAAId,KAAKH,OAC5B4F,EAAQ,GAAK1E,EAAID,EAAId,KAAKH,OAEhC,IAAI6F,EAAS/D,KAAKE,IAAIF,KAAKC,IAAId,EAAIhB,EAAQE,KAAKF,QAAS,GACzD,KAAOgB,IAAM4E,GACT1F,KAAKS,OAAOkF,WAAW,GAAK5E,EAAI2E,EAAS1F,KAAKH,OAAQ4F,EAAOD,GAEjE,OAAOxF,IACX,CAUA4F,WAAW7E,EAAGD,EAAG+E,EAAQzD,GACrB,MAAM0D,EAAaD,GAAU,EAC7B,IAAK,IAAIE,EAAWpE,KAAKE,IAAI,EAAGf,EAAI+E,GAASE,GAAYpE,KAAKC,IAAId,EAAI+E,EAAQ7F,KAAKF,QAASiG,IACxF,IAAK,IAAIC,EAAWrE,KAAKE,IAAI,EAAGd,EAAI8E,GAASG,GAAYrE,KAAKC,IAAIb,EAAI8E,EAAQ7F,KAAKH,OAAQmG,KAClFA,EAAWjF,IAAM,GAAKgF,EAAWjF,IAAM,EAAIgF,GAC5C9F,KAAK8C,cAAckD,EAAUD,EAA2B,mBAAV3D,EAAuBA,EAAM4D,EAAWjF,EAAI8E,EAAQE,EAAWjF,EAAI+E,GAAUzD,GAIvI,OAAOpC,IACX,CAQAiG,WAAWpE,GAAM,EAAOqE,EAAa,GACjC,MACMJ,GADMnE,KAAKE,EAAM,MAAQ,OAAO7B,KAAKH,MAAOG,KAAKF,QAAU,IACvC,EACpBqG,EAAUnG,KAAKH,MAAQ,EACvBuG,EAAUpG,KAAKF,OAAS,EAE9B,IAAK,MAAOiB,EAAGD,KAAMd,KAAM,CACvB,MAAMqG,GAAsBtF,EAAIoF,IAAY,GAAKrF,EAAIsF,IAAY,EAC3DE,EAA8C,IAAjCxF,EAAI,GAAKd,KAAKH,OAASkB,EAAI,IAAU,EACpDsF,EAAqBP,EACrB9F,KAAKS,OAAO6F,GAAY,EACnBJ,IACLlG,KAAKS,OAAO6F,IAAa3E,KAAKE,IAAI,EAAGF,KAAKC,IAAI,EAAG,EAAKyE,EAAqBP,EAAcI,GAAc,KAC/G,CAEA,OAAOlG,IACX,CAQAuG,QAAQA,EAASC,GAAW,GACxB,GAAIxD,MAAMuD,IAAYA,EAAU,EAC5B,MAAM,IAAIxG,WAAW,yBAIzB,OAFAC,KAAKyG,sBAAsBF,EAASC,EAAU,GAEvCxG,IACX,CAQA0G,IAAIC,EAAYH,GAAW,GACvB,GAAIxD,MAAM2D,IAAeA,EAAa,EAClC,MAAM,IAAI5G,WAAW,4BAIzB,OAFAC,KAAKyG,sBAAsBE,EAAYH,EAAU,GAE1CxG,IACX,CAQA4G,MAAMD,EAAYH,GAAW,GACzB,GAAIxD,MAAM2D,IAAeA,EAAa,EAClC,MAAM,IAAI5G,WAAW,4BAIzB,OAFAC,KAAKyG,sBAAsBE,EAAYH,EAAU,GAE1CxG,IACX,CAQA6G,KAAKF,EAAYH,GAAW,GACxB,GAAIxD,MAAM2D,IAAeA,EAAa,EAClC,MAAM,IAAI5G,WAAW,4BAIzB,OAFAC,KAAKyG,sBAAsBE,EAAYH,EAAU,GAE1CxG,IACX,CAQAyG,sBAAsBK,EAAON,EAAUxF,GACnC,IAAK,IAAI+F,EAAI/F,EAAQ+F,EAAI/G,KAAKS,OAAOuG,OAAQD,GAAK,EAC9C/G,KAAKS,OAAOsG,GAAKD,GAASN,EAAW,IAAMxG,KAAKS,OAAOsG,GAC/D,CAQAE,UAAUH,EAAON,GAAW,GACxB,GAAIxD,MAAM8D,IAAUA,EAAQ,EACxB,MAAM,IAAI/G,WAAW,2BAEzB,OAAOC,KAAKmD,MAAK,CAACpC,EAAGD,KACjB,MAAOU,EAAGC,EAAGC,EAAGJ,GAAK3B,EAAMuH,cAAclH,KAAKyC,UAAU1B,EAAGD,IAC3D,OAAOnB,EAAMuC,YAAYV,EAAGC,EAAGqF,GAASN,EAAW,EAAI9E,GAAIJ,EAAE,GAErE,CAQAqF,WAAWG,EAAON,GAAW,GACzB,GAAIxD,MAAM8D,IAAUA,EAAQ,EACxB,MAAM,IAAI/G,WAAW,4BAEzB,OAAOC,KAAKmD,MAAK,CAACpC,EAAGD,KACjB,MAAOU,EAAGC,EAAGC,EAAGJ,GAAK3B,EAAMuH,cAAclH,KAAKyC,UAAU1B,EAAGD,IAC3D,OAAOnB,EAAMuC,YAAYV,EAAGsF,GAASN,EAAW,EAAI/E,GAAIC,EAAGJ,EAAE,GAErE,CASA8C,UAAU+C,EAAQpG,EAAI,EAAGD,EAAI,GACzBC,IAAMA,EACND,IAAMA,EAEN,IAAK,IAAIsG,EAAK,EAAGA,EAAKD,EAAOrH,OAAQsH,IAAM,CACvC,IAAIC,EAAWvG,EAAIsG,EACnB,KAAIC,EAAW,GAAf,CACA,GAAIA,GAAYrH,KAAKF,OAAQ,MAE7B,IAAK,IAAIwH,EAAK,EAAGA,EAAKH,EAAOtH,MAAOyH,IAAM,CACtC,IAAIC,EAAWxG,EAAIuG,EACnB,GAAIC,EAAW,EAAG,SAClB,GAAIA,GAAYvH,KAAKH,MAAO,MAE5B,MAAMmB,EAAS,GAAKuG,EAAWF,EAAWrH,KAAKH,OACzC2H,EAAKL,EAAO9G,SAASY,UAAU,GAAKqG,EAAKF,EAAKD,EAAOtH,QAAQ,GAC7D4H,EAAKzH,KAAKK,SAASY,UAAUD,GAAQ,GAEvB,MAAV,IAALwG,GAAqBxH,KAAKK,SAAS0C,UAAU/B,EAAQwG,GAAI,GACrC,IAAV,IAALA,GAAqBxH,KAAKK,SAAS0C,UAAU/B,EAAQyG,GAAI,GAC9DzH,KAAKK,SAAS0C,UAAU/B,EAAQrB,EAAM+H,gBAAgBF,EAAIC,IAAK,EACxE,CAf0B,CAgB9B,CAEA,OAAOzH,IACX,CAQAkB,uBAAuBsG,EAAIC,GACvB,MAAME,EAAU,IAALH,EACLI,EAAQD,EAAK,EACbE,EAAY,IAAMF,EAIxB,OAAc,IAHHC,GAASJ,IAAO,IAAMK,GAAaJ,IAAO,KAAQ,IAGtC,IAAY,IADxBG,GAASJ,GAAM,GAAK,KAAQK,GAAaJ,GAAM,GAAK,MAAU,IAC7B,IAAY,IAF7CG,GAASJ,GAAM,EAAI,KAAQK,GAAaJ,GAAM,EAAI,MAAU,IAEN,EAAgC,IAA1B9F,KAAKE,IAAI8F,EAAS,IAALF,EACxF,CAMAK,SACI,IAAK,MAAO/G,EAAGD,EAAGsB,KAAUpC,KAAK+H,oBAC7B/H,KAAK8C,cAAc/B,EAAGD,EAAK,WAAasB,EAAS,WAAuB,IAARA,GAEpE,OAAOpC,IACX,CAMAgI,cACI,IAAK,MAAOjH,EAAGD,EAAGsB,KAAUpC,KAAK+H,oBAAqB,CAClD,MAAOvG,EAAGC,EAAGC,EAAGJ,GAAK3B,EAAMuH,cAAcvH,EAAM0C,YAAYD,IAC3DpC,KAAK8C,cAAc/B,EAAGD,EAAGnB,EAAMuC,YAAYV,EAAGC,EAAG,EAAIC,EAAGJ,GAC5D,CAEA,OAAOtB,IACX,CAMAiI,mBACI,IAAK,MAAOlH,EAAGD,EAAGsB,KAAUpC,KAAK+H,oBAAqB,CAClD,MAAOvG,EAAGC,EAAGC,EAAGJ,GAAK3B,EAAMuH,cAAcvH,EAAM0C,YAAYD,IAC3DpC,KAAK8C,cAAc/B,EAAGD,EAAGnB,EAAMuC,YAAYV,EAAG,EAAIC,EAAGC,EAAGJ,GAC5D,CAEA,OAAOtB,IACX,CAMAkI,YACI,IAAK,MAAOnH,EAAGD,EAAGsB,KAAUpC,KAAK+H,oBAAqB,CAClD,MAAOvG,EAAGC,EAAGC,EAAGJ,GAAK3B,EAAMuH,cAAcvH,EAAM0C,YAAYD,IAC3DpC,KAAK8C,cAAc/B,EAAGD,EAAGnB,EAAMuC,YAAY,EAAIV,EAAGC,EAAGC,EAAGJ,GAC5D,CAEA,OAAOtB,IACX,CAMAmI,SAASC,GACL,IAAK,MAAOrH,EAAGD,EAAGsB,KAAUpC,KAAK+H,oBAAqB,CAClD,MAAOvG,EAAGC,EAAGC,EAAGJ,GAAK3B,EAAMuH,cAAcvH,EAAM0C,YAAYD,IAC3DpC,KAAK8C,cAAc/B,EAAGD,EAAGnB,EAAMuC,YAAYV,EAAI4G,EAAU,IAAK3G,EAAGC,EAAGJ,GACxE,CAEA,OAAOtB,IACX,CAMAqI,eACI,IAAIC,EAAW,CAAC,EAAG,EAAG,GAClBC,EAAU,EACd,IAAK,IAAI7F,EAAM,EAAGA,EAAM1C,KAAKS,OAAOuG,OAAQtE,GAAO,EAAG,CAClD,MAAM8F,EAAOxI,KAAKS,OAAOkC,SAASD,EAAKA,EAAM,GAC7C,IAAK,IAAIqE,EAAI,EAAGA,EAAI,EAAGA,IACnBuB,EAASvB,IAAMyB,EAAKzB,GACxBwB,GAAWC,EAAK,GAAK,GACzB,CAEA,OAAO7I,EAAM4B,eAAe+G,EAASG,KAAIC,GAAKA,EAAIH,IAAU,IAChE,CASAI,cAAcC,GAAc,EAAMC,GAAc,EAAMC,EAAc,IAChE,MAAMC,EAAc,IAAIC,MAAM,QAC9B,IAAK,IAAIjC,EAAI,EAAGA,EAAI/G,KAAKS,OAAOuG,OAAQD,GAAK,EAAG,CAC5C,MAAM3E,EAAQpC,KAAKK,SAASY,UAAU8F,GAAG,IAClCvF,EAAGC,EAAGC,GAAK/B,EAAMuH,cAAcvH,EAAM0C,YAAYD,IAAQqG,KAAIC,MAAa,GAAJA,KAC7E,GAAIE,GAAelH,EAAIoH,EAAa,SACpC,GAAID,GAAenH,EAAI,GAAOoH,EAAa,SAC3C,MAAMG,EAAMzH,GAAK,GAAKC,GAAK,EAAIC,EAC/BqH,EAAYE,IAAQF,EAAYE,IAAQ,GAAK,CACjD,CAEA,IAAIC,GAAiB,EACjBC,EAAqB,EAOzB,GANAJ,EAAYK,SAAQ,CAACC,EAAItC,KACjBsC,EAAKH,IACTA,EAAgBG,EAChBF,EAAqBpC,EAAC,KAGE,IAAxBoC,EACA,OAAOnJ,KAAK2I,cAAcC,EAAaC,EAAaC,EAAc,GAEtE,MAAMtH,EAAK2H,IAAuB,GAAM,GAClC1H,EAAK0H,IAAuB,EAAK,GACjCzH,EAAyB,GAArByH,EAEV,OAAOxJ,EAAMuC,YAAYV,EAAI,GAAMC,EAAI,GAAMC,EAAI,GAAM,EAC3D,CAOA4H,OAAOC,EAAOxF,GAAS,GACnB,GAAIwF,EAAQ,KAAQ,EAAG,OAAOvJ,KAC9B,GAAIuJ,EAAQ,KAAQ,EAAG,OAAOvJ,KAAKwJ,iBAEnC,MAAMC,EAAM9H,KAAK+H,IAAMH,EAAQ,KAEzBI,EAAMhI,KAAKgI,IAAIF,GACfG,EAAMjI,KAAKiI,IAAIH,GAEf5J,EAAQkE,EACRpC,KAAKkI,IAAI7J,KAAKH,MAAQ8J,GAAOhI,KAAKkI,IAAI7J,KAAKF,OAAS8J,GACpD5J,KAAKH,MACLC,EAASiE,EACTpC,KAAKkI,IAAI7J,KAAKH,MAAQ+J,GAAOjI,KAAKkI,IAAI7J,KAAKF,OAAS6J,GACpD3J,KAAKF,OAELgK,EAAM,IAAInK,EAAME,EAAOC,GAEvBiK,EAASlK,EAAQ,EAAI,GACrBmK,EAASlK,EAAS,EAAI,GACtBmK,EAASjK,KAAKH,MAAQ,EAAI,GAC1BqK,EAASlK,KAAKF,OAAS,EAAI,GAEjC,IAAI0B,EAAI,EACR,EAAG,CACC,IAAI2I,EAAI,EACR,MAAMC,EAAOH,EAASN,GAAOnI,EAAIwI,GAC3BK,EAAOH,EAASN,GAAOpI,EAAIwI,GAEjC,EAAG,CACC,MAAMM,EAAKF,EAAOR,GAAOO,EAAIJ,GACvBQ,EAAKF,EAAOV,GAAOQ,EAAIJ,GAC7BpK,EAAM6K,gBAAgBxK,KAAM8J,EAAKK,EAAG3I,EAAG8I,EAAIC,EAC/C,OAASJ,IAAMtK,EACnB,OAAS2B,IAAM1B,GAEf,OAAOE,KAAK6D,UAAUiG,EAC1B,CAMAN,iBACI,IAAIxI,EAAS,EAEb,IADAhB,KAAKS,OAAOgK,UACLzJ,EAAShB,KAAKS,OAAOuG,QAAQhH,KAAKS,OAAOkC,SAAS3B,EAAQA,GAAU,GAAGyJ,UAE9E,OAAOzK,IACX,CAWAkB,uBAAuBwJ,EAAKZ,EAAKa,EAAIC,EAAIC,EAAIC,GACzC,MAAMC,IAAOF,EACPG,IAAOF,EACPG,EAAKJ,EAAKE,EACVG,EAAKJ,EAAKE,EACVG,EAAYrB,EAAIrJ,OAAOkC,SAAS,GAAKgI,EAAKC,EAAKd,EAAIjK,QAAS,GAE5DuL,EAAM,CACRjK,EAAG,EACHC,EAAG,EACHC,EAAG,EACHC,EAAG,GAGP3B,EAAM0L,SAASN,EAAIC,GAAK,EAAIC,IAAO,EAAIC,GAAKE,EAAKV,GACjD/K,EAAM0L,SAAS,EAAIN,EAAIC,EAAIC,GAAM,EAAIC,GAAKE,EAAKV,GAC/C/K,EAAM0L,SAASN,EAAI,EAAIC,GAAK,EAAIC,GAAMC,EAAIE,EAAKV,GAC/C/K,EAAM0L,SAAS,EAAIN,EAAI,EAAIC,EAAIC,EAAKC,EAAIE,EAAKV,GAE7CS,EAAU,GAAKC,EAAI9J,EACnB6J,EAAU,GAAKC,EAAIjK,EAAIiK,EAAI9J,EAC3B6J,EAAU,GAAKC,EAAIhK,EAAIgK,EAAI9J,EAC3B6J,EAAU,GAAKC,EAAI/J,EAAI+J,EAAI9J,CAC/B,CAGAJ,gBAAgBoK,EAAQC,EAAQC,EAAQJ,EAAKV,GACzC,GACIY,EAAS,GACNC,EAAS,GACTD,EAASZ,EAAI7K,OACb0L,EAASb,EAAI5K,OAClB,CACE,MAAMkB,EAAS,GAAKsK,EAASC,EAASb,EAAI7K,OACpC4L,EAAYf,EAAIjK,OAAOkC,SAAS3B,EAAQA,EAAS,GAEjD0K,EAAKF,EAASC,EAAU,GAE9BL,EAAI9J,GAAKoK,EACTN,EAAIjK,GAAKuK,EAAKD,EAAU,GACxBL,EAAIhK,GAAKsK,EAAKD,EAAU,GACxBL,EAAI/J,GAAKqK,EAAKD,EAAU,EAC5B,CACJ,CAOA5H,UAAUR,GAON,OANArD,KAAKC,UAAYoD,EAAMpD,UACvBD,KAAKE,WAAamD,EAAMnD,WACxBF,KAAKK,SAAWgD,EAAMhD,SACtBL,KAAKO,QAAU8C,EAAM9C,QACrBP,KAAKS,OAAS4C,EAAM5C,OAEhB4C,aAAiBsI,EACVA,EAAMC,KAAK5L,KAAMqD,EAAMwI,SAAUxI,EAAMyI,QAASzI,EAAM0I,QAAS1I,EAAM2I,cAEzEhM,IACX,CAOAkB,gBAAgB+K,GACZ,MAAMC,EAAUC,OAAOD,QAAQD,GAAQG,MAAK,CAAC9K,EAAGD,IAAMC,EAAE,GAAKD,EAAE,KACzDgL,EAAYH,EAAQzD,KAAI6D,GAAKC,WAAWD,EAAE,MAC1CE,EAASN,EAAQzD,KAAI6D,GAAKA,EAAE,KAElC,GAAyB,IAArBD,EAAUrF,OAAc,MAAM,IAAIjH,WAAW,gCAC5C,GAAyB,IAArBsM,EAAUrF,OACf,MAAO,IAAMwF,EAAO,GACjB,GAAyB,IAArBH,EAAUrF,OAAc,CAC/B,MAAMyF,EAAWzM,KAAK0M,aAAaF,EAAO,GAAIA,EAAO,IACrD,OAAOG,GACCA,GAAYN,EAAU,GAAWG,EAAO,GACxCG,GAAYN,EAAU,GAAWG,EAAO,GACrCC,GAAUE,EAAWN,EAAU,KAAOA,EAAU,GAAKA,EAAU,IAE9E,CAEA,MAAMO,EAASjL,KAAKC,OAAOyK,GACrBQ,EAASlL,KAAKE,OAAOwK,GAC3B,IAAIS,EAAY,GAEhB,IAAK,IAAI/F,EAAI,EAAGA,EAAIsF,EAAUrF,OAAQD,IAAK,CACvC,IAAIgG,EAASV,EAAUtF,EAAI,GAC3B,QAAeiG,IAAXD,EAAsB,SAE1B,IAAIE,EAASZ,EAAUtF,GAEnBmG,EAASV,EAAOzF,EAAI,QACTiG,IAAXE,IAAsBA,EAASV,EAAOzF,IAE1C,MAAMoG,EAASX,EAAOzF,GAChB0F,EAAWzM,KAAK0M,aAAaQ,EAAQC,GAE3CL,EAAUM,KAAK,CAACxL,IAAKmL,EAAQlL,IAAKoL,EAAQR,YAC9C,CAEA,OAAOE,IACH,GAAIA,GAAYC,EAAQ,OAAOE,EAAU,GAAGL,SAAS,GACrD,GAAIE,GAAYE,EAAQ,OAAOC,EAAUA,EAAU9F,OAAS,GAAGyF,SAAS,GAExE,IAAK,MAAMA,KAAYK,EACnB,GAAIH,GAAYF,EAAS7K,KAAO+K,GAAYF,EAAS5K,IACjD,OAAO4K,EAASA,UAAUE,EAAWF,EAAS7K,MAAQ6K,EAAS5K,IAAM4K,EAAS7K,MACtF,MAAM,IAAI7B,WAAW,8BAA8B4M,IAAW,CAEtE,CAOAU,aAAaxH,EAASlE,KAAKC,IAAI5B,KAAKH,MAAOG,KAAKF,QAAU,GACtD,MAAMgG,EAAaD,GAAU,EAC7B,IAAK,IAAI9E,EAAI,EAAGA,GAAK8E,EAAQ9E,IAAK,CAC9B,MAAMuM,GAAQvM,EAAI8E,IAAW,EAC7B,IAAK,IAAI/E,EAAI,EAAGA,GAAK+E,EAAQ/E,IACrBwM,GAAQxM,EAAI+E,IAAW,EAAIC,IAC3B9F,KAAKS,OAAwC,IAA/BK,EAAI,GAAKd,KAAKH,MAAQkB,EAAI,GAAS,GAAK,EAElE,CAEA,IAAK,IAAIA,EAAI,EAAGA,GAAK8E,EAAQ9E,IAAK,CAC9B,MAAMuM,GAAQvM,EAAI8E,IAAW,EAC7B,IAAK,IAAI/E,EAAId,KAAKF,OAAS+F,EAAQ/E,GAAKd,KAAKF,OAAQgB,IAC7CwM,GAAStN,KAAKF,OAASgB,EAAK+E,IAAW,EAAIC,IAC3C9F,KAAKS,OAAwC,IAA/BK,EAAI,GAAKd,KAAKH,MAAQkB,EAAI,GAAS,GAAK,EAElE,CAEA,IAAK,IAAIA,EAAIf,KAAKH,MAAQgG,EAAQ9E,GAAKf,KAAKH,MAAOkB,IAAK,CACpD,MAAMuM,GAAStN,KAAKH,MAAQkB,EAAK8E,IAAW,EAC5C,IAAK,IAAI/E,EAAI,EAAGA,GAAK+E,EAAQ/E,IACrBwM,GAAQxM,EAAI+E,IAAW,EAAIC,IAC3B9F,KAAKS,OAAwC,IAA/BK,EAAI,GAAKd,KAAKH,MAAQkB,EAAI,GAAS,GAAK,EAElE,CAEA,IAAK,IAAIA,EAAIf,KAAKH,MAAQgG,EAAQ9E,GAAKf,KAAKH,MAAOkB,IAAK,CACpD,MAAMuM,GAAStN,KAAKH,MAAQkB,EAAK8E,IAAW,EAC5C,IAAK,IAAI/E,EAAId,KAAKF,OAAS+F,EAAQ/E,GAAKd,KAAKF,OAAQgB,IAC7CwM,GAAStN,KAAKF,OAASgB,EAAK+E,IAAW,EAAIC,IAC3C9F,KAAKS,OAAwC,IAA/BK,EAAI,GAAKd,KAAKH,MAAQkB,EAAI,GAAS,GAAK,EAElE,CAEA,OAAOf,IACX,CAKAkB,oBAAoBqM,EAAYC,GAC5B,MAAMC,EAAKF,IAAe,GACpBG,EAAKH,GAAc,GAAK,IACxBI,EAAKJ,GAAc,EAAI,IACvBK,EAAkB,IAAbL,EACLM,GAAML,IAAa,IAAMC,EACzBK,GAAMN,GAAY,GAAK,KAAQE,EAC/BK,GAAMP,GAAY,EAAI,KAAQG,EAC9BK,GAAiB,IAAXR,GAAmBI,EAE/B,OAAOjB,IAKW,IAJJc,EAAKd,EAAWkB,IAIH,IAAY,IAHzBH,EAAKf,EAAWmB,IAGkB,IAAY,IAF9CH,EAAKhB,EAAWoB,IAEuC,EAAU,IADjEH,EAAKjB,EAAWqB,CAGlC,CAEAC,QAAQpI,EAAS,GACb,MAAM1E,EAAI,IAAIxB,EAAMK,KAAKH,MAAOG,KAAKF,QAE/BqK,EAAInK,KAAKH,MACT2B,EAAIxB,KAAKF,OACToO,EAAOlO,KAAKO,QACZ4N,EAAOhN,EAAEZ,QACT6N,EAAK,EAAIjE,EACTkE,EAAK,EAAI7M,EAEf,IAAK,MAAOT,EAAGD,KAAMd,KAAM,CACvB,MAAMsO,EAAMvN,EAAIqN,EAAK,GACfG,EAAMzN,EAAIuN,EAAK,GACfG,EAAM7M,KAAK8M,KAAKH,GAAO,EAAIC,GAAO,GAClCG,EAAM,EAAIF,GAAO3I,EACjB8I,GAAOD,EAAMJ,EAAME,EAAM,IAAOrE,EAAK,EACrCyE,GAAOF,EAAMH,EAAMC,EAAM,IAAOhN,EAAK,EAEvCmN,EAAK,GAAKA,EAAKxE,GAAKyE,EAAK,GAAKA,EAAKpN,GAAKwB,MAAM2L,IAAO3L,MAAM4L,KAG/DT,EAAKrN,EAAIqJ,EAAIpJ,GAAKmN,EAAK/D,EAAIyE,EAAKD,GACpC,CAEA,MAAME,EAAmB,GAAdX,EAAKlH,OAAcmD,EAAI,EAGlC,OAFAgE,EAAKU,GAAMX,EAAKW,GAET7O,KAAK6D,UAAU1C,EAC1B,CAsBA2N,aAAaC,EAAc,GAAG,MAC1BC,EAAK,OACLC,EAAM,YACNC,EAAW,UACXC,EAAS,aACTC,EAAY,SACZC,EAAQ,WACRC,EAAU,QACVC,EAAO,OACPpI,EAAM,QACNqI,GACA,CAAC,GACD,OAAOrQ,EAAIsQ,OAAOzP,KAAKS,OAAQ,CAC3BZ,MAAOG,KAAKH,MACZC,OAAQE,KAAKF,OACb4P,MAAOX,EACPY,SAAU,EACVC,KAAM,CACFC,MAAOb,EACPc,OAAQb,EACRc,YAAab,EACbc,UAAWb,EACX,gBAAiB,IAAIc,UAAsBjD,IAAjBoC,EAA6Ba,KAAKC,MAAQd,GAAce,cAClFC,cAAuBpD,IAAbqC,EAAyB,kCAAkC9P,IAAY8P,EACjFgB,WAAYf,EACZgB,QAASf,EACTgB,OAAQpJ,EACRqJ,QAAShB,IAGrB,CAOAV,iBAAiB2B,EAAU,IACvB,aAAchR,EAAQiR,QAAQjB,OAAOzP,KAAKS,OAAQT,KAAKH,MAAOG,KAAKF,OAAQ2Q,EAC/E,CAOAvP,oBAAoByP,GAChB,IAAItN,EAEJsN,EAAOvR,EAAIwR,KAAKD,GAChB,MAAMC,EAAO,IAAItQ,SAASqQ,EAAKE,OAAQF,EAAKG,WAAYH,EAAKI,YAE7D,GAAIC,EAAUC,MAAML,GAAO,CACvB,MAAM,MAAC/Q,EAAK,OAAEC,EAAM,OAAEoR,GAAU/R,EAAIgS,OAAOR,GAC3CtN,EAAQ,IAAI1D,EAAME,EAAOC,GACzBuD,EAAM5C,OAAO6C,IAAI4N,EACrB,MAAO,GAAIF,EAAUI,OAAOR,GAAO,CAC/B,MAAMS,SAAqB5R,EAAQiR,QAAQS,OAAOR,GAE5C9Q,EAAQwR,EAAYxR,MACpBC,EAASuR,EAAYvR,OACrBwR,EAAYD,EAAYE,OAE9BlO,EAAQ,IAAI1D,EAAME,EAAOC,GACzB,MAAM+Q,EAASQ,EAAYR,OAE3B,GAAkB,IAAdS,EAAiB,CACjB,MAAMV,EAAO,IAAItQ,SAAS+C,EAAM5C,OAAOoQ,QAEvC,IAAK,IAAI9J,EAAI,EAAGA,EAAI8J,EAAO7J,OAAQD,IAAK,CACpC,MAAMyK,EAAQX,EAAO9J,GACrB6J,EAAK7N,UAAc,EAAJgE,EAAOyK,GAAS,GAAKA,GAAS,GAAKA,GAAS,EAAI,KAAM,EACzE,CACJ,MAAO,GAAkB,IAAdF,EAAiB,CACxBjO,EAAM5C,OAAO0C,KAAK,KAClB,IAAK,IAAI4D,EAAI,EAAGA,EAAIlH,EAAQC,EAAQiH,IAChC1D,EAAM5C,OAAO6C,IAAIuN,EAAOlO,SAAa,EAAJoE,EAAW,EAAJA,EAAQ,GAAQ,EAAJA,EAC5D,MAAO,GAAkB,IAAduK,EACP,IAAK,IAAIvK,EAAI,EAAGA,EAAI8J,EAAO7J,OAAQD,GAAK,EACpC1D,EAAM5C,OAAOsG,GAAK,KAAQ,EAAI8J,EAAO9J,GAAK,MAAS,EAAI8J,EAAO9J,EAAI,GAAK,KACvE1D,EAAM5C,OAAOsG,EAAI,GAAK,KAAQ,EAAI8J,EAAO9J,EAAI,GAAK,MAAS,EAAI8J,EAAO9J,EAAI,GAAK,KAC/E1D,EAAM5C,OAAOsG,EAAI,GAAK,KAAQ,EAAI8J,EAAO9J,EAAI,GAAK,MAAS,EAAI8J,EAAO9J,EAAI,GAAK,KAC/E1D,EAAM5C,OAAOsG,EAAI,GAAK,GAGlC,KAAO,KAAIiK,EAAUS,OAAOb,GAKrB,MAAM,IAAIrM,MAAM,0BALY,CAC/B,MAAM8M,SAAqB3R,EAAQgR,QAAQS,OAAOR,GAClDtN,EAAQ,IAAI1D,EAAM0R,EAAYxR,MAAOwR,EAAYvR,QAEjDuD,EAAM5C,OAAO6C,IAAI+N,EAAYR,OACjC,CAAgD,CAEhD,OAAOxN,CACX,CAMWqO,4BACP,OAAO,CACX,CAMWC,4BACP,OAAO,CACX,CAMWC,6BACP,OAAO,CACX,CASA1Q,uBAAuB2Q,EAAKC,EAAO,EAAGnO,EAAO3D,KAAK0R,gBAC9C,IAAK,CAAC1R,KAAK2R,eAAgB3R,KAAK4R,gBAAiB5R,KAAK0R,gBAAgBK,SAASpO,GAC3E,MAAM,IAAIY,MAAM,4BAEpB,GAAIZ,IAAS3D,KAAK0R,gBAAkBI,GAAQ,EACxC,MAAM,IAAI/R,WAAW,yBACzB,GAAI4D,IAAS3D,KAAK0R,gBAAkBI,EAAO,EACvC,MAAM,IAAI/R,WAAW,yBAEN,iBAAR8R,IAAkBA,GAAM,IAAIG,aAAcvC,OAAOoC,IAC5D,MAAMR,SAAqB/R,EAAOoR,QAAQuB,UAAUJ,EAAKlO,EAAMmO,GAEzDzO,EAAQ,IAAI1D,EAAM0R,EAAYxR,MAAOwR,EAAYvR,QAIvD,OAFAuD,EAAM5C,OAAO6C,IAAI+N,EAAYR,QAEtBxN,CACX,CAWAnC,wBAAwBgR,EAAMzO,EAAOmM,EAAMxN,EAAQ,WAAY+P,EAAS,IAAIC,GACxE,MAAM,KAAEC,EAAI,OAAEC,SAAiB9S,EAAQkR,OAEvCwB,EAAO,IAAIG,EAAK5O,EAAOyO,GACvB,MAAO/Q,EAAGC,EAAGC,EAAGC,GAAK3B,EAAM0C,YAAYD,GAEjCmQ,EAAgB,IAAID,EAE1BC,EAAcC,MAAM,CAChBC,UAAWN,EAAOO,SAClBC,WAAYR,EAAOS,UACnBC,WAAYV,EAAOW,UACnBC,eAAgBZ,EAAOa,cACvBC,iBAAkBd,EAAOe,gBACzBC,iBAAkBhB,EAAOiB,iBAG7Bb,EAAcc,OAAOnB,EAAMtC,EAAM,CAACnM,UAClC,MAAM4N,EAAckB,EAAcN,UAAU9Q,EAAGC,EAAGC,GAC5CgC,EAAQ,IAAI1D,EAAM0R,EAAYxR,MAAOwR,EAAYvR,QASvD,OAPAuD,EAAM5C,OAAO6C,IAAI+N,EAAYR,QAEzBxN,EAAMvD,OAASqS,EAAOS,WACtBvP,EAAMiB,KAAK,EAAG,EAAGjB,EAAMxD,MAAO8B,KAAK6C,MAAM+N,EAAce,QAAUjQ,EAAMvD,OAASqS,EAAOS,YAAcvP,EAAMvD,OAASyS,EAAce,UAEtIpB,EAAKqB,OACLhB,EAAcgB,OACPlQ,EAAMkD,QAAQjF,EAAI,IAC7B,EAQH,MAAMqK,UAAchM,EAKN6T,2BACP,MAAO,MACX,CAMWC,+BACP,MAAO,UACX,CAMWC,iCACP,MAAO,YACX,CAEAxS,iCAAiCyC,GAG7B,GAFoB,iBAATA,IACPA,EAAO,CAAC,MAAO,OAAQ,WAAY,cAAcgQ,QAAQhQ,IACzDA,EAAO,GAAKA,EAAO,EACnB,MAAM,IAAI5D,WAAW,yBAEzB,OAAO4D,CACX,CAYA/D,YAAYC,EAAOC,EAAQ+L,EAAW,IAAKC,EAAU,EAAGC,EAAU,EAAGC,EAAeL,EAAM6H,eACtF,GAAIxQ,MAAM6I,IAAaA,EAAW,EAC9B,MAAM,IAAI9L,WAAW,0BAEzBiM,EAAeL,EAAMiI,0BAA0B5H,GAE/C6H,MAAMhU,EAAOC,GACbE,KAAK6L,SAAWA,EAChB7L,KAAK8L,QAAUA,EACf9L,KAAK+L,QAAUA,EACf/L,KAAKgM,aAAeA,CACxB,CAEArL,WACI,MAAO,SAASX,KAAKH,SAASG,KAAKF,UAAUE,KAAK6L,aACtD,CAWA3K,YAAYmC,EAAOwI,EAAUC,EAASC,EAASC,EAAeL,EAAM6H,eAChE,KAAMnQ,aAAiB1D,GACnB,MAAM,IAAIsD,UAAU,wBAExB+I,EAAeL,EAAMiI,0BAA0B5H,GAE/C,MAAM8H,EAAQ,IAAInI,EAAMtI,EAAMxD,MAAOwD,EAAMvD,OAAQ+L,EAAUC,EAASC,EAASC,GAG/E,OAFA8H,EAAMrT,OAAO6C,IAAID,EAAM5C,QAEhBqT,CACX,CAEA/P,OAAOlE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBAC/B,MAAMwQ,EAAgB/T,KAAKH,MACrBmU,EAAiBhU,KAAKF,OAEtBqE,EAAS0P,MAAM9P,OAAOlE,EAAOC,EAAQ6D,GAK3C,OAHA3D,KAAK8L,SAAW3H,EAAOtE,MAAQkU,EAC/B/T,KAAK+L,SAAW5H,EAAOrE,OAASkU,EAEzB7P,CACX,EAOJ,MAAM8P,UAAYjL,MAOdpJ,YAAYsU,EAAQC,GAAY,GAC5BN,SAASK,GAET,IAAK,MAAMJ,KAAS9T,KAChB,KAAM8T,aAAiBnI,GACnB,MAAM,IAAI1I,UAAU,SAASjD,KAAK2T,QAAQG,kCAElD,GAAIK,GAAa,GAAKnR,MAAMmR,GACxB,MAAM,IAAIpU,WAAW,sBAEzBC,KAAKmU,UAAYA,CACrB,CAMItU,YACA,IAAIgC,EAAM,EACV,IAAK,MAAMiS,KAAS9T,KAAM,CACtB,IAAIH,EAAQiU,EAAMjU,MAAQiU,EAAMhI,QAC5BjK,EAAMhC,IACNgC,EAAMhC,EACd,CAEA,OAAOgC,CACX,CAMI/B,aACA,IAAI+B,EAAM,EACV,IAAK,MAAMiS,KAAS9T,KAAM,CACtB,IAAIF,EAASgU,EAAMhU,OAASgU,EAAM/H,QAC9BlK,EAAM/B,IACN+B,EAAM/B,EACd,CAEA,OAAO+B,CACX,CAEAlB,WACI,MAAO,OAAOX,KAAKH,SAASG,KAAKF,UAAUE,KAAK6L,aACpD,CAKA,EAAGjL,OAAOC,YACN,IAAK,IAAIkG,EAAI,EAAGA,EAAI/G,KAAKgH,OAAQD,UACvB/G,KAAK+G,EACnB,CAEAzE,MAAMmD,EAAOD,GACLA,IAAQ4O,MACR5O,EAAMxF,KAAKgH,QACf,MAAMkN,EAAS,IAAIlL,MAAMxD,EAAMC,GAC/B,IAAK,IAAIsB,EAAI,EAAGA,EAAImN,EAAOlN,OAAQD,IAC/BmN,EAAOnN,GAAK/G,KAAK+G,EAAItB,GACzB,OAAO,IAAIwO,EAAIC,EAAQlU,KAAKmU,UAChC,CAMItI,eACA,OAAO7L,KAAKqU,QAAO,CAACC,EAAKR,IAAUQ,EAAMR,EAAMjI,UAAU,EAC7D,CAOAiD,aAAa2B,EAAU,IACnB,MAAM8D,EAAU,WAAWlV,EAAOqR,QAAQ8D,SAAQxU,KAAKH,MAAOG,KAAKF,OAAQE,KAAKmU,WAEhF,IAAK,MAAML,KAAS9T,KAAM,CACtB,KAAM8T,aAAiBnI,GAAQ,MAAM,IAAIpH,MAAM,+BAC/CgQ,EAAQE,IAAIX,EAAMhI,QAASgI,EAAM/H,WAAY+H,EAAMjI,SAAW,IAAKiI,EAAMjU,MAAOiU,EAAMhU,OAAQgU,EAAMrT,OAAQqT,EAAM9H,aAAcyE,EAAU,IAAM,GAAK,EACzJ,CAEA,OAAO8D,EAAQG,IACnB,CAQAxT,oBAAoByP,EAAMgE,GAAwB,GAC9C,IAAItR,EACJsN,EAAOvR,EAAIwR,KAAKD,GAChB,MAAMC,EAAO,IAAItQ,SAASqQ,EAAKE,OAAQF,EAAKG,WAAYH,EAAKI,YAE7D,IAAIC,EAAU4D,MAAMhE,GA4Fb,MAAM,IAAIrM,MAAM,0BA5FI,CACvB,MAAM2P,EAAS,GACTW,EAAU,WAAWxV,EAAOqR,QAAQoE,SAAQnE,GAElD,GAAIgE,EAAuB,CACvB,MAAMI,EAAQF,EAAQX,SAASc,OAAOlO,MAChCgN,EAAQ,IAAInI,EAAMoJ,EAAMlV,MAAOkV,EAAMjV,OAAQ,GAAKiV,EAAME,MAAOF,EAAMhU,EAAGgU,EAAMjU,EAAGiU,EAAMG,SAE7FpB,EAAMrT,OAAO6C,IAAIyR,EAAMlE,QAEvBqD,EAAO9G,KAAK0G,GACZzQ,EAAQ,IAAI4Q,EAAIC,EACpB,CAEA,MAAMiB,EAAyB,EAAhBN,EAAQhV,MACjBuV,EAA2B,EAAjBP,EAAQ/U,OAClBuV,EAAM,IAAI7U,YAAYqU,EAAQhV,MAAQgV,EAAQ/U,QAC9C4U,EAAK,IAAIY,WAAWD,EAAIxE,OAAQwE,EAAIvE,WAAYuE,EAAItE,YAE1D,IAAK,MAAM+C,KAASe,EAAQX,SAAU,CAClC,IAAIqB,EAAU,EACVC,EAAW,EACf,MAAMC,EAAe,EAAV3B,EAAM/S,EACX2U,EAAe,EAAV5B,EAAMhT,EACX6U,EAAK7B,EAAMjD,OACXlN,EAAOmQ,EAAMoB,QACbrV,EAAsB,EAAdiU,EAAMjU,MACdC,EAAwB,EAAfgU,EAAMhU,OACf8V,EAAM,IAAIpV,YAAYmV,EAAG9E,OAAQ8E,EAAG7E,WAAYjR,EAAQC,GAGxD+V,EAFI3B,EAAOA,EAAO9G,KAAK,IAAIzB,EAAMwJ,EAAQC,EAAS,GAAKtB,EAAMmB,MAAO,EAAG,EAAG,IAAM,GAEzExU,OACPqV,EAAM,IAAItV,YAAYqV,EAAGhF,QAI/B,GAFAgF,EAAGvS,IAAIoR,GAEH,IAAM/Q,EACN,IAAK,IAAI7C,EAAI,EAAOA,EAAIhB,EAAQgB,IAAK,CACjC,MAAMuG,EAAWoO,EAAKN,GAAUrU,EAAI4U,GAAM,EAE1C,IAAK,IAAI3U,EAAI,EAAOA,EAAIlB,EAAOkB,IAAK,CAChC,MAAMwG,EAAWxG,EAAIsG,EAEjB,IAAMsO,EAAG,EAAIJ,GACjBO,EAAIvO,GAAY8N,EAAI9N,GACfuO,EAAIvO,GAAYqO,EAAIJ,GAEzBA,IACAD,GAAW,CACf,CACJ,MAGC,GAAI,IAAM5R,EACX,IAAK,IAAI7C,EAAI,EAAOA,EAAIhB,EAAQgB,IAAK,CACjC,MAAMuG,EAAWoO,EAAKN,GAAUrU,EAAI4U,GAAM,EAE1C,IAAK,IAAI3U,EAAI,EAAOA,EAAIlB,EAAOkB,IAAK,CAChC,MAAMwG,EAAWxG,EAAIsG,EAEjB,IAAMsO,EAAG,EAAIJ,GACjBO,EAAIvO,GAAY8N,EAAI9N,GACfuO,EAAIvO,GAAYqO,EAAIJ,GAEzBA,IACAD,GAAW,EACXF,EAAI9N,GAAY,CACpB,CACJ,MAGC,GAAI,IAAM5D,GAAQ,IAAMA,EAAM,CAC/BkS,EAAGvS,IAAIoR,GACP,IAAK,IAAI5T,EAAI,EAAOA,EAAIhB,EAAQgB,IAAK,CACjC,MAAMuG,EAAWoO,EAAKN,GAAUrU,EAAI4U,GAAM,EAE1C,IAAK,IAAI3U,EAAI,EAAOA,EAAIlB,EAAOkB,IAAK,CAChC,MAAMwG,EAAWxG,EAAIsG,EAEjB,IAAMsO,EAAG,EAAIJ,GACjBO,EAAIvO,GAAY8N,EAAI9N,GACfuO,EAAIvO,GAAYqO,EAAIJ,GAEzBA,IACAD,GAAW,EACXF,EAAI9N,GAAYuO,EAAIvO,EACxB,CACJ,CACJ,CACJ,CAEAlE,EAAQ,IAAI4Q,EAAIC,EACpB,CAEA,OAAO7Q,CACX,CAEAU,OAAOlE,EAAOC,EAAQ6D,EAAOhE,EAAM4D,yBAC/B,IAAK,MAAMuQ,KAAS9T,KAChB8T,EAAM/P,OAAOlE,EAAOC,EAAQ6D,EACpC,EAGJ,MAAMyO,EAWFxS,YAAYmW,GACR,MAAM,SAACrD,EAAQ,UAAEE,EAAS,UAAEE,EAAS,cAAEE,EAAa,gBAAEE,EAAe,eAAEE,GAAkB2C,GAAW,CAAC,EAGrG,GADA/V,KAAK0S,SAAWA,GAAY0B,IACxBpR,MAAMhD,KAAK0S,WAAa1S,KAAK0S,SAAW,EACxC,MAAM,IAAI3S,WAAW,oBAGzB,GADAC,KAAK4S,UAAYA,GAAawB,IAC1BpR,MAAMhD,KAAK4S,YAAc5S,KAAK4S,UAAY,EAC1C,MAAM,IAAI7S,WAAW,qBAGzB,GADAC,KAAK8S,UAAYA,GAAa,QACzB,CAAC,OAAQ,QAAQf,SAAS/R,KAAK8S,WAChC,MAAM,IAAI/S,WAAW,qBAGzB,GADAC,KAAKgT,cAAgBA,GAAiB,QACjC,CAAC,OAAQ,SAAU,SAASjB,SAAS/R,KAAKgT,eAC3C,MAAM,IAAIjT,WAAW,yBAGzB,GADAC,KAAKkT,gBAAkBA,GAAmB,OACrC,CAAC,MAAO,SAAU,UAAUnB,SAAS/R,KAAKkT,iBAC3C,MAAM,IAAInT,WAAW,2BAGzB,GADAC,KAAKoT,eAAiBA,IAAkB,EACL,kBAAxBpT,KAAKoT,eACZ,MAAM,IAAInQ,UAAU,yBAC5B,EAGJ,MAAM+N,EAMF9P,eAAeyP,GACX,IAAIC,EASJ,OARKxQ,YAAY4V,OAAOrF,IAIpBA,EAAO,IAAI2E,WAAW3E,EAAKE,OAAQF,EAAKG,WAAYH,EAAKI,YACzDH,EAAO,IAAItQ,SAASqQ,EAAKE,OAAQF,EAAKG,WAAYH,EAAKI,cAJvDJ,EAAO,IAAI2E,WAAW3E,GACtBC,EAAO,IAAItQ,SAASqQ,EAAKE,SAMzB7Q,KAAKiR,MAAML,GAAc,MACzB5Q,KAAKoR,OAAOR,GAAc,OAC1B5Q,KAAKyR,OAAOb,GAAc,OAC1B5Q,KAAK4U,MAAMhE,GAAc,MACtB,IACX,CAMA1P,aAAa0P,GACT,OA/sDC,aA+sDMA,EAAK3P,UAAU,GAAG,EAC7B,CAMAC,cAAc0P,GACV,OAAQA,EAAK3P,UAAU,GAAG,KAAW,GAttDnC,QAutDN,CAMAC,cAAc0P,GACV,OA7tDE,aA6tDKA,EAAK3P,UAAU,GAAG,EAC7B,CAMAC,aAAa0P,GACT,OAAQA,EAAK3P,UAAU,GAAG,KAAW,GApuDpC,OAquDL,EAiBJlC,EAAOD,QAAU,CAACa,QAAOsU,MAAKtI,QAAOyG,aAAYpB,YAAWG,OAR5D,SAAgBR,EAAMgE,GAGlB,MAAa,QAFA3D,EAAUiF,QAAQtF,GAGpBsD,EAAI9C,OAAOR,EAAMgE,GACrBhV,EAAMwR,OAAOR,EACxB,E,QCjwDA,SAASC,EAAKC,EAAQqF,GAAS,GAC3B,GAAIrF,aAAkBzQ,YAAa,OAAO,IAAIkV,WAAWzE,GACzD,GAAIqF,GAAUrF,aAAkBsF,kBAAmB,OAAO,IAAIb,WAAWzE,GACzE,GAAIzQ,YAAY4V,OAAOnF,GAAS,OAAO,IAAIyE,WAAWzE,EAAOA,OAAQA,EAAOC,WAAYD,EAAOE,YAE/F,MAAM,IAAI9N,UAAU,uEACtB,CAmBAlE,EAAOD,QAAU,CAAE8R,OAAMwF,WAjBzB,SAAoBC,EAASH,GAAS,GACpC,IAAIlP,EAAS,EACThG,EAAS,EACbqV,EAAQjN,SAAQyH,GAAU7J,GAAW,MAAQ6J,EAAOE,WAAaF,EAAO7J,OAAS6J,EAAOE,aAExF,MAAM2D,EAAK,IAAIY,WAAWY,EAAS,IAAIC,kBAAkBnP,GAAUA,GASnE,OAPAqP,EAAQjN,SAAQyH,IACd,MAAMzF,EAAMpC,MAAMsN,QAAQzF,GAAUA,EAASD,EAAKC,GAAQ,GAE1D6D,EAAGpR,IAAI8H,EAAKpK,GACZA,GAAUoK,EAAIpE,MAAM,IAGf0N,CACT,E,UCvBF,MAAM6B,EAAQ,IAAI/V,YAAY,CAC1B,EAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAChG,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAChG,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAChG,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,SAChG,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAChG,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAChG,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAChG,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAChG,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAChG,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAChG,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAChG,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAChG,WAAY,WAAY,WAAY,YAEtCzB,EAAOD,QAAU,SAAe+R,GAC9B,IAAI7P,EAAS,EACTwV,GAAM,EACV,MAAMC,EAAM5F,EAAO7J,OAAS,EAAK,EAEjC,KAAOyP,EAAKzV,GACVwV,EAAMD,EAAiC,KAA1BC,EAAM3F,EAAO7P,OAAsBwV,IAAQ,EACxDA,EAAMD,EAAiC,KAA1BC,EAAM3F,EAAO7P,OAAsBwV,IAAQ,EACxDA,EAAMD,EAAiC,KAA1BC,EAAM3F,EAAO7P,OAAsBwV,IAAQ,EACxDA,EAAMD,EAAiC,KAA1BC,EAAM3F,EAAO7P,OAAsBwV,IAAQ,EAG1D,KAAOxV,EAAS6P,EAAO7J,QACrBwP,EAAMD,EAAiC,KAA1BC,EAAM3F,EAAO7P,OAAsBwV,IAAQ,EAG1D,OAAc,WAANA,KAAsB,CAChC,C,gBC/CF,MAAMpX,EAAM,EAAQ,GACdsX,EAAQ,EAAQ,MAChB,SAAEC,EAAQ,WAAEC,GAAe,EAAQ,KAEnCC,EAAW,IAAIvB,WAAW,CAAC,GAAI,GAAI,GAAI,KACvCwB,EAAW,IAAIxB,WAAW,CAAC,GAAI,GAAI,GAAI,KACvCyB,EAAW,IAAIzB,WAAW,CAAC,GAAI,GAAI,GAAI,KACvC0B,EAAeN,EAAM,IAAIpB,WAAW,CAAC,GAAI,GAAI,GAAI,MACjD2B,EAAO,IAAI3B,WAAW,CAAC,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,KAUpD4B,EAAyB,CAC7B,EARW,EASX,EANiB,EAQjB,EAVW,EAWX,EARiB,GAWbC,EAAc,IAAInF,YAExBjT,EAAOD,QAAU,CACf2Q,OAAOkB,GAAM,KAAEf,EAAI,MAAE/P,EAAK,OAAEC,EAAM,SAAE6P,EAAQ,MAAEyH,EAAQ,EAAC,MAAE1H,EAAQ,IAC/D,IAAI1O,EAAS,EACTqW,EAAa,EACjB,MAAMC,EAAazX,EAAQ8P,EACrB4H,EAAM,IAAIjC,WAAWxV,EAAS6Q,EAAK3J,QAEzC,KAAOhG,EAAS2P,EAAK3J,QACnBuQ,EAAIF,KAAgB,EACpBE,EAAIjU,IAAIqN,EAAKhO,SAAS3B,EAASA,GAAUsW,GAAcD,GAEvDA,GAAcC,EAGhB,GAAI1H,EAAM,CACR,IAAI4H,EAAS,GACb,IAAK,MAAMvO,KAAO2G,EAAM,CACtB,IAAKA,EAAK3G,GAAM,SAChB,MAAMwO,EAAKN,EAAY1H,OAAOxG,GACxByO,EAAKP,EAAY1H,OAAOG,EAAK3G,IAC7B0O,EAAQ,IAAIrC,WAAW,GAASmC,EAAGzQ,OAAS0Q,EAAG1Q,QAE/C4J,EAAO,IAAItQ,SAASqX,EAAM9G,QAEhC8G,EAAM,GAAK,IACXA,EAAM,GAAK,GACXA,EAAM,GAAK,GACXA,EAAM,GAAK,IACXA,EAAMrU,IAAImU,EAAI,GACdD,EAAOpK,KAAKuK,GACZA,EAAMrU,IAAIoU,EAAI,EAAID,EAAGzQ,QACrB4J,EAAK7N,UAAU,EAAG4U,EAAM3Q,OAAS,IACjC4J,EAAK7N,UAAU4U,EAAM3Q,OAAS,EAAG0P,EAAMiB,EAAMhV,SAAS,EAAGgV,EAAM3Q,OAAS,IAC1E,CAEA4I,EAAOxQ,EAAIgX,WAAWoB,EACxB,CAEAxW,EAAS4O,EAAOA,EAAK5I,OAAS,EAC9B,MAAM4Q,EAAajB,EAASY,EAAK7H,GAC3BmI,EAAQ,IAAIvC,WAAW,GAAKtU,EAASiW,EAAKjQ,OAAS4Q,EAAW5Q,QAEpE6Q,EAAM,IAAM,EACZA,EAAM,IAAM,EACZA,EAAM,IAAM,EACZA,EAAM,IAAMT,EACZS,EAAMvU,IAAI2T,EAAM,GAChBY,EAAMvU,IAAIuT,EAAU,IACpBgB,EAAMvU,IAAIwT,EAAU,IACpBe,EAAMvU,IAAIsU,EAAY,IACtBC,EAAM,IAAMX,EAAuBvH,GAC/BC,GAAMiI,EAAMvU,IAAIsM,EAAM,GAAKgI,EAAW5Q,QAC1C6Q,EAAMvU,IAAIyT,EAAU,GAAK/V,EAAS4W,EAAW5Q,QAE7C,MAAM4J,EAAO,IAAItQ,SAASuX,EAAMhH,QAWhC,OATAD,EAAK7N,UAAU,EAAG,IAClB6N,EAAK7N,UAAU,GAAIlD,GACnB+Q,EAAK7N,UAAU,GAAIjD,GACnB8Q,EAAK7N,UAAU,GAAI6U,EAAW5Q,QAC9B4J,EAAK7N,UAAU,GAAK/B,EAAS4W,EAAW5Q,OAAQ,GAChD4J,EAAK7N,UAAU,GAAK/B,EAAS4W,EAAW5Q,OAAQgQ,GAChDpG,EAAK7N,UAAU,GAAI2T,EAAM,IAAIpB,WAAWuC,EAAMhH,OAAQ,GAAI,MAC1DD,EAAK7N,UAAU,GAAK6U,EAAW5Q,OAAQ0P,EAAM,IAAIpB,WAAWuC,EAAMhH,OAAQ,GAAI,EAAI+G,EAAW5Q,UAEtF6Q,CACT,EAEA1G,OAAO0G,GACL,IAAIjH,EAAO,IAAItQ,SAASuX,EAAMhH,OAAQgH,EAAM/G,WAAY+G,EAAM9G,YAE9D,MAAMlR,EAAQ+Q,EAAK3P,UAAU,IACvBnB,EAAS8Q,EAAK3P,UAAU,IACxB6W,EAAMD,EAAM,IACZE,EAAaF,EAAM,IACzB,IAAIlI,EAAW,CAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAKoI,GAClD,MAAMC,EAAUrI,EAAWmI,EAAM,EAE3BR,EAAazX,EAAQmY,EAC3B,IAAI9G,EAAS,IAAIoE,WAAWxV,EAASwX,GAEjCtW,EAAS,EACTiX,EAAW,EAEXC,EAAW,GACf,MAAMV,EAAS,GAEf,IAAIW,EAASC,EAEb,MAAMC,EAAkBR,EAAM7Q,OAAS,EAEvC,IAAIsR,EACJ,KAAiD,cAAzCA,EAAO1H,EAAK3P,UAAU,EAAIiX,KAA2B,CAC3D,GAAa,aAATI,EACFd,EAAOpK,KAAKyK,EAAMlV,SAAS,EAAIuV,EAAU,EAAIA,EAAWtH,EAAK3P,UAAUiX,UACpE,GAAa,aAATI,EAAqB,CAC5B,GAAIH,EACF,MAAM,IAAI5T,MAAM,wCAClB4T,EAAU,IAAI3X,YAAYoQ,EAAK3P,UAAUiX,IACzC,IAAK,IAAIK,EAAY,EAAGA,EAA6B,EAAjBJ,EAAQnR,OAAYuR,GAAa,EACnEJ,EAAQI,EAAY,GAAKV,EAAM,EAAIK,EAAWK,IAAc,GAAKV,EAAM,EAAIK,EAAWK,EAAY,IAAM,GAAKV,EAAM,EAAIK,EAAWK,EAAY,IAAM,EAAI,GAC5J,MAAO,GAAa,aAATD,EAAqB,CAC9B,GAAIF,EACF,MAAM,IAAI7T,MAAM,wCAClB6T,EAAe,IAAI9C,WAAW1E,EAAK3P,UAAUiX,IAC7C,IAAK,IAAInR,EAAI,EAAGA,EAAIqR,EAAapR,OAAQD,IACvCqR,EAAarR,GAAK8Q,EAAM,EAAIK,EAAWnR,EAC3C,CAGA,GADAmR,GAAY,GAAYtH,EAAK3P,UAAUiX,GACnCA,EAAWG,EACb,KACJ,CAIA,IAFAR,EAAQjB,EAA6B,IAAlBY,EAAOxQ,OAAewQ,EAAO,GAAKpY,EAAIgX,WAAWoB,GAAS1X,EAASA,EAASwX,GAExFtW,EAAS6W,EAAM9G,YAAY,CAChC,MAAMyH,EAASX,EAAM7W,KACfsB,EAAQuV,EAAMlV,SAAS3B,EAAQA,GAAUsW,GAE3C,IAAMkB,EAAQtH,EAAO5N,IAAIhB,EAAO2V,GAC3B,IAAMO,EAAQxY,KAAKyY,SAASnW,EAAO4O,EAAQ+G,EAAUD,EAASV,GAC9D,IAAMkB,EAAQxY,KAAK0Y,SAASpW,EAAO4O,EAAQ+G,EAAUD,EAASV,GAC9D,IAAMkB,EAAQxY,KAAK2Y,SAASrW,EAAO4O,EAAQ+G,EAAUD,EAASV,GAC9D,IAAMkB,GAAQxY,KAAK4Y,SAAStW,EAAO4O,EAAQ+G,EAAUD,EAASV,GAEvEW,GAAYX,CACd,CAEA,GAAmB,IAAfS,EAAkB,CACpB,IAAKI,EACH,MAAM,IAAI5T,MAAM,iCAElB,GAAI6T,EACF,IAAK,IAAIrR,EAAI,EAAGA,EAAIqR,EAAapR,OAAQD,IACvCoR,EAAQpR,IAAM,WAAaqR,EAAarR,GAE5C4I,EAAW,EACX,MAAMkJ,EAAY,IAAIvD,WAAWzV,EAAQC,EAAS,GAC5CgZ,EAAY,IAAIxY,SAASuY,EAAUhI,OAAQgI,EAAU/H,WAAY+H,EAAU9H,YACjF,IAAK,IAAIhK,EAAI,EAAGA,EAAImK,EAAOlK,OAAQD,IACjC+R,EAAU/V,UAAc,EAAJgE,EAAOoR,EAAQjH,EAAOnK,KAAK,GACjDmK,EAAS2H,CACX,CAEA,GAAY,IAARf,EAAW,CACb,MAAMe,EAAY,IAAIvD,WAAWpE,EAAOlK,OAAS8Q,EAAM,GACvD,IAAK,IAAI/Q,EAAI,EAAGA,EAAImK,EAAOlK,OAAQD,GAAK,EACtC8R,EAAU9R,EAAI,GAAKmK,EAAOnK,GAC5BmK,EAAS2H,CACX,CAEA,GAAiB,IAAblJ,EAAgB,CAClB,MAAMkJ,EAAY,IAAIvD,WAAWzV,EAAQC,EAAS,GAC5C8Q,EAAO,IAAItQ,SAASuY,EAAUhI,QAEpC,GAAiB,IAAblB,EACF,IAAK,IAAI5I,EAAI,EAAGA,EAAIlH,EAAQC,EAAQiH,IAAK,CACvC,MAAMyK,EAAQN,EAAOnK,GACrB6J,EAAK7N,UAAc,EAAJgE,EAAOyK,GAAS,GAAKA,GAAS,GAAKA,GAAS,EAAI,KAAM,EACvE,MACK,GAAiB,IAAb7B,EACT,IAAK,IAAI5I,EAAI,EAAGA,EAAIlH,EAAQC,EAAS,EAAGiH,GAAK,EAAG,CAC9C,MAAMyK,EAAQN,EAAOnK,GACrB6J,EAAK7N,UAAc,EAAJgE,EAAOyK,GAAS,GAAKA,GAAS,GAAKA,GAAS,EAAIN,EAAOnK,EAAI,IAAI,EAChF,MACK,GAAiB,IAAb4I,EAAgB,CACzBkJ,EAAU1V,KAAK,KACf,IAAK,IAAI4D,EAAI,EAAGA,EAAIlH,EAAQC,EAAQiH,IAClC8R,EAAUvV,IAAI4N,EAAOvO,SAAa,EAAJoE,EAAW,EAAJA,EAAQ,GAAQ,EAAJA,EACrD,CAEAmK,EAAS2H,CACX,CAEA,MAAO,CAAEhZ,QAAOC,SAAQoR,SAC1B,EAEAuH,SAASnW,EAAO4O,EAAQ+G,EAAUD,EAASV,GACzC,IAAIvQ,EAAI,EACR,KAAOA,EAAIiR,GAAS9G,EAAOnK,EAAIkR,GAAY3V,EAAMyE,KACjD,KAAOA,EAAIuQ,GAAYpG,EAAOnK,EAAIkR,GAAY3V,EAAMyE,GAAKmK,EAAOnK,IAAMkR,EAAWD,EACnF,EAEAU,SAASpW,EAAO4O,EAAQ+G,EAAUD,EAASV,GACzC,GAAI,IAAMW,EAAU/G,EAAO5N,IAAIhB,EAAO2V,OACjC,CACH,IAAIlR,EAAI,EACR,KAAOA,EAAIuQ,GAAYpG,EAAOnK,EAAIkR,GAAY3V,EAAMyE,GAAKmK,EAAOnK,IAAMkR,EAAWX,EACnF,CACF,EAEAqB,SAASrW,EAAO4O,EAAQ+G,EAAUD,EAASV,GACzC,IAAIvQ,EAAI,EAER,GAAI,IAAMkR,EAAU,CAClB,KAAOlR,EAAIiR,GAAS9G,EAAOnK,GAAKzE,EAAMyE,KACtC,KAAOA,EAAIuQ,GAAYpG,EAAOnK,GAAKzE,EAAMyE,IAAMmK,EAAOnK,IAAMiR,IAAY,EAC1E,KAAO,CACL,KAAOjR,EAAIiR,GAAS9G,EAAOnK,EAAIkR,GAAY3V,EAAMyE,IAAMmK,EAAOnK,IAAMkR,EAAWX,IAAe,GAC9F,KAAOvQ,EAAIuQ,GAAYpG,EAAOnK,EAAIkR,GAAY3V,EAAMyE,IAAMmK,EAAOnK,EAAIkR,EAAWD,GAAW9G,EAAOnK,IAAMkR,EAAWX,IAAe,EACpI,CACF,EAEAsB,SAAStW,EAAO4O,EAAQ+G,EAAUD,EAASV,GACzC,IAAIvQ,EAAI,EAER,GAAI,IAAMkR,EAAU,CAClB,KAAOlR,EAAIiR,GAAS9G,EAAOnK,GAAKzE,EAAMyE,KACtC,KAAOA,EAAIuQ,GAAYpG,EAAOnK,GAAKzE,EAAMyE,GAAKmK,EAAOnK,IAAMiR,EAC7D,KAAO,CACL,KAAOjR,EAAIiR,GAAS9G,EAAOnK,EAAIkR,GAAY3V,EAAMyE,GAAKmK,EAAOnK,IAAMkR,EAAWX,GAE9E,KAAOvQ,EAAIuQ,GAAY,CACrB,MAAMhW,EAAI4P,EAAOnK,EAAIkR,EAAWD,GAC1B3W,EAAI6P,EAAOnK,EAAIkR,EAAWX,GAC1ByB,EAAI7H,EAAOnK,EAAIkR,EAAWD,EAAUV,GAEpCvV,EAAIT,EAAID,EAAI0X,EACZC,EAAKrX,KAAKkI,IAAI9H,EAAIT,GAClB2X,EAAKtX,KAAKkI,IAAI9H,EAAIV,GAClB6X,EAAKvX,KAAKkI,IAAI9H,EAAIgX,GAExB7H,EAAOnK,EAAIkR,GAAY3V,EAAMyE,MAASiS,GAAMC,GAAMD,GAAME,EAAM5X,EAAM2X,GAAMC,EAAM7X,EAAI0X,EACtF,CACF,CACF,E,gBC/PF,MAAM,QAAExZ,GAAY,EAAQ,KAE5B,IAAI4Z,EAAM,KACVpa,EAAOD,QAAU,CACfgQ,aACE,IAAKqK,EAAK,CACR,MAAMC,EAAY,qBAAsBC,YACxCF,QAAYE,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiC/Z,wBAA8Bga,MAAKxY,GAAKqY,EAAYrY,EAAIA,EAAEyY,gBAC9K,CAEA,OAAOxZ,KAAKyZ,KACd,EAEAA,MACE,IAAIC,EAAW,KACf,MAAMC,EAAO,IAAIN,YAAYO,SAAST,GAAKra,QAE3C,MAAMM,EACJ8B,gBAAkB,OAAOyY,EAAKE,MAAQ,CACtC3Y,aAAa4Q,GAAQ,OAAO6H,EAAKG,OAAOhI,EAAO,CAC/C5Q,YAAY6Y,EAAKjI,GAAQ,OAAO6H,EAAKK,MAAMD,EAAKjI,EAAO,CACvD5Q,UAAU6Y,EAAKjI,GAAQ,OAAO,IAAIwD,WAAWqE,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAC7E5Q,WAAW6Y,EAAKjI,GAAQ,OAAO,IAAItR,YAAYmZ,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAE/E5Q,qBAAqB6Y,EAAKjI,GACxB,IAAIxP,EAAQlD,EAAIsV,GAAGqF,EAAKjI,GAAMxP,QAC9B,OAAQqX,EAAKK,MAAMD,EAAKjI,GAAOxP,CACjC,EAEF,MAAM4X,EAAc,SAAUC,WAAaC,KAAKC,KAAK5K,OAAS,MAC5D,MAAM8E,EAAU,IAAIvC,YACpB,OAAOsI,GAAU/F,EAAQ9E,OAAO6K,EACjC,EAH6D,GAKxDC,EAAc,SAAUJ,WAAaC,KAAKC,KAAKlJ,OAAS,MAC5D,MAAM0D,EAAU,IAAI2F,YACpB,OAAO3J,GAAUgE,EAAQ1D,OAAON,EACjC,EAH6D,GAyG9D,MApGI,yBAA0BsJ,aAC5BT,EAAW,IAAIe,sBAAqB,EAAExY,EAAG8X,MAC7B,IAAN9X,GAAS0X,EAAKe,UAAUX,GAClB,IAAN9X,GAAS0X,EAAKgB,YAAYZ,EAAI,KAiG/B,CAAE1H,KA7FT,MACEzS,YAAY6D,EAAOoN,GACjB7Q,KAAKyD,MAAQA,EACb,MAAMsW,EAAM3a,EAAIwb,MAAM/J,EAAO7J,QAI7B,GAHA5H,EAAIsV,GAAGqF,EAAKlJ,EAAO7J,QAAQ1D,IAAIuN,GAC/B7Q,KAAK+Z,IAAMJ,EAAKkB,SAASd,EAAKlJ,EAAO7J,OAAQvD,IAExCzD,KAAK+Z,IAAK,MAAM,IAAIxV,MAAM,gBAC3BmV,GAAUA,EAASoB,SAAS9a,KAAM,CAAC,EAAGA,KAAK+Z,KAAM/Z,KACvD,CAEAuT,OACEvT,KAAK+Z,IAAMJ,EAAKe,UAAU1a,KAAK+Z,KAC3BL,GAAUA,EAASqB,WAAW/a,KACpC,CAEAgb,IAAIC,GACF,OAAOtB,EAAKuB,SAASlb,KAAK+Z,IAAKoB,OAAOC,UAAUC,WAAWC,KAAKL,EAAM,GACxE,CAEAM,QAAQN,EAAMxX,EAAQzD,KAAKyD,OACzB,MAAMsW,EAAMJ,EAAK6B,aAAaxb,KAAK+Z,IAAKoB,OAAOC,UAAUC,WAAWC,KAAKL,EAAM,GAAIxX,GAC7E8X,EAAUE,KAAKC,MAAMnB,EAAYnb,EAAIsV,GAAGiF,EAAKgC,oBAAoB5B,GAAM3a,EAAI4H,YAEjF,OAAQ2S,EAAKiC,kBAAkB7B,GAAMwB,CACvC,CAEAtJ,UAAUgJ,EAAMxX,EAAQzD,KAAKyD,OAC3B,MAAMsW,EAAMJ,EAAKkC,eAAe7b,KAAK+Z,IAAKoB,OAAOC,UAAUC,WAAWC,KAAKL,EAAM,GAAIxX,GAE/EqY,EAAQ,CACZjL,OAAQzR,EAAIsV,GAAGiF,EAAKoC,sBAAsBhC,GAAM3a,EAAI4H,UAAU1E,QAC9DiZ,QAASE,KAAKC,MAAMnB,EAAYnb,EAAIsV,GAAGiF,EAAKqC,uBAAuBjC,GAAM3a,EAAI4H,aAG/E,OAAQ2S,EAAKsC,oBAAoBlC,GAAM+B,CACzC,GAyDaxJ,OAtDf,MACE1S,cACEI,KAAK+Z,IAAMJ,EAAKuC,aACZxC,IAAU1Z,KAAKmc,KAAO,IACtBzC,GAAUA,EAASoB,SAAS9a,KAAM,CAAC,EAAGA,KAAK+Z,KAAM/Z,KACvD,CAEAoc,QACEzC,EAAK0C,aAAarc,KAAK+Z,KACnBL,IAAU1Z,KAAKmc,KAAKnV,OAAS,EACnC,CAEAsM,QACE,OAAOqG,EAAK2C,aAAatc,KAAK+Z,IAChC,CAEAxG,OACMmG,IAAU1Z,KAAKmc,KAAKnV,OAAS,GACjChH,KAAK+Z,IAAMJ,EAAKgB,YAAY3a,KAAK+Z,KAC7BL,GAAUA,EAASqB,WAAW/a,KACpC,CAEAwS,MAAMuD,EAAU,CAAC,GACfA,EAAUmE,EAAYuB,KAAKc,UAAUxG,IAEjC2D,IAAU1Z,KAAKmc,KAAKnV,OAAS,GACjC,MAAM+S,EAAM3a,EAAIwb,MAAM7E,EAAQ/O,QAC9B5H,EAAIsV,GAAGqF,EAAKhE,EAAQ/O,QAAQ1D,IAAIyS,GAChC4D,EAAK6C,aAAaxc,KAAK+Z,IAAKA,EAAKhE,EAAQ/O,OAC3C,CAEAqM,OAAOnB,EAAMtC,EAAMc,GACjBd,EAAOsK,EAAYtK,GACnB,MAAMmG,EAAUrF,GAAQ,CAAC,EACrBgJ,GAAU1Z,KAAKmc,KAAK/O,KAAK8E,GAC7B,MAAM6H,EAAM3a,EAAIwb,MAAMhL,EAAK5I,QAC3B5H,EAAIsV,GAAGqF,EAAKnK,EAAK5I,QAAQ1D,IAAIsM,GAC7B,MAAM6M,EAAa,MAAO1G,GAAa,MAAOA,GAAa,MAAOA,EAClE4D,EAAK+C,cAAc1c,KAAK+Z,IAAK7H,EAAK6H,IAAKA,EAAKnK,EAAK5I,OAAyB,MAAjB+O,EAAQtS,MAAgByO,EAAKzO,MAAQsS,EAAQtS,MAAOgZ,EAAW1G,EAAQ5U,EAAG4U,EAAQ3U,EAAG2U,EAAQ1U,EACxJ,CAEA4Q,UAAU9Q,EAAGC,EAAGC,GACd,MAAM0Y,EAAMJ,EAAKgD,iBAAiB3c,KAAK+Z,IAAK5Y,EAAGC,EAAGC,GAE5CgQ,EAAc,CAClBxR,MAAO8Z,EAAKiD,uBAAuB7C,GACnCja,OAAQ6Z,EAAKkD,wBAAwB9C,GACrClJ,OAAQzR,EAAIsV,GAAGiF,EAAKmD,wBAAwB/C,GAAM3a,EAAI4H,UAAU1E,SAGlE,OAAQqX,EAAKoD,sBAAsBhD,GAAM1I,CAC3C,GAIJ,E,gBC5IF,MAAM,QAAE9R,GAAY,EAAQ,KAE5B,IAAI4Z,EAAM,KACVpa,EAAOD,QAAU,CACfgQ,aACE,IAAKqK,EAAK,CACR,MAAMC,EAAY,qBAAsBC,YACxCF,QAAYE,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiC/Z,uBAA6Bga,MAAKxY,GAAKqY,EAAYrY,EAAIA,EAAEyY,gBAC7K,CAEA,OAAOxZ,KAAKyZ,KACd,EAEAA,MACE,MAAMuD,EAAU,IAAIC,IACd9F,EAAc,IAAInF,YAElB2H,EAAO,IAAIN,YAAYO,SAAST,EAAK,CACzC+D,IAAK,CACHC,eAAeC,EAAIrD,GACjBiD,EAAQK,IAAID,GAAIE,GAAGle,EAAIsV,GAAGqF,EAAK3a,EAAI4H,UAAU1E,QAC/C,KAEDxD,QAEH,MAAMM,EACJ8B,gBAAkB,OAAOyY,EAAKE,MAAQ,CACtC3Y,aAAa4Q,GAAQ,OAAO6H,EAAKG,OAAOhI,EAAO,CAC/C5Q,YAAY6Y,EAAKjI,GAAQ,OAAO6H,EAAKK,MAAMD,EAAKjI,EAAO,CACvD5Q,UAAU6Y,EAAKjI,GAAQ,OAAO,IAAIwD,WAAWqE,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAC7E5Q,WAAW6Y,EAAKjI,GAAQ,OAAO,IAAItR,YAAYmZ,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAE/E5Q,qBAAqB6Y,EAAKjI,GACxB,IAAIxP,EAAQlD,EAAIsV,GAAGqF,EAAKjI,GAAMxP,QAC9B,OAAQqX,EAAKK,MAAMD,EAAKjI,GAAOxP,CACjC,EA+FF,MAAO,CAAEkS,QA5FT,MACE5U,YAAYC,EAAOC,EAAQyd,GAAQ,GACjCvd,KAAKwd,OAAS,GACdR,EAAQ1Z,IAAI,EAAGtD,MACfA,KAAK+Z,IAAMJ,EAAK8D,YAAY,EAAG5d,EAAOC,EAAQyd,EAChD,CAEAD,GAAGzM,GACD7Q,KAAKwd,OAAOpQ,KAAKyD,EACnB,CAEA0C,OACEvT,KAAK+Z,IAAMJ,EAAK+D,aAAa1d,KAAK+Z,KAClCiD,EAAQW,OAAO,EACjB,CAEAjJ,KACE1U,KAAKuT,OACL,IAAIvS,EAAS,EACb,MAAM0T,EAAK,IAAIY,WAAWtV,KAAKwd,OAAOnJ,QAAO,CAACuJ,EAAK/F,IAAU+F,EAAM/F,EAAM7Q,QAAQ,IAEjF,IAAK,MAAMjG,KAAKf,KAAKwd,OACnB9I,EAAGpR,IAAIvC,EAAGC,GACVA,GAAUD,EAAEiG,OAGd,OAAO0N,CACT,CAEAD,IAAI1T,EAAGD,EAAGmU,EAAOpV,EAAOC,EAAQ+Q,EAAQqE,EAASzE,GAC/C,MAAMsJ,EAAM3a,EAAIwb,MAAM/J,EAAO7J,QAC7B5H,EAAIsV,GAAGqF,EAAKlJ,EAAO7J,QAAQ1D,IAAIuN,GAC/B8I,EAAKkE,YAAY7d,KAAK+Z,IAAKA,EAAKlJ,EAAO7J,OAAQjG,EAAGD,EAAGjB,EAAOC,EAAQmV,EAAOC,EAASzE,EACtF,CAEIjB,YAAQA,GACV,MAAMqB,EAASsG,EAAY1H,OAAOD,GAE5BuK,EAAM3a,EAAIwb,MAAM/J,EAAO7J,QAC7B5H,EAAIsV,GAAGqF,EAAKlJ,EAAO7J,QAAQ1D,IAAIuN,GAC/B8I,EAAKmE,oBAAoB9d,KAAK+Z,IAAKA,EAAKlJ,EAAO7J,OACjD,CAEI+W,gBAAYA,GACd,MAAMlN,EAASsG,EAAY1H,OAAOsO,GAE5BhE,EAAM3a,EAAIwb,MAAM/J,EAAO7J,QAC7B5H,EAAIsV,GAAGqF,EAAKlJ,EAAO7J,QAAQ1D,IAAIuN,GAC/B8I,EAAKqE,wBAAwBhe,KAAK+Z,IAAKA,EAAKlJ,EAAO7J,OACrD,GA2CgB8N,QAxClB,MACElV,YAAYiR,EAAQoN,EAAQ,GAC1B,MAAMC,EAAO9e,EAAIwb,MAAM/J,EAAO7J,QAG9B,GAFA5H,EAAIsV,GAAGwJ,EAAMrN,EAAO7J,QAAQ1D,IAAIuN,GAChC7Q,KAAK+Z,IAAMJ,EAAKwE,YAAYD,EAAMrN,EAAO7J,OAAQiX,GAC7C,IAAMje,KAAK+Z,IAAK,MAAM,IAAIxV,MAAM,mCAEpCvE,KAAKH,MAAQ8Z,EAAKyE,cAAcpe,KAAK+Z,KACrC/Z,KAAKF,OAAS6Z,EAAK0E,eAAere,KAAK+Z,IACzC,CAEAxG,OACEvT,KAAK+Z,IAAMJ,EAAK2E,aAAate,KAAK+Z,IACpC,CAEA,UACE,IAAIjG,EACJ,KAAOA,EAAQ9T,KAAK8T,eAAeA,CACrC,CAEAA,QACE,MAAMiG,EAAMJ,EAAK4E,cAAcve,KAAK+Z,KAEpC,GAAI,IAAMA,EAAK,OAAO,KACtB,GAAI,IAAMA,EAAK,MAAO/Z,KAAKuT,OAAQ,IAAIhP,MAAM,+BAE7C,MAAM8M,EAAc,CAClBtQ,EAAG4Y,EAAK6E,gBAAgBzE,GACxBjZ,EAAG6Y,EAAK8E,gBAAgB1E,GACxB9E,MAAO0E,EAAK+E,oBAAoB3E,GAChCla,MAAO8Z,EAAKgF,oBAAoB5E,GAChCja,OAAQ6Z,EAAKiF,qBAAqB7E,GAClC7E,QAASyE,EAAKkF,sBAAsB9E,GACpClJ,OAAQzR,EAAIsV,GAAGiF,EAAKmF,qBAAqB/E,GAAM3a,EAAI4H,UAAU1E,SAG/D,OAAQqX,EAAKoF,mBAAmBhF,GAAM1I,CACxC,GAIJ,E,gBCnIF,MAAM,QAAE9R,GAAY,EAAQ,KAE5B,IAAI4Z,EAAM,KACVpa,EAAOD,QAAU,CACfgQ,aACE,IAAKqK,EAAK,CACR,MAAMC,EAAY,qBAAsBC,YACxCF,QAAYE,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiC/Z,wBAA8Bga,MAAKxY,GAAKqY,EAAYrY,EAAIA,EAAEyY,gBAC9K,CAEA,OAAOxZ,KAAKyZ,KACd,EAEAA,MACE,MAAME,EAAO,IAAIN,YAAYO,SAAST,GAAKra,QAE3C,MAAMM,EACJ8B,gBAAkB,OAAOyY,EAAKE,MAAQ,CACtC3Y,aAAa4Q,GAAQ,OAAO6H,EAAKG,OAAOhI,EAAO,CAC/C5Q,YAAY6Y,EAAKjI,GAAQ,OAAO6H,EAAKK,MAAMD,EAAKjI,EAAO,CACvD5Q,UAAU6Y,EAAKjI,GAAQ,OAAO,IAAIwD,WAAWqE,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAC7E5Q,WAAW6Y,EAAKjI,GAAQ,OAAO,IAAItR,YAAYmZ,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAE/E5Q,qBAAqB6Y,EAAKjI,GACxB,IAAIxP,EAAQlD,EAAIsV,GAAGqF,EAAKjI,GAAMxP,QAC9B,OAAQqX,EAAKK,MAAMD,EAAKjI,GAAOxP,CACjC,EA2BF,MAAO,CAAEmN,OAxBT,SAAgBoB,EAAQhR,EAAOC,EAAQ2Q,GACrC,MAAMsJ,EAAM3a,EAAIwb,MAAM/J,EAAO7J,QAE7B,OADA5H,EAAIsV,GAAGqF,EAAKlJ,EAAO7J,QAAQ1D,IAAIuN,GACxBzR,EAAI4f,cAAcrF,EAAKlK,OAAOsK,EAAKla,EAAOC,EAAQ2Q,GAAUrR,EAAI4H,SACzE,EAoBiBmK,OAlBjB,SAAgBN,EAAQhR,EAAOC,GAC7B,MAAMoe,EAAO9e,EAAIwb,MAAM/J,EAAO7J,QAC9B5H,EAAIsV,GAAGwJ,EAAMrN,EAAO7J,QAAQ1D,IAAIuN,GAChC,MAAMkJ,EAAMJ,EAAKxI,OAAO+M,EAAMrN,EAAO7J,OAAQnH,EAAOC,GAEpD,GAAI,IAAMia,EAAK,MAAM,IAAIxV,MAAM,yBAC/B,GAAI,IAAMwV,EAAK,MAAM,IAAIxV,MAAM,gCAE/B,MAAM8M,EAAc,CAClBxR,MAAO8Z,EAAKsF,aAAalF,GACzBja,OAAQ6Z,EAAKuF,cAAcnF,GAC3BxI,OAAQoI,EAAKwF,cAAcpF,GAC3BlJ,OAAQzR,EAAIsV,GAAGiF,EAAKyF,cAAcrF,GAAM3a,EAAI4H,UAAU1E,SAGxD,OAAQqX,EAAK0F,YAAYtF,GAAM1I,CACjC,EAGF,E,gBCtDF,MAAM,QAAE9R,GAAY,EAAQ,KAE5B,IAAI4Z,EAAM,KACVpa,EAAOD,QAAU,CACfgQ,aACE,IAAKqK,EAAK,CACR,MAAMC,EAAY,qBAAsBC,YACxCF,QAAYE,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiC/Z,uBAA6Bga,MAAKxY,GAAKqY,EAAYrY,EAAIA,EAAEyY,gBAC7K,CAEA,OAAOxZ,KAAKyZ,KACd,EAEAA,MACE,MAAME,EAAO,IAAIN,YAAYO,SAAST,GAAKra,QAE3C,MAAMM,EACJ8B,gBAAkB,OAAOyY,EAAKE,MAAQ,CACtC3Y,aAAa4Q,GAAQ,OAAO6H,EAAKG,OAAOhI,EAAO,CAC/C5Q,YAAY6Y,EAAKjI,GAAQ,OAAO6H,EAAKK,MAAMD,EAAKjI,EAAO,CACvD5Q,UAAU6Y,EAAKjI,GAAQ,OAAO,IAAIwD,WAAWqE,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAC7E5Q,WAAW6Y,EAAKjI,GAAQ,OAAO,IAAItR,YAAYmZ,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAE/E5Q,qBAAqB6Y,EAAKjI,GACxB,IAAIxP,EAAQlD,EAAIsV,GAAGqF,EAAKjI,GAAMxP,QAC9B,OAAQqX,EAAKK,MAAMD,EAAKjI,GAAOxP,CACjC,EAoBF,MAAO,CAAE2P,UAjBT,SAAmBpB,EAAQ3M,EAAKT,GAC9B,MAAMya,EAAO9e,EAAIwb,MAAM/J,EAAO7J,QAC9B5H,EAAIsV,GAAGwJ,EAAMrN,EAAO7J,QAAQ1D,IAAIuN,GAChC,MAAMkJ,EAAMJ,EAAK1H,UAAUiM,EAAMrN,EAAO7J,OAAQ9C,EAAKT,GAErD,GAAI,IAAMsW,EAAK,MAAM,IAAIxV,MAAM,wBAC/B,GAAI,IAAMwV,EAAK,MAAM,IAAIxV,MAAM,4BAE/B,MAAM8M,EAAc,CAClBxR,MAAO8Z,EAAK2F,gBAAgBvF,GAC5Bja,OAAQ6Z,EAAK4F,iBAAiBxF,GAC9BlJ,OAAQzR,EAAIsV,GAAGiF,EAAK6F,iBAAiBzF,GAAM3a,EAAI4H,UAAU1E,SAG3D,OAAQqX,EAAK8F,eAAe1F,GAAM1I,CACpC,EAGF,E,gBC/CF,MAAM,QAAE9R,GAAY,EAAQ,KAE5B,IAAI4Z,EAAM,KACVpa,EAAOD,QAAU,CAChBgQ,aACC,IAAKqK,EAAK,CACT,MAAMC,EAAY,qBAAsBC,YACxCF,QAAYE,YAAaD,EAAwB,mBAAZ,iBAAsCE,MAAM,iCAAiC/Z,wBAA8Bga,MAAKxY,GAAKqY,EAAYrY,EAAIA,EAAEyY,gBAC7K,CAEA,OAAOxZ,KAAKyZ,KACb,EAEAA,MACC,MAAME,EAAO,IAAIN,YAAYO,SAAST,GAAKra,QAE3C,MAAMM,EACL8B,gBAAkB,OAAOyY,EAAKE,MAAQ,CACtC3Y,aAAa4Q,GAAQ,OAAO6H,EAAKG,OAAOhI,EAAO,CAC/C5Q,YAAY6Y,EAAKjI,GAAQ,OAAO6H,EAAKK,MAAMD,EAAKjI,EAAO,CACvD5Q,UAAU6Y,EAAKjI,GAAQ,OAAO,IAAIwD,WAAWqE,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAC7E5Q,WAAW6Y,EAAKjI,GAAQ,OAAO,IAAItR,YAAYmZ,EAAKM,OAAOpJ,OAAQkJ,EAAKjI,EAAO,CAE/E5Q,qBAAqB6Y,EAAKjI,GACzB,IAAIxP,EAAQlD,EAAIsV,GAAGqF,EAAKjI,GAAMxP,QAC9B,OAAQqX,EAAKK,MAAMD,EAAKjI,GAAOxP,CAChC,EAkBD,MAAO,CAAE6O,OAfT,SAAgBN,GACf,MAAMqN,EAAO9e,EAAIwb,MAAM/J,EAAO7J,QAC9B5H,EAAIsV,GAAGwJ,EAAMrN,EAAO7J,QAAQ1D,IAAIuN,GAChC,MAAMkJ,EAAMJ,EAAKxI,OAAO+M,EAAMrN,EAAO7J,QACrC,GAAI,IAAM+S,EAAK,MAAM,IAAIxV,MAAM,0BAE/B,MAAM8M,EAAc,CACnBxR,MAAO8Z,EAAKsF,aAAalF,GACzBja,OAAQ6Z,EAAKuF,cAAcnF,GAC3BlJ,OAAQzR,EAAIsV,GAAGiF,EAAKyF,cAAcrF,GAAM3a,EAAI4H,UAAU1E,SAGvD,OAAQqX,EAAK0F,YAAYtF,GAAM1I,CAChC,EAGD,E,UC3BD,IAAIqD,EAAKY,WACLoK,EAAMC,YACNtK,EAAM7U,YACNof,EAAO,IAAIlL,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAC5GmL,EAAO,IAAInL,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,IACpHoL,EAAO,IAAIpL,EAAG,CAAC,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,KAC7EqL,EAAO,SAAUhS,EAAItI,GAEvB,IADA,IAAIpE,EAAI,IAAIqe,EAAI,IACP3Y,EAAI,EAAGA,EAAI,KAAMA,EACxB1F,EAAE0F,GAAKtB,GAAS,GAAKsI,EAAGhH,EAAI,GAE9B,IAAI5F,EAAI,IAAIkU,EAAIhU,EAAE,KAClB,IAAS0F,EAAI,EAAGA,EAAI,KAAMA,EACxB,IAAK,IAAIiZ,EAAI3e,EAAE0F,GAAIiZ,EAAI3e,EAAE0F,EAAI,KAAMiZ,EACjC7e,EAAE6e,GAAKA,EAAI3e,EAAE0F,IAAM,EAAIA,EAG3B,MAAO,CAAC1F,EAAGF,EACb,EACI8e,EAAKF,EAAKH,EAAM,GAChBM,EAAKD,EAAG,GACRE,EAAQF,EAAG,GACfC,EAAG,IAAM,IAAKC,EAAM,KAAO,GAK3B,IAJA,IAUIpf,EAVAqf,EAAKL,EAAKF,EAAM,GAChBQ,EAAKD,EAAG,GACRE,EAAQF,EAAG,GACXG,EAAM,IAAIb,EAAI,OACT3Y,EAAI,EAAGA,EAAI,QAASA,EAG3BhG,GAAS,OADTA,GAAS,OADTA,GAAS,MAAJgG,KAAe,GAAS,MAAJA,IAAc,MACnB,GAAS,MAAJhG,IAAc,MACnB,GAAS,KAAJA,IAAa,EACtCwf,EAAIxZ,KAAW,MAAJhG,KAAe,GAAS,IAAJA,IAAY,KAAO,EAGpD,IAAIyf,EAAO,SAAUC,EAAIC,EAAIvf,GAI3B,IAHA,IAAIM,EAAIgf,EAAGzZ,OACPD,EAAI,EACJrF,EAAI,IAAIge,EAAIgB,GACT3Z,EAAItF,IAAKsF,IACZrF,EAAE+e,EAAG1Z,GAAK,GACd,IAII4Z,EAJAC,EAAK,IAAIlB,EAAIgB,GACjB,IAAK3Z,EAAI,EAAGA,EAAI2Z,IAAM3Z,EACpB6Z,EAAG7Z,GAAK6Z,EAAG7Z,EAAI,GAAKrF,EAAEqF,EAAI,IAAM,EAGlC,GAAI5F,EAAG,CACLwf,EAAK,IAAIjB,EAAI,GAAKgB,GAClB,IAAIG,EAAM,GAAKH,EACf,IAAK3Z,EAAI,EAAGA,EAAItF,IAAKsF,EACnB,GAAI0Z,EAAG1Z,GAIL,IAHA,IAAI+Z,EAAK/Z,GAAK,EAAI0Z,EAAG1Z,GACjBga,EAAML,EAAKD,EAAG1Z,GACd2B,EAAIkY,EAAGH,EAAG1Z,GAAK,MAAQga,EAClBC,EAAItY,GAAK,GAAKqY,GAAO,EAAGrY,GAAKsY,IAAKtY,EACzCiY,EAAGJ,EAAI7X,KAAOmY,GAAOC,CAI7B,MAEE,IADAH,EAAK,IAAIjB,EAAIje,GACRsF,EAAI,EAAGA,EAAItF,IAAKsF,EACf0Z,EAAG1Z,KACL4Z,EAAG5Z,GAAKwZ,EAAIK,EAAGH,EAAG1Z,GAAK,QAAU,GAAK0Z,EAAG1Z,IAI/C,OAAO4Z,CACT,EACIM,EAAM,IAAIvM,EAAG,KACjB,IAAS3N,EAAI,EAAGA,EAAI,MAAOA,EACzBka,EAAIla,GAAK,EACX,IAASA,EAAI,IAAKA,EAAI,MAAOA,EAC3Bka,EAAIla,GAAK,EACX,IAASA,EAAI,IAAKA,EAAI,MAAOA,EAC3Bka,EAAIla,GAAK,EACX,IAASA,EAAI,IAAKA,EAAI,MAAOA,EAC3Bka,EAAIla,GAAK,EACX,IAAIma,EAAM,IAAIxM,EAAG,IACjB,IAAS3N,EAAI,EAAGA,EAAI,KAAMA,EACxBma,EAAIna,GAAK,EACX,IAAIoa,EAAMX,EAAKS,EAAK,EAAG,GACnBG,EAAOZ,EAAKS,EAAK,EAAG,GACpBI,EAAMb,EAAKU,EAAK,EAAG,GACnBI,EAAOd,EAAKU,EAAK,EAAG,GACpBrf,EAAM,SAAUP,GAElB,IADA,IAAI0f,EAAI1f,EAAE,GACDyF,EAAI,EAAGA,EAAIzF,EAAE0F,SAAUD,EAC1BzF,EAAEyF,GAAKia,IACTA,EAAI1f,EAAEyF,IAEV,OAAOia,CACT,EACIO,EAAO,SAAUpf,EAAGJ,EAAGif,GACzB,IAAIQ,EAAIzf,GAAK,EAAI,EACjB,OAAQI,EAAEqf,GAAKrf,EAAEqf,EAAI,IAAM,KAAW,EAAJzf,GAASif,CAC7C,EACIS,EAAS,SAAUtf,EAAGJ,GACxB,IAAIyf,EAAIzf,GAAK,EAAI,EACjB,OAAQI,EAAEqf,GAAKrf,EAAEqf,EAAI,IAAM,EAAIrf,EAAEqf,EAAI,IAAM,MAAY,EAAJzf,EACrD,EACI2f,EAAO,SAAU3f,GACnB,OAAQA,GAAK,EAAI,IAAU,EAAJA,GAAS,EAClC,EACI4f,EAAM,SAAUjZ,EAAGjH,EAAG6K,IACf,MAAL7K,GAAaA,EAAI,KACnBA,EAAI,IACG,MAAL6K,GAAaA,EAAI5D,EAAE1B,UACrBsF,EAAI5D,EAAE1B,QACR,IAAI4a,EAAI,IAAKlZ,aAAagX,EAAMA,EAAMhX,aAAa2M,EAAMA,EAAMX,GAAIpI,EAAI7K,GAEvE,OADAmgB,EAAEte,IAAIoF,EAAE/F,SAASlB,EAAG6K,IACbsV,CACT,EA6IIC,EAAQ,SAAU1f,EAAGJ,EAAG2G,GAC1BA,IAAU,EAAJ3G,EACN,IAAIyf,EAAIzf,GAAK,EAAI,EACjBI,EAAEqf,IAAM9Y,EACRvG,EAAEqf,EAAI,IAAM9Y,IAAM,CACpB,EACIoZ,EAAU,SAAU3f,EAAGJ,EAAG2G,GAC5BA,IAAU,EAAJ3G,EACN,IAAIyf,EAAIzf,GAAK,EAAI,EACjBI,EAAEqf,IAAM9Y,EACRvG,EAAEqf,EAAI,IAAM9Y,IAAM,EAClBvG,EAAEqf,EAAI,IAAM9Y,IAAM,EACpB,EACIqZ,EAAQ,SAAU5f,EAAGue,GAEvB,IADA,IAAIze,EAAI,GACC8E,EAAI,EAAGA,EAAI5E,EAAE6E,SAAUD,EAC1B5E,EAAE4E,IACJ9E,EAAEmL,KAAK,CAAE3L,EAAMugB,EAAG7f,EAAE4E,KAExB,IAAItF,EAAIQ,EAAE+E,OACNib,EAAKhgB,EAAEK,QACX,IAAKb,EACH,MAAO,CAACygB,EAAI,GACd,GAAU,IAANzgB,EAAS,CACX,IAAIiH,EAAI,IAAIgM,EAAGzS,EAAE,GAAGR,EAAI,GAExB,OADAiH,EAAEzG,EAAE,GAAGR,GAAK,EACL,CAACiH,EAAG,EACb,CACAzG,EAAEmK,MAAK,SAAU9K,EAAGD,GAClB,OAAOC,EAAE0gB,EAAI3gB,EAAE2gB,CACjB,IACA/f,EAAEmL,KAAK,CAAE3L,GAAI,EAAGugB,EAAG,QACnB,IAAItgB,EAAIO,EAAE,GAAId,EAAIc,EAAE,GAAIkgB,EAAK,EAAGC,EAAK,EAAGC,EAAK,EAE7C,IADApgB,EAAE,GAAK,CAAER,GAAI,EAAGugB,EAAGtgB,EAAEsgB,EAAI7gB,EAAE6gB,EAAGtgB,EAAGP,KAC1BihB,IAAO3gB,EAAI,GAChBC,EAAIO,EAAEA,EAAEkgB,GAAIH,EAAI/f,EAAEogB,GAAIL,EAAIG,IAAOE,KACjClhB,EAAIc,EAAEkgB,IAAOC,GAAMngB,EAAEkgB,GAAIH,EAAI/f,EAAEogB,GAAIL,EAAIG,IAAOE,KAC9CpgB,EAAEmgB,KAAQ,CAAE3gB,GAAI,EAAGugB,EAAGtgB,EAAEsgB,EAAI7gB,EAAE6gB,EAAGtgB,EAAGP,KAEtC,IAAImhB,EAASL,EAAG,GAAGxgB,EACnB,IAASsF,EAAI,EAAGA,EAAItF,IAAKsF,EACnBkb,EAAGlb,GAAGtF,EAAI6gB,IACZA,EAASL,EAAGlb,GAAGtF,GAEnB,IAAI8gB,EAAK,IAAI7C,EAAI4C,EAAS,GACtBE,EAAMC,EAAGxgB,EAAEmgB,EAAK,GAAIG,EAAI,GAC5B,GAAIC,EAAM9B,EAAI,CACR3Z,EAAI,EAAR,IAAW2b,EAAK,EACZC,EAAMH,EAAM9B,EAAIkC,EAAM,GAAKD,EAI/B,IAHAV,EAAG7V,MAAK,SAAU9K,EAAGD,GACnB,OAAOkhB,EAAGlhB,EAAEI,GAAK8gB,EAAGjhB,EAAEG,IAAMH,EAAE0gB,EAAI3gB,EAAE2gB,CACtC,IACOjb,EAAItF,IAAKsF,EAAG,CACjB,IAAI8b,EAAOZ,EAAGlb,GAAGtF,EACjB,KAAI8gB,EAAGM,GAAQnC,GAIb,MAHAgC,GAAME,GAAO,GAAKJ,EAAMD,EAAGM,IAC3BN,EAAGM,GAAQnC,CAGf,CAEA,IADAgC,KAAQC,EACDD,EAAK,GAAG,CACb,IAAII,EAAOb,EAAGlb,GAAGtF,EACb8gB,EAAGO,GAAQpC,EACbgC,GAAM,GAAKhC,EAAK6B,EAAGO,KAAU,IAE3B/b,CACN,CACA,KAAOA,GAAK,GAAK2b,IAAM3b,EAAG,CACxB,IAAIgc,EAAOd,EAAGlb,GAAGtF,EACb8gB,EAAGQ,KAAUrC,MACb6B,EAAGQ,KACHL,EAEN,CACAF,EAAM9B,CACR,CACA,MAAO,CAAC,IAAIhM,EAAG6N,GAAKC,EACtB,EACIC,EAAK,SAAUb,EAAGlgB,EAAGS,GACvB,OAAgB,IAATyf,EAAEngB,EAAWE,KAAKE,IAAI4gB,EAAGb,EAAElgB,EAAGA,EAAGS,EAAI,GAAIsgB,EAAGb,EAAEzgB,EAAGO,EAAGS,EAAI,IAAMT,EAAEkgB,EAAEngB,GAAKU,CAChF,EACI6gB,EAAK,SAAUjK,GAEjB,IADA,IAAItX,EAAIsX,EAAE/R,OACHvF,IAAMsX,IAAItX,KAOjB,IALA,IAAIwhB,EAAK,IAAIvD,IAAMje,GACfyhB,EAAM,EAAGC,EAAMpK,EAAE,GAAIqK,EAAM,EAC3BjZ,EAAI,SAAUzB,GAChBua,EAAGC,KAASxa,CACd,EACS3B,EAAI,EAAGA,GAAKtF,IAAKsF,EACxB,GAAIgS,EAAEhS,KAAOoc,GAAOpc,IAAMtF,IACtB2hB,MACC,CACH,IAAKD,GAAOC,EAAM,EAAG,CACnB,KAAOA,EAAM,IAAKA,GAAO,IACvBjZ,EAAE,OACAiZ,EAAM,IACRjZ,EAAEiZ,EAAM,GAAKA,EAAM,IAAM,EAAI,MAAQA,EAAM,GAAK,EAAI,OACpDA,EAAM,EAEV,MAAO,GAAIA,EAAM,EAAG,CAElB,IADAjZ,EAAEgZ,KAAQC,EACHA,EAAM,EAAGA,GAAO,EACrBjZ,EAAE,MACAiZ,EAAM,IACRjZ,EAAEiZ,EAAM,GAAK,EAAI,MAAOA,EAAM,EAClC,CACA,KAAOA,KACLjZ,EAAEgZ,GACJC,EAAM,EACND,EAAMpK,EAAEhS,EACV,CAEF,MAAO,CAACkc,EAAGtgB,SAAS,EAAGugB,GAAMzhB,EAC/B,EACI4hB,EAAO,SAAUC,EAAIL,GAEvB,IADA,IAAIvhB,EAAI,EACCqF,EAAI,EAAGA,EAAIkc,EAAGjc,SAAUD,EAC/BrF,GAAK4hB,EAAGvc,GAAKkc,EAAGlc,GAClB,OAAOrF,CACT,EACI6hB,EAAQ,SAAUzZ,EAAK0Z,EAAKC,GAC9B,IAAIhiB,EAAIgiB,EAAIzc,OACRwa,EAAIE,EAAK8B,EAAM,GACnB1Z,EAAI0X,GAAS,IAAJ/f,EACTqI,EAAI0X,EAAI,GAAK/f,IAAM,EACnBqI,EAAI0X,EAAI,GAAc,IAAT1X,EAAI0X,GACjB1X,EAAI0X,EAAI,GAAkB,IAAb1X,EAAI0X,EAAI,GACrB,IAAK,IAAIza,EAAI,EAAGA,EAAItF,IAAKsF,EACvB+C,EAAI0X,EAAIza,EAAI,GAAK0c,EAAI1c,GACvB,OAAqB,GAAbya,EAAI,EAAI/f,EAClB,EACIiiB,EAAO,SAAUD,EAAK3Z,EAAK6Z,EAAOC,EAAMC,EAAIC,EAAI/V,EAAIgW,EAAIC,EAAIvN,EAAI1U,GAClE8f,EAAM/X,EAAK/H,IAAK4hB,KACdE,EAAG,KAML,IALA,IAAII,EAAMlC,EAAM8B,EAAI,IAAKK,EAAMD,EAAI,GAAIE,EAAMF,EAAI,GAC7CG,EAAMrC,EAAM+B,EAAI,IAAKO,EAAMD,EAAI,GAAIE,EAAMF,EAAI,GAC7CG,EAAKvB,EAAGkB,GAAMM,EAAOD,EAAG,GAAIE,EAAMF,EAAG,GACrCG,EAAK1B,EAAGqB,GAAMM,EAAOD,EAAG,GAAIE,EAAMF,EAAG,GACrCG,EAAS,IAAInF,EAAI,IACZ3Y,EAAI,EAAGA,EAAIyd,EAAKxd,SAAUD,EACjC8d,EAAiB,GAAVL,EAAKzd,MACd,IAASA,EAAI,EAAGA,EAAI4d,EAAK3d,SAAUD,EACjC8d,EAAiB,GAAVF,EAAK5d,MAGd,IAFA,IAAI+d,EAAK/C,EAAM8C,EAAQ,GAAIE,EAAMD,EAAG,GAAIE,EAAOF,EAAG,GAC9CG,EAAO,GACJA,EAAO,IAAMF,EAAIjF,EAAKmF,EAAO,MAAOA,GAE3C,IAKIC,EAAIC,EAAIC,EAAIC,EALZC,EAAO7O,EAAK,GAAK,EACjB8O,EAAQlC,EAAKQ,EAAI5C,GAAOoC,EAAKS,EAAI5C,GAAOnT,EACxCyX,EAAQnC,EAAKQ,EAAIK,GAAOb,EAAKS,EAAIO,GAAOtW,EAAK,GAAK,EAAIkX,EAAO5B,EAAKwB,EAAQE,IAAQ,EAAIF,EAAO,IAAM,EAAIA,EAAO,IAAM,EAAIA,EAAO,KACnI,GAAIS,GAAQC,GAASD,GAAQE,EAC3B,OAAOjC,EAAMzZ,EAAK/H,EAAG0hB,EAAI9gB,SAASqhB,EAAIA,EAAKvN,IAG7C,GADAoL,EAAM/X,EAAK/H,EAAG,GAAKyjB,EAAQD,IAASxjB,GAAK,EACrCyjB,EAAQD,EAAO,CACjBL,EAAK1E,EAAK0D,EAAKC,EAAK,GAAIgB,EAAKjB,EAAKkB,EAAK5E,EAAK6D,EAAKC,EAAK,GAAIe,EAAKhB,EAC/D,IAAIoB,EAAMjF,EAAKuE,EAAKC,EAAM,GAK1B,IAJAnD,EAAM/X,EAAK/H,EAAG0iB,EAAM,KACpB5C,EAAM/X,EAAK/H,EAAI,EAAG6iB,EAAM,GACxB/C,EAAM/X,EAAK/H,EAAI,GAAIkjB,EAAO,GAC1BljB,GAAK,GACIgF,EAAI,EAAGA,EAAIke,IAAQle,EAC1B8a,EAAM/X,EAAK/H,EAAI,EAAIgF,EAAGge,EAAIjF,EAAK/Y,KACjChF,GAAK,EAAIkjB,EAET,IADA,IAAIS,EAAO,CAAClB,EAAMG,GACTgB,EAAK,EAAGA,EAAK,IAAKA,EACzB,KAAIC,GAAOF,EAAKC,GAChB,IAAS5e,EAAI,EAAGA,EAAI6e,GAAK5e,SAAUD,EAAG,CACpC,IAAI8e,GAAgB,GAAVD,GAAK7e,GACf8a,EAAM/X,EAAK/H,EAAG0jB,EAAII,KAAO9jB,GAAKgjB,EAAIc,IAC9BA,GAAM,KACRhE,EAAM/X,EAAK/H,EAAG6jB,GAAK7e,KAAO,EAAI,KAAMhF,GAAK6jB,GAAK7e,KAAO,GACzD,CANmB,CAQvB,MACEme,EAAK/D,EAAKgE,EAAKlE,EAAKmE,EAAK/D,EAAKgE,EAAKnE,EAErC,IAASna,EAAI,EAAGA,EAAIgd,IAAMhd,EACxB,GAAI6c,EAAK7c,GAAK,IAAK,CACb8e,GAAMjC,EAAK7c,KAAO,GAAK,GAC3B+a,EAAQhY,EAAK/H,EAAGmjB,EAAGW,GAAM,MAAO9jB,GAAKojB,EAAGU,GAAM,KAC1CA,GAAM,IACRhE,EAAM/X,EAAK/H,EAAG6hB,EAAK7c,KAAO,GAAK,IAAKhF,GAAK6d,EAAKiG,KAChD,IAAIC,GAAgB,GAAVlC,EAAK7c,GACf+a,EAAQhY,EAAK/H,EAAGqjB,EAAGU,KAAO/jB,GAAKsjB,EAAGS,IAC9BA,GAAM,IACRhE,EAAQhY,EAAK/H,EAAG6hB,EAAK7c,KAAO,EAAI,MAAOhF,GAAK8d,EAAKiG,IACrD,MACEhE,EAAQhY,EAAK/H,EAAGmjB,EAAGtB,EAAK7c,KAAMhF,GAAKojB,EAAGvB,EAAK7c,IAI/C,OADA+a,EAAQhY,EAAK/H,EAAGmjB,EAAG,MACZnjB,EAAIojB,EAAG,IAChB,EACIY,EAAM,IAAI1Q,EAAI,CAAC,MAAO,OAAQ,OAAQ,OAAQ,OAAQ,QAAS,QAAS,QAAS,UACjF6M,EAAK,IAAIxN,EAAG,GAiIhB,SAASsR,EAASrV,EAAMsV,GACjBA,IACHA,EAAO,CAAC,GACV,IAAI3kB,EAxCM,WACV,IAAIA,EAAI,EAAGD,EAAI,EACf,MAAO,CACLU,EAAG,SAAUI,GAGX,IAFA,IAAIyf,EAAItgB,EAAG0f,EAAI3f,EACXK,EAAe,EAAXS,EAAE6E,OACDD,EAAI,EAAGA,IAAMrF,GAAI,CAExB,IADA,IAAI4K,EAAI3K,KAAKC,IAAImF,EAAI,KAAMrF,GACpBqF,EAAIuF,IAAKvF,EACdia,GAAKY,GAAKzf,EAAE4E,GACd6a,GAAS,MAAJA,GAAa,IAAMA,GAAK,IAAKZ,GAAS,MAAJA,GAAa,IAAMA,GAAK,GACjE,CACA1f,EAAIsgB,EAAGvgB,EAAI2f,CACb,EACA7e,EAAG,WAED,OAAY,KADZb,GAAK,SACe,GAAKA,IAAM,GAAK,IAAU,KADlCD,GAAK,SACqC,EAAIA,IAAM,CAClE,EAEJ,CAqBU6kB,GACR5kB,EAAES,EAAE4O,GACJ,IAfkBoI,EACdoN,EAAcC,EARC3C,EAAK4C,EAAKC,EAAKC,EAAMC,EAsBpCrkB,GAtByBmkB,EAsBJ,EAtBSC,EAsBN,EArInB,SAAU9C,EAAKgD,EAAKC,EAAMJ,EAAKC,EAAMI,GAC9C,IAAIllB,EAAIgiB,EAAIzc,OACRwa,EAAI,IAAI9M,EAAG4R,EAAM7kB,EAAI,GAAK,EAAIE,KAAKilB,KAAKnlB,EAAI,MAAQ8kB,GACpDpc,EAAIqX,EAAE7e,SAAS2jB,EAAK9E,EAAExa,OAASuf,GAC/B/C,EAAM,EACV,IAAKiD,GAAOhlB,EAAI,EACd,IAAK,IAAIsF,EAAI,EAAGA,GAAKtF,EAAGsF,GAAK,MAAO,CAClC,IAAIuF,EAAIvF,EAAI,MACRuF,EAAI7K,EACN+hB,EAAMD,EAAMpZ,EAAGqZ,EAAKC,EAAI9gB,SAASoE,EAAGuF,KAEpCnC,EAAEpD,GAAK4f,EACPnD,EAAMD,EAAMpZ,EAAGqZ,EAAKC,EAAI9gB,SAASoE,EAAGtF,IAExC,KACK,CAYL,IAXA,IAAI4kB,EAAMN,EAAIU,EAAM,GAChB7E,EAAIyE,IAAQ,GAAItN,EAAU,KAANsN,EACpBQ,GAAS,GAAKH,GAAQ,EACtBI,EAAO,IAAIpH,EAAI,OAAQqH,EAAO,IAAIrH,EAAImH,EAAQ,GAC9CG,EAAQrlB,KAAKilB,KAAKF,EAAO,GAAIO,EAAQ,EAAID,EACzCE,EAAM,SAAU7E,GAClB,OAAQoB,EAAIpB,GAAMoB,EAAIpB,EAAK,IAAM2E,EAAQvD,EAAIpB,EAAK,IAAM4E,GAASJ,CACnE,EACIjD,EAAO,IAAIvO,EAAI,MACfwO,EAAK,IAAInE,EAAI,KAAMoE,EAAK,IAAIpE,EAAI,IAChCyH,EAAO,EAAGpZ,EAAK,EAAUgW,GAAPhd,EAAI,EAAQ,GAAGqgB,EAAK,EAAGpD,EAAK,EAC3Cjd,EAAItF,IAAKsF,EAAG,CACjB,IAAIsgB,EAAKH,EAAIngB,GACTugB,EAAW,MAAJvgB,EAAWwgB,EAAQR,EAAKM,GAGnC,GAFAP,EAAKQ,GAAQC,EACbR,EAAKM,GAAMC,EACPF,GAAMrgB,EAAG,CACX,IAAIygB,EAAM/lB,EAAIsF,EACd,IAAKogB,EAAO,KAAOpD,EAAK,QAAUyD,EAAM,IAAK,CAC3ChE,EAAME,EAAKD,EAAKtZ,EAAG,EAAGyZ,EAAMC,EAAIC,EAAI/V,EAAIgW,EAAIC,EAAIjd,EAAIid,EAAIR,GACxDO,EAAKoD,EAAOpZ,EAAK,EAAGiW,EAAKjd,EACzB,IAAK,IAAIiZ,EAAI,EAAGA,EAAI,MAAOA,EACzB6D,EAAG7D,GAAK,EACV,IAASA,EAAI,EAAGA,EAAI,KAAMA,EACxB8D,EAAG9D,GAAK,CACZ,CACA,IAAIte,EAAI,EAAGS,EAAI,EAAGslB,EAAO1O,EAAG2O,EAAMJ,EAAOC,EAAQ,MACjD,GAAIC,EAAM,GAAKH,IAAOH,EAAIngB,EAAI2gB,GAI5B,IAHA,IAAIC,EAAOhmB,KAAKC,IAAIggB,EAAG4F,GAAO,EAC1BI,EAAOjmB,KAAKC,IAAI,MAAOmF,GACvB8gB,EAAKlmB,KAAKC,IAAI,IAAK4lB,GAChBE,GAAOE,KAAUH,GAAQH,IAASC,GAAO,CAC9C,GAAI9D,EAAI1c,EAAIrF,KAAO+hB,EAAI1c,EAAIrF,EAAIgmB,GAAM,CAEnC,IADA,IAAII,GAAK,EACFA,GAAKD,GAAMpE,EAAI1c,EAAI+gB,MAAQrE,EAAI1c,EAAI+gB,GAAKJ,KAAQI,IAEvD,GAAIA,GAAKpmB,EAAG,CAEV,GADAA,EAAIomB,GAAI3lB,EAAIulB,EACRI,GAAKH,EACP,MACF,IAAII,GAAMpmB,KAAKC,IAAI8lB,EAAKI,GAAK,GACzBE,GAAK,EACT,IAAShI,EAAI,EAAGA,EAAI+H,KAAO/H,EAAG,CAC5B,IAAIiI,GAAKlhB,EAAI2gB,EAAM1H,EAAI,MAAQ,MAE3BS,GAAKwH,GADCnB,EAAKmB,IACK,MAAQ,MACxBxH,GAAKuH,KACPA,GAAKvH,GAAI8G,EAAQU,GACrB,CACF,CACF,CAEAP,IADAJ,EAAOC,IAAOA,EAAQT,EAAKQ,IACL,MAAQ,KAChC,CAEF,GAAInlB,EAAG,CACLyhB,EAAKG,KAAQ,UAAY5D,EAAMze,IAAM,GAAK4e,EAAMne,GAChD,IAAI+lB,GAAiB,GAAX/H,EAAMze,GAASymB,GAAiB,GAAX7H,EAAMne,GACrC4L,GAAM6R,EAAKsI,IAAOrI,EAAKsI,MACrBtE,EAAG,IAAMqE,MACTpE,EAAGqE,IACLf,EAAKrgB,EAAIrF,IACPylB,CACJ,MACEvD,EAAKG,KAAQN,EAAI1c,KACf8c,EAAGJ,EAAI1c,GAEb,CACF,CACAyc,EAAME,EAAKD,EAAKtZ,EAAGwc,EAAK/C,EAAMC,EAAIC,EAAI/V,EAAIgW,EAAIC,EAAIjd,EAAIid,EAAIR,IACrDmD,GAAa,EAANnD,IACVA,EAAMD,EAAMpZ,EAAGqZ,EAAM,EAAGtB,GAC5B,CACA,OAAOP,EAAIH,EAAG,EAAG8E,EAAM5E,EAAK8B,GAAO+C,EACrC,CAsBS6B,CADY3E,EAsBN9S,EArBiB,OADN0V,EAsBLJ,GArBEvW,MAAgB,EAAI2W,EAAI3W,MAAkB,MAAX2W,EAAIjnB,IAAcuC,KAAKilB,KAAuD,IAAlDjlB,KAAKE,IAAI,EAAGF,KAAKC,IAAI,GAAID,KAAK0mB,IAAI5E,EAAIzc,WAAmB,GAAKqf,EAAIjnB,IAAKknB,EAAKC,GAAOC,IAsBnK,OAhBkBzN,EAgBP5W,EAfOikB,EAAa,KAA3BD,EAeUF,EAfHvW,OAAwB,EAAIyW,EAAK,EAAI,EAAW,IAAPA,EAAW,EAAI,EACnEpN,EAAE,GAAK,IAAKA,EAAE,GAAKqN,GAAO,GAAKA,EAAM,GAAK,EAAIA,EAAM,GANzC,SAAUjkB,EAAGd,EAAGqH,GAC3B,KAAOA,IAAKrH,EACVc,EAAEd,GAAKqH,EAAGA,KAAO,CACrB,CAiBuB4f,CAAOnmB,EAAGA,EAAE6E,OAAS,EAAG1F,EAAEa,KAAMA,CACvD,CAcApD,EAAOD,QAAU,CACf6X,SATF,SAAkB4R,EAAK7Y,GACrB,OAAOsW,EAASuC,EAAK,CAAE7Y,SACzB,EAQEkH,WANF,SAAoB2R,EAAKtK,GACvB,OAVkBtN,EAUA4X,EAVMze,EAUD,IAAIwL,WAAW2I,GAre5B,SAAUwF,EAAK8E,EAAK/B,GAC9B,IAAIgC,EAAK/E,EAAIzc,OACb,IAAKwhB,GAAMhC,IAAOA,EAAG9kB,GAAK8mB,EAAK,EAC7B,OAAOD,GAAO,IAAI7T,EAAG,GACvB,IAAI+T,GAASF,GAAO/B,EAChBkC,GAAQlC,GAAMA,EAAGzf,EAChByf,IACHA,EAAK,CAAC,GACH+B,IACHA,EAAM,IAAI7T,EAAQ,EAAL8T,IACf,IAAIG,EAAO,SAAUC,GACnB,IAAInS,EAAK8R,EAAIvhB,OACb,GAAI4hB,EAAKnS,EAAI,CACX,IAAIoS,EAAO,IAAInU,EAAG/S,KAAKE,IAAS,EAAL4U,EAAQmS,IACnCC,EAAKvlB,IAAIilB,GACTA,EAAMM,CACR,CACF,EACIlF,EAAQ6C,EAAGxE,GAAK,EAAGwB,EAAMgD,EAAGzkB,GAAK,EAAG+mB,EAAKtC,EAAGnlB,GAAK,EAAG6jB,EAAKsB,EAAG9kB,EAAG0jB,EAAKoB,EAAGrkB,EAAG4mB,EAAMvC,EAAGxF,EAAGgI,EAAMxC,EAAG5E,EAC/FqH,EAAY,EAALT,EACX,EAAG,CACD,IAAKtD,EAAI,CACPsB,EAAGxE,EAAI2B,EAAQpC,EAAKkC,EAAKD,EAAK,GAC9B,IAAIlL,EAAOiJ,EAAKkC,EAAKD,EAAM,EAAG,GAE9B,GADAA,GAAO,GACFlL,EAAM,CACT,IAAuB5W,EAAI+hB,GAAvBhiB,EAAIigB,EAAK8B,GAAO,GAAe,GAAKC,EAAIhiB,EAAI,IAAM,EAAGQ,EAAIR,EAAIC,EACjE,GAAIO,EAAIumB,EAAI,CACV,GAAIE,EACF,KAAM,iBACR,KACF,CACID,GACFE,EAAKG,EAAKpnB,GACZ6mB,EAAIjlB,IAAImgB,EAAI9gB,SAASlB,EAAGQ,GAAI6mB,GAC5BtC,EAAGnlB,EAAIynB,GAAMpnB,EAAG8kB,EAAGzkB,EAAIyhB,EAAU,EAAJvhB,EAC7B,QACF,CAAO,GAAa,IAATqW,EACT4M,EAAK9D,EAAMgE,EAAK9D,EAAMyH,EAAM,EAAGC,EAAM,MAClC,IAAa,IAAT1Q,EAoCP,KAAM,qBAnCN,IAAI4Q,EAAO3H,EAAKkC,EAAKD,EAAK,IAAM,IAAK2F,EAAQ5H,EAAKkC,EAAKD,EAAM,GAAI,IAAM,EACnE4F,EAAKF,EAAO3H,EAAKkC,EAAKD,EAAM,EAAG,IAAM,EACzCA,GAAO,GAGP,IAFA,IAAI6F,EAAM,IAAI3U,EAAG0U,GACbE,EAAM,IAAI5U,EAAG,IACR3N,EAAI,EAAGA,EAAIoiB,IAASpiB,EAC3BuiB,EAAIxJ,EAAK/Y,IAAMwa,EAAKkC,EAAKD,EAAU,EAAJzc,EAAO,GAExCyc,GAAe,EAAR2F,EACP,IAAII,EAAM1nB,EAAIynB,GAAME,GAAU,GAAKD,GAAO,EACtCE,EAAMjJ,EAAK8I,EAAKC,EAAK,GACzB,IAASxiB,EAAI,EAAGA,EAAIqiB,GAAK,CACvB,IAEI3nB,EAFAN,EAAIsoB,EAAIlI,EAAKkC,EAAKD,EAAKgG,IAG3B,GAFAhG,GAAW,GAAJriB,GACHM,EAAIN,IAAM,GACN,GACNkoB,EAAItiB,KAAOtF,MACN,CACL,IAAIsX,EAAI,EAAG6I,EAAI,EAOf,IANU,KAANngB,GACFmgB,EAAI,EAAIL,EAAKkC,EAAKD,EAAK,GAAIA,GAAO,EAAGzK,EAAIsQ,EAAItiB,EAAI,IACpC,KAANtF,GACPmgB,EAAI,EAAIL,EAAKkC,EAAKD,EAAK,GAAIA,GAAO,GACrB,KAAN/hB,IACPmgB,EAAI,GAAKL,EAAKkC,EAAKD,EAAK,KAAMA,GAAO,GAChC5B,KACLyH,EAAItiB,KAAOgS,CACf,CACF,CACA,IAAI2Q,EAAKL,EAAI1mB,SAAS,EAAGumB,GAAOxG,EAAK2G,EAAI1mB,SAASumB,GAClDH,EAAMlnB,EAAI6nB,GACVV,EAAMnnB,EAAI6gB,GACVwC,EAAK1E,EAAKkJ,EAAIX,EAAK,GACnB3D,EAAK5E,EAAKkC,EAAIsG,EAAK,EAEO,CAC5B,GAAIxF,EAAMyF,EAAM,CACd,GAAIP,EACF,KAAM,iBACR,KACF,CACF,CACID,GACFE,EAAKG,EAAK,QAGZ,IAFA,IAAIa,GAAO,GAAKZ,GAAO,EAAGa,GAAO,GAAKZ,GAAO,EACzCa,EAAOrG,GACFqG,EAAOrG,EAAK,CACnB,IAAoCsG,GAAhC/Q,EAAImM,EAAGzD,EAAOgC,EAAKD,GAAOmG,MAAkB,EAEhD,IADAnG,GAAW,GAAJzK,GACGkQ,EAAM,CACd,GAAIP,EACF,KAAM,iBACR,KACF,CACA,IAAK3P,EACH,KAAM,yBACR,GAAI+Q,EAAM,IACRvB,EAAIO,KAAQgB,MACT,IAAY,MAARA,EAAa,CACpBD,EAAOrG,EAAK0B,EAAK,KACjB,KACF,CACE,IAAIzQ,EAAMqV,EAAM,IAChB,GAAIA,EAAM,IAAK,CACb,IAAmBzoB,EAAIue,EAAnB7Y,EAAI+iB,EAAM,KACdrV,EAAM8M,EAAKkC,EAAKD,GAAM,GAAKniB,GAAK,GAAK6e,EAAGnZ,GACxCyc,GAAOniB,CACT,CACA,IAAIc,EAAIijB,EAAG3D,EAAOgC,EAAKD,GAAOoG,GAAMG,GAAO5nB,IAAM,EACjD,IAAKA,EACH,KAAM,mBAOR,GANAqhB,GAAW,GAAJrhB,EACHugB,EAAKrC,EAAG0J,IACRA,GAAO,IACL1oB,EAAIwe,EAAKkK,IACbrH,GAAMjB,EAAOgC,EAAKD,IAAQ,GAAKniB,GAAK,EAAGmiB,GAAOniB,GAE5CmiB,EAAMyF,EAAM,CACd,GAAIP,EACF,KAAM,iBACR,KACF,CACID,GACFE,EAAKG,EAAK,QAEZ,IADA,IAAItjB,GAAMsjB,EAAKrU,EACRqU,EAAKtjB,GAAKsjB,GAAM,EACrBP,EAAIO,GAAMP,EAAIO,EAAKpG,GACnB6F,EAAIO,EAAK,GAAKP,EAAIO,EAAK,EAAIpG,GAC3B6F,EAAIO,EAAK,GAAKP,EAAIO,EAAK,EAAIpG,GAC3B6F,EAAIO,EAAK,GAAKP,EAAIO,EAAK,EAAIpG,GAE7BoG,EAAKtjB,EACP,CACF,CACAghB,EAAG9kB,EAAIwjB,EAAIsB,EAAGzkB,EAAI8nB,EAAMrD,EAAGnlB,EAAIynB,EAC3B5D,IACFvB,EAAQ,EAAG6C,EAAGxF,EAAI+H,EAAKvC,EAAGrkB,EAAIijB,EAAIoB,EAAG5E,EAAIoH,EAC7C,QAAUrF,GACV,OAAOmF,IAAOP,EAAIvhB,OAASuhB,EAAM5G,EAAI4G,EAAK,EAAGO,EAC/C,CAiVSkB,EAfC,SAAU7nB,GAClB,GAAoB,IAAR,GAAPA,EAAE,KAAkBA,EAAE,KAAO,EAAI,IAAMA,EAAE,IAAM,EAAIA,EAAE,IAAM,GAC9D,KAAM,oBACR,GAAW,GAAPA,EAAE,GACJ,KAAM,sDACV,CAUgB8nB,CAAItZ,GAAOA,EAAKhO,SAAS,GAAI,IAAKmH,GADlD,IAAoB6G,EAAM7G,CAW1B,E,ysBCvmBIogB,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBpd,IAAjBqd,EACH,OAAOA,EAAavrB,QAGrB,IAAIC,EAASmrB,EAAyBE,GAAY,CAGjDtrB,QAAS,CAAC,GAOX,OAHAwrB,EAAoBF,GAAUrrB,EAAQA,EAAOD,QAASqrB,GAG/CprB,EAAOD,OACf,CCnB0BqrB,CAAoB,K,MDF1CD,C","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = wrapHardBreaks || true;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","offset","getUint32","static","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","rgbaToHSLA","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","iterateWithColors","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","async","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","svg","size","includes","TextEncoder","rasterize","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","indexOf","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","zlibSync","opts","adler","lv","fl2","opt","pre","post","st","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","buf","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = typeof wrapHardBreaks === 'undefined' ? true : wrapHardBreaks;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","offset","getUint32","static","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","rgbaToHSLA","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","iterateWithColors","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","async","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","svg","size","includes","TextEncoder","rasterize","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","indexOf","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","buf","opts","adler","opt","pre","post","st","lv","fl2","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","zlibSync","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file From f94308efa7c14e80765037004303384542e8f475 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Thu, 16 Feb 2023 22:15:28 +0100 Subject: [PATCH 103/120] fix: add typedefs --- ImageScript.d.ts | 223 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 223 insertions(+) create mode 100644 ImageScript.d.ts diff --git a/ImageScript.d.ts b/ImageScript.d.ts new file mode 100644 index 0000000..5e9b776 --- /dev/null +++ b/ImageScript.d.ts @@ -0,0 +1,223 @@ +export class Image { + private __width__: number; + private __height__: number; + private __buffer__: ArrayBuffer; + private __view__: DataView; + private __u32__: Uint32Array; + bitmap: Uint8ClampedArray; + + constructor(width: number, height: number); + + private toString(): string; + + get width(): number; + + get height(): number; + + * [Symbol.iterator](): void; + + * iterateWithColors(): Generator<[x: number, y: number, color: number], void, unknown>; + + static rgbaToColor(r: number, g: number, b: number, a: number): number; + + static rgbToColor(r: number, g: number, b: number): number; + + static hslaToColor(h: number, s: number, l: number, a: number): number; + + static hslToColor(h: number, s: number, l: number): number; + + static rgbaToHSLA(r: number, g: number, b: number, a: number): number[]; + + static colorToRGBA(color: number): number[]; + + static colorToRGB(color: number): number[]; + + getPixelAt(x: number, y: number): number; + + getRGBAAt(x: number, y: number): Uint8ClampedArray; + + setPixelAt(x: number, y: number, pixelColor: number): Image; + + private __set_pixel__(x: number, y: number, pixelColor: number): void; + + private __check_boundaries__(x: number, y: number): void; + + private static get __out_of_bounds__(): string; + + fill(color: number | colorFunction): Image; + + clone(): Image; + + static get RESIZE_NEAREST_NEIGHBOR(): string; + + static get RESIZE_AUTO(): number; + + scale(factor: number, mode?: string): Image; + + private __scale__(factor: number, mode?: string); + + resize(width: number, height: number, mode?: string): Image; + + contain(width: number, height: number, mode?: string): Image; + + fit(width: number, height: number, mode?: string): Image; + + cover(width: number, height: number, mode?: string): Image; + + private __resize__(width: number, height: number, mode?: string): Image; + + private __resize_nearest_neighbor__(width: number, height: number): Image; + + crop(x: number, y: number, width: number, height: number): Image; + + private __crop__(x: number, y: number, width: number, height: number): Image; + + drawBox(x: number, y: number, width: number, height: number, color: number | colorFunction): Image; + + private __fast_box__(x: number, y: number, width: number, height: number, color: number): Image; + + drawCircle(x: number, y: number, radius: number, color: number | colorFunction): Image; + + cropCircle(max?: boolean, feathering?: number): Image; + + opacity(opacity: number, absolute?: boolean): Image; + + red(saturation: number, absolute?: boolean): Image; + + green(saturation: number, absolute?: boolean): Image; + + blue(saturation: number, absolute?: boolean): Image; + + private __set_channel_value__(value: number, absolute: boolean, offset: number): void; + + lightness(value: number, absolute?: boolean): Image; + + saturation(value: number, absolute?: boolean): Image; + + composite(source: Image, x?: number, y?: number): Image; + + invert(): Image; + + invertValue(): Image; + + invertSaturation(): Image; + + invertHue(): Image; + + hueShift(degrees: number): Image; + + averageColor(): number; + + dominantColor(ignoreBlack?: boolean, ignoreWhite?: boolean, bwThreshold?: number): number; + + rotate(angle: number, resize?: boolean): Image; + + private __apply__(image: Image | Frame): Image | Frame; + + static gradient(colors: { [position: number]: number; }): ((position: number) => number); + + roundCorners(radius?: number): Image; + + private static __gradient__(startColor: number, endColor: number): number; + + fisheye(radius?: number): Image; + + async encode(compression?: number, metadata?: PNGMetadata): Promise; + async encode(metadata?: PNGMetadata): Promise; + + async encodeJPEG(quality?: number): Promise; + + async encodeWEBP(quality?: null | number): Promise; + + static async encode(data: Buffer | Uint8Array): Promise + + static get SVG_MODE_SCALE(): number; + + static get SVG_MODE_WIDTH(): number; + + static get SVG_MODE_HEIGHT(): number; + + static async renderSVG(svg: string, size?: number, mode?: number): Promise; + + static async renderText(font: Uint8Array, scale: number, text: string, color?: number, layout?: TextLayout): Promise; +}; + +export class Frame extends Image { + static get DISPOSAL_KEEP(): string; + + static get DISPOSAL_PREVIOUS(): string; + + static get DISPOSAL_BACKGROUND(): string + + private static __convert_disposal_mode__(mode: string | number): any; + + constructor(width: number, height: number, duration?: number, xOffset?: number, yOffset?: number, disposalMode?: typeof Frame.DISPOSAL_KEEP | string); + + toString(): string; + + static from(image: Image, duration?: number, xOffset?: number, yOffset?: number, disposalMode?: typeof Frame.DISPOSAL_KEEP | string): Frame; + + resize(width: number, height: number, mode?: typeof Image.RESIZE_NEAREST_NEIGHBOR | string): Image; +}; + +export class GIF extends Array { + constructor(frames: Frame[], loopCount?: number); + + get width(): number; + + get height(): number; + + toString(): string; + + * [Symbol.iterator](): Generator + + slice(start: number, end: number): GIF; + + get duration(): number; + + async encode(quality?: number): Promise + + static async decode(data: Buffer | Uint8Array, onlyExtractFirstFrame?: boolean): Promise; + + resize(width: number, height: number, mode?: typeof Image.RESIZE_NEAREST_NEIGHBOR | string): void; +} + +export class TextLayout { + constructor(options?: { + maxWidth?: number, + maxHeight?: number, + wrapStyle?: string, + verticalAlign?: string, + horizontalAlign?: string, + wrapHardBreaks?: boolean + }); +}; + +export class ImageType { + static getType(data: Buffer | Uint8Array): string | null; + + static isPNG(view: DataView): boolean; + + static isJPEG(view: DataView): boolean; + + static isTIFF(view: DataView): boolean; + + static isGIF(view: DataView): boolean; +}; + +export function decode(data: Uint8Array | Buffer, onlyExtractFirstFrame?: boolean): Promise; + +type colorFunction = (x: number, y: number) => number; + +type PNGMetadata = { + title?: string, + author?: string, + description?: string, + copyright?: string, + creationTime?: string | number | Date, + software?: string, + disclaimer?: string, + warning?: string, + source?: string, + comment?: string +}; From 0f41e42339ee83604dde24a23b689baa4d0bc9fc Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Fri, 29 Sep 2023 10:56:31 +0200 Subject: [PATCH 104/120] fix(typings): invalid Image class static method name (#28) --- ImageScript.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ImageScript.d.ts b/ImageScript.d.ts index 5e9b776..85a7d9a 100644 --- a/ImageScript.d.ts +++ b/ImageScript.d.ts @@ -129,7 +129,7 @@ export class Image { async encodeWEBP(quality?: null | number): Promise; - static async encode(data: Buffer | Uint8Array): Promise + static async decode(data: Buffer | Uint8Array): Promise static get SVG_MODE_SCALE(): number; From 338187a2aab39d020e2edaaa7e59c773cec83da8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 29 Sep 2023 08:56:52 +0000 Subject: [PATCH 105/120] Update bundle --- browser/ImageScript.js.map | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index 8709243..39fdbbb 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = typeof wrapHardBreaks === 'undefined' ? true : wrapHardBreaks;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","offset","getUint32","static","r","g","b","a","rgbaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslaToColor","d","color","colorToRGBA","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","rgbaToHSLA","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","iterateWithColors","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","colors","entries","Object","sort","positions","e","parseFloat","values","gradient","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","async","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","encode","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","quality","init","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","decode","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","svg","size","includes","TextEncoder","rasterize","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","indexOf","__convert_disposal_mode__","super","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","isView","getType","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","walloc","ptr","wfree","memory","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","alloc","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","copy_and_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","buf","opts","adler","opt","pre","post","st","lv","fl2","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","zlibSync","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = typeof wrapHardBreaks === 'undefined' ? true : wrapHardBreaks;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","iterateWithColors","offset","getUint32","rgbaToColor","r","g","b","a","rgbToColor","hslaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslToColor","rgbaToHSLA","d","colorToRGBA","color","colorToRGB","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","gradient","colors","entries","Object","sort","positions","e","parseFloat","values","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","encode","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","encodeJPEG","quality","init","decode","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","renderSVG","svg","size","includes","TextEncoder","rasterize","renderText","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","__convert_disposal_mode__","indexOf","super","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","getType","isView","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","alloc","walloc","ptr","wfree","memory","copy_and_free","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","buf","opts","adler","opt","pre","post","st","lv","fl2","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","zlibSync","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file From 18ae3a595c4fc56f2a60b6d95784c17d577df619 Mon Sep 17 00:00:00 2001 From: LeonChuu <49106034+LeonChuu@users.noreply.github.com> Date: Fri, 29 Sep 2023 05:59:55 -0300 Subject: [PATCH 106/120] fix: removing redundant calls to __convert_disposal_mode__ and exposing Frame properties (#27) --- ImageScript.d.ts | 10 ++++++++++ ImageScript.js | 20 ++++++++++++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/ImageScript.d.ts b/ImageScript.d.ts index 85a7d9a..34573e2 100644 --- a/ImageScript.d.ts +++ b/ImageScript.d.ts @@ -153,6 +153,16 @@ export class Frame extends Image { constructor(width: number, height: number, duration?: number, xOffset?: number, yOffset?: number, disposalMode?: typeof Frame.DISPOSAL_KEEP | string); + duration: number; + + xOffset: number; + + yOffset: number; + + get disposalMode(): number; + + set disposalMode(disposalMode: string|number); + toString(): string; static from(image: Image, duration?: number, xOffset?: number, yOffset?: number, disposalMode?: typeof Frame.DISPOSAL_KEEP | string): Frame; diff --git a/ImageScript.js b/ImageScript.js index 3c15b08..589f2ab 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1423,8 +1423,6 @@ class Image { if (isNaN(duration) || duration < 0) throw new RangeError('Invalid frame duration'); - disposalMode = Frame.__convert_disposal_mode__(disposalMode); - super(width, height); this.duration = duration; this.xOffset = xOffset; @@ -1432,6 +1430,22 @@ class Image { this.disposalMode = disposalMode; } + /** + * The Frame's disposal mode + * @returns {number} + */ + get disposalMode() { + return this.__disposalMode__; + } + + /** + * Sets the frame's disposal mode, converting it to the internal numeric value. + * @param {string|number} disposalMode The frame's disposal mode + */ + set disposalMode(disposalMode) { + this.__disposalMode__ = Frame.__convert_disposal_mode__(disposalMode); + } + toString() { return `Frame<${this.width}x${this.height}x${this.duration}ms>`; } @@ -1449,8 +1463,6 @@ class Image { if (!(image instanceof Image)) throw new TypeError('Invalid image passed'); - disposalMode = Frame.__convert_disposal_mode__(disposalMode); - const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode); frame.bitmap.set(image.bitmap); From 61c8a3bdc7f6bbe9cf63a5e73fdc0a207dc2c699 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 29 Sep 2023 09:02:05 +0000 Subject: [PATCH 107/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index a3b65f0..426dca8 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(()=>{return t={860:(t,e,r)=>{const i=r(205),n=r(3),s=r(584),o=r(338),{version:a}=r(147),h=r(820),l=r(501),f=r(193);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");s=_.__convert_disposal_mode__(s),super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");n=_.__convert_disposal_mode__(n);const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},3:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},546:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},205:(t,e,r)=>{const i=r(3),n=r(546),{compress:s,decompress:o}=r(223),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},584:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},501:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},338:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},193:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},223:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},I=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},U=function(t){return(t>>3|0)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return B(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);t.exports={compress:function(t,o){return function(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(c=2,_=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=B(g,d,t.subarray(p,m)):(g[p]=c,d=B(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=B(g,d+1,D))}return R(u,0,h+U(d)+l)}(h=t,null==(l=o).level?6:l.level,null==l.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(h.length)))):12+l.mem,c,_,!u));return g=m,d=o.level,p=0===d?0:d<6?1:9===d?3:2,g[0]=120,g[1]=p<<6|(p?32-2*p:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}(t,{level:o})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=U(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var B=new e(z),C=new e(19),H=0;H>>4)<16)B[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=B[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)B[H++]=$}}var P=B.subarray(0,N),Z=B.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=I(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},147:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","types":"ImageScript.d.ts","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"Mathis Mensing ","license":"(AGPL-3.0-or-later OR MIT)","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=14.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(860);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(()=>{return t={860:(t,e,r)=>{const i=r(205),n=r(3),s=r(584),o=r(338),{version:a}=r(147),h=r(820),l=r(501),f=r(193);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}get disposalMode(){return this.__disposalMode__}set disposalMode(t){this.__disposalMode__=_.__convert_disposal_mode__(t)}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},3:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},546:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},205:(t,e,r)=>{const i=r(3),n=r(546),{compress:s,decompress:o}=r(223),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},584:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},501:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},338:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},193:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},223:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},I=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},U=function(t){return(t>>3|0)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return B(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);t.exports={compress:function(t,o){return function(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(c=2,_=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=B(g,d,t.subarray(p,m)):(g[p]=c,d=B(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=B(g,d+1,D))}return R(u,0,h+U(d)+l)}(h=t,null==(l=o).level?6:l.level,null==l.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(h.length)))):12+l.mem,c,_,!u));return g=m,d=o.level,p=0===d?0:d<6?1:9===d?3:2,g[0]=120,g[1]=p<<6|(p?32-2*p:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}(t,{level:o})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=U(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var B=new e(z),C=new e(19),H=0;H>>4)<16)B[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=B[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)B[H++]=$}}var P=B.subarray(0,N),Z=B.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=I(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},147:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","types":"ImageScript.d.ts","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"Mathis Mensing ","license":"(AGPL-3.0-or-later OR MIT)","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=14.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(860);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index 39fdbbb..48175c3 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n disposalMode = Frame.__convert_disposal_mode__(disposalMode);\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = typeof wrapHardBreaks === 'undefined' ? true : wrapHardBreaks;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","iterateWithColors","offset","getUint32","rgbaToColor","r","g","b","a","rgbToColor","hslaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslToColor","rgbaToHSLA","d","colorToRGBA","color","colorToRGB","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","gradient","colors","entries","Object","sort","positions","e","parseFloat","values","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","encode","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","encodeJPEG","quality","init","decode","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","renderSVG","svg","size","includes","TextEncoder","rasterize","renderText","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","__convert_disposal_mode__","indexOf","super","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","getType","isView","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","alloc","walloc","ptr","wfree","memory","copy_and_free","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","buf","opts","adler","opt","pre","post","st","lv","fl2","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","zlibSync","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n /**\n * The Frame's disposal mode\n * @returns {number}\n */\n get disposalMode() {\n return this.__disposalMode__;\n }\n\n /**\n * Sets the frame's disposal mode, converting it to the internal numeric value.\n * @param {string|number} disposalMode The frame's disposal mode\n */\n set disposalMode(disposalMode) {\n this.__disposalMode__ = Frame.__convert_disposal_mode__(disposalMode);\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = typeof wrapHardBreaks === 'undefined' ? true : wrapHardBreaks;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","iterateWithColors","offset","getUint32","rgbaToColor","r","g","b","a","rgbToColor","hslaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslToColor","rgbaToHSLA","d","colorToRGBA","color","colorToRGB","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","gradient","colors","entries","Object","sort","positions","e","parseFloat","values","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","encode","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","encodeJPEG","quality","init","decode","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","renderSVG","svg","size","includes","TextEncoder","rasterize","renderText","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","__convert_disposal_mode__","indexOf","super","__disposalMode__","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","getType","isView","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","alloc","walloc","ptr","wfree","memory","copy_and_free","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","buf","opts","adler","opt","pre","post","st","lv","fl2","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","zlibSync","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file From dbeba7c6c08d706262f4646fadecc518d26d9ecb Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Mon, 6 Nov 2023 13:02:19 +0100 Subject: [PATCH 108/120] fix: include multi-licensing notes in LICENSE --- LICENSE | 624 +------------------------------------------------------- 1 file changed, 6 insertions(+), 618 deletions(-) diff --git a/LICENSE b/LICENSE index ca9b055..b4f7889 100644 --- a/LICENSE +++ b/LICENSE @@ -1,619 +1,7 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 +This software is licensed under the following license(s): +- GNU AFFERO GENERAL PUBLIC LICENSE, Version 3 +- MIT License - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS +The corresponding license files can be found in the projects +root directory, prefixed with LICENSE, suffixed with their +corresponding SPDX identifier. \ No newline at end of file From c3c32447d6c1690761d6ea61731bb17c98fe0afb Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Mon, 6 Nov 2023 13:01:31 +0100 Subject: [PATCH 109/120] feat(licensing): include multi-licensing files in repo Closes #32 --- LICENSE.AGPL-3.0 | 619 +++++++++++++++++++++++++++++++++++++++++++++++ LICENSE.MIT | 19 ++ 2 files changed, 638 insertions(+) create mode 100644 LICENSE.AGPL-3.0 create mode 100644 LICENSE.MIT diff --git a/LICENSE.AGPL-3.0 b/LICENSE.AGPL-3.0 new file mode 100644 index 0000000..ce0100f --- /dev/null +++ b/LICENSE.AGPL-3.0 @@ -0,0 +1,619 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS diff --git a/LICENSE.MIT b/LICENSE.MIT new file mode 100644 index 0000000..8f0286a --- /dev/null +++ b/LICENSE.MIT @@ -0,0 +1,19 @@ +Copyright (c) 2023 Mathis Mensing + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file From 9dcc205c8e0d57761499b1cecf3fd64074a25928 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Mon, 6 Nov 2023 14:07:10 +0100 Subject: [PATCH 110/120] fix(license): clarify dual licensing use --- LICENSE | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/LICENSE b/LICENSE index b4f7889..5d2197d 100644 --- a/LICENSE +++ b/LICENSE @@ -2,6 +2,11 @@ This software is licensed under the following license(s): - GNU AFFERO GENERAL PUBLIC LICENSE, Version 3 - MIT License +== SPDX-License-Identifier: AGPL-3.0-or-later OR MIT == + +You may choose to comply with either one of the above +mentioned licenses, but a license must be chosen. + The corresponding license files can be found in the projects root directory, prefixed with LICENSE, suffixed with their corresponding SPDX identifier. \ No newline at end of file From 8c3b6820cc61741b5a8a1697ee780c9cc5dea16f Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Thu, 15 Jun 2023 19:30:05 +0200 Subject: [PATCH 111/120] fix: check if SharedArrayBuffer is supported --- utils/buffer.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/utils/buffer.js b/utils/buffer.js index 07942e6..14c1cdf 100644 --- a/utils/buffer.js +++ b/utils/buffer.js @@ -1,26 +1,27 @@ function view(buffer, shared = false) { if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer); - if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer); + if (typeof SharedArrayBuffer !== 'undefined' && shared && buffer instanceof SharedArrayBuffer) + return new Uint8Array(buffer); if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength); - + throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'"); } - + function from_parts(buffers, shared = false) { let length = 0; let offset = 0; buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength)); - + const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length); - + buffers.forEach(buffer => { const ref = Array.isArray(buffer) ? buffer : view(buffer, true); - + u8.set(ref, offset); offset += ref.length; }); - + return u8; } - - module.exports = { view, from_parts }; \ No newline at end of file + + module.exports = { view, from_parts }; From 66304c680e130c6f135de6a1a2c6adcc0e6c8f78 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 23 Nov 2023 20:22:24 +0000 Subject: [PATCH 112/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index 426dca8..89eb08b 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(()=>{return t={860:(t,e,r)=>{const i=r(205),n=r(3),s=r(584),o=r(338),{version:a}=r(147),h=r(820),l=r(501),f=r(193);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}get disposalMode(){return this.__disposalMode__}set disposalMode(t){this.__disposalMode__=_.__convert_disposal_mode__(t)}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},3:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if(e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},546:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},205:(t,e,r)=>{const i=r(3),n=r(546),{compress:s,decompress:o}=r(223),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},584:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},501:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},338:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},193:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},223:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},I=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},U=function(t){return(t>>3|0)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},z=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=z(h,m)+z(l,b)+f,q=z(h,d)+z(l,x)+f+14+3*$+z(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return B(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);t.exports={compress:function(t,o){return function(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(c=2,_=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=B(g,d,t.subarray(p,m)):(g[p]=c,d=B(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,z,L,W,p-W,d),L=G=z=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];z+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,z,L,W,p-W,d),!c&&7&d&&(d=B(g,d+1,D))}return R(u,0,h+U(d)+l)}(h=t,null==(l=o).level?6:l.level,null==l.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(h.length)))):12+l.mem,c,_,!u));return g=m,d=o.level,p=0===d?0:d<6?1:9===d?3:2,g[0]=120,g[1]=p<<6|(p?32-2*p:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}(t,{level:o})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=U(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,z=N+S(t,w+5,31)+1;w+=14;for(var B=new e(z),C=new e(19),H=0;H>>4)<16)B[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=B[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)B[H++]=$}}var P=B.subarray(0,N),Z=B.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=I(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},147:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","types":"ImageScript.d.ts","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"Mathis Mensing ","license":"(AGPL-3.0-or-later OR MIT)","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=14.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(860);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(()=>{return t={860:(t,e,r)=>{const i=r(205),n=r(3),s=r(584),o=r(338),{version:a}=r(147),h=r(820),l=r(501),f=r(193);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}get disposalMode(){return this.__disposalMode__}set disposalMode(t){this.__disposalMode__=_.__convert_disposal_mode__(t)}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},3:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if("undefined"!=typeof SharedArrayBuffer&&e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},546:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},205:(t,e,r)=>{const i=r(3),n=r(546),{compress:s,decompress:o}=r(223),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},584:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},501:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},338:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},193:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},223:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},I=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},U=function(t){return(t>>3|0)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},B=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=B(h,m)+B(l,b)+f,q=B(h,d)+B(l,x)+f+14+3*$+B(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return z(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);t.exports={compress:function(t,o){return function(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(c=2,_=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=z(g,d,t.subarray(p,m)):(g[p]=c,d=z(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,B,L,W,p-W,d),L=G=B=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];B+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,B,L,W,p-W,d),!c&&7&d&&(d=z(g,d+1,D))}return R(u,0,h+U(d)+l)}(h=t,null==(l=o).level?6:l.level,null==l.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(h.length)))):12+l.mem,c,_,!u));return g=m,d=o.level,p=0===d?0:d<6?1:9===d?3:2,g[0]=120,g[1]=p<<6|(p?32-2*p:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}(t,{level:o})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=U(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,B=N+S(t,w+5,31)+1;w+=14;for(var z=new e(B),C=new e(19),H=0;H>>4)<16)z[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=z[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)z[H++]=$}}var P=z.subarray(0,N),Z=z.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=I(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},147:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","types":"ImageScript.d.ts","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"Mathis Mensing ","license":"(AGPL-3.0-or-later OR MIT)","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=14.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(860);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index 48175c3..a3a6177 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n /**\n * The Frame's disposal mode\n * @returns {number}\n */\n get disposalMode() {\n return this.__disposalMode__;\n }\n\n /**\n * Sets the frame's disposal mode, converting it to the internal numeric value.\n * @param {string|number} disposalMode The frame's disposal mode\n */\n set disposalMode(disposalMode) {\n this.__disposalMode__ = Frame.__convert_disposal_mode__(disposalMode);\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = typeof wrapHardBreaks === 'undefined' ? true : wrapHardBreaks;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n \n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n \n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n \n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n \n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n \n u8.set(ref, offset);\n offset += ref.length;\n });\n \n return u8;\n }\n \n module.exports = { view, from_parts };","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","iterateWithColors","offset","getUint32","rgbaToColor","r","g","b","a","rgbToColor","hslaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslToColor","rgbaToHSLA","d","colorToRGBA","color","colorToRGB","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","gradient","colors","entries","Object","sort","positions","e","parseFloat","values","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","encode","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","encodeJPEG","quality","init","decode","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","renderSVG","svg","size","includes","TextEncoder","rasterize","renderText","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","__convert_disposal_mode__","indexOf","super","__disposalMode__","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","getType","isView","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","alloc","walloc","ptr","wfree","memory","copy_and_free","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","buf","opts","adler","opt","pre","post","st","lv","fl2","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","zlibSync","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n /**\n * The Frame's disposal mode\n * @returns {number}\n */\n get disposalMode() {\n return this.__disposalMode__;\n }\n\n /**\n * Sets the frame's disposal mode, converting it to the internal numeric value.\n * @param {string|number} disposalMode The frame's disposal mode\n */\n set disposalMode(disposalMode) {\n this.__disposalMode__ = Frame.__convert_disposal_mode__(disposalMode);\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = typeof wrapHardBreaks === 'undefined' ? true : wrapHardBreaks;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (typeof SharedArrayBuffer !== 'undefined' && shared && buffer instanceof SharedArrayBuffer)\n return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n\n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n\n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n\n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n\n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n\n u8.set(ref, offset);\n offset += ref.length;\n });\n\n return u8;\n }\n\n module.exports = { view, from_parts };\n","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","iterateWithColors","offset","getUint32","rgbaToColor","r","g","b","a","rgbToColor","hslaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslToColor","rgbaToHSLA","d","colorToRGBA","color","colorToRGB","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","gradient","colors","entries","Object","sort","positions","e","parseFloat","values","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","encode","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","encodeJPEG","quality","init","decode","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","renderSVG","svg","size","includes","TextEncoder","rasterize","renderText","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","__convert_disposal_mode__","indexOf","super","__disposalMode__","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","getType","isView","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","alloc","walloc","ptr","wfree","memory","copy_and_free","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","buf","opts","adler","opt","pre","post","st","lv","fl2","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","zlibSync","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file From 26c132f98fee21445c4b53d25376d50579de2807 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Tue, 30 Jan 2024 16:59:18 +0100 Subject: [PATCH 113/120] fix(docs): GIF loopCount default --- ImageScript.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ImageScript.js b/ImageScript.js index 589f2ab..632cc27 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1490,7 +1490,7 @@ class GIF extends Array { /** * Creates a new GIF image. * @param {Frame[]} frames The frames to create the GIF from - * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited) + * @param {number} [loopCount=-1] How often to loop the GIF for (-1 = unlimited) * @property {number} loopCount How often the GIF will loop for */ constructor(frames, loopCount = -1) { From 87765e73635daba786e67b41d6e6b2caf59bf056 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 30 Jan 2024 15:59:40 +0000 Subject: [PATCH 114/120] Update bundle --- browser/ImageScript.js.map | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index a3a6177..b56a910 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n /**\n * The Frame's disposal mode\n * @returns {number}\n */\n get disposalMode() {\n return this.__disposalMode__;\n }\n\n /**\n * Sets the frame's disposal mode, converting it to the internal numeric value.\n * @param {string|number} disposalMode The frame's disposal mode\n */\n set disposalMode(disposalMode) {\n this.__disposalMode__ = Frame.__convert_disposal_mode__(disposalMode);\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=0] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = typeof wrapHardBreaks === 'undefined' ? true : wrapHardBreaks;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (typeof SharedArrayBuffer !== 'undefined' && shared && buffer instanceof SharedArrayBuffer)\n return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n\n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n\n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n\n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n\n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n\n u8.set(ref, offset);\n offset += ref.length;\n });\n\n return u8;\n }\n\n module.exports = { view, from_parts };\n","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","iterateWithColors","offset","getUint32","rgbaToColor","r","g","b","a","rgbToColor","hslaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslToColor","rgbaToHSLA","d","colorToRGBA","color","colorToRGB","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","gradient","colors","entries","Object","sort","positions","e","parseFloat","values","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","encode","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","encodeJPEG","quality","init","decode","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","renderSVG","svg","size","includes","TextEncoder","rasterize","renderText","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","__convert_disposal_mode__","indexOf","super","__disposalMode__","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","getType","isView","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","alloc","walloc","ptr","wfree","memory","copy_and_free","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","buf","opts","adler","opt","pre","post","st","lv","fl2","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","zlibSync","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n /**\n * The Frame's disposal mode\n * @returns {number}\n */\n get disposalMode() {\n return this.__disposalMode__;\n }\n\n /**\n * Sets the frame's disposal mode, converting it to the internal numeric value.\n * @param {string|number} disposalMode The frame's disposal mode\n */\n set disposalMode(disposalMode) {\n this.__disposalMode__ = Frame.__convert_disposal_mode__(disposalMode);\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=-1] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = typeof wrapHardBreaks === 'undefined' ? true : wrapHardBreaks;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (typeof SharedArrayBuffer !== 'undefined' && shared && buffer instanceof SharedArrayBuffer)\n return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n\n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n\n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n\n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n\n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n\n u8.set(ref, offset);\n offset += ref.length;\n });\n\n return u8;\n }\n\n module.exports = { view, from_parts };\n","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","iterateWithColors","offset","getUint32","rgbaToColor","r","g","b","a","rgbToColor","hslaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslToColor","rgbaToHSLA","d","colorToRGBA","color","colorToRGB","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","gradient","colors","entries","Object","sort","positions","e","parseFloat","values","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","encode","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","encodeJPEG","quality","init","decode","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","renderSVG","svg","size","includes","TextEncoder","rasterize","renderText","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","__convert_disposal_mode__","indexOf","super","__disposalMode__","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","getType","isView","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","alloc","walloc","ptr","wfree","memory","copy_and_free","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","buf","opts","adler","opt","pre","post","st","lv","fl2","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","zlibSync","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file From 5b0520ca63795d359d12082218127fc36063e547 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Sun, 24 Mar 2024 19:44:34 +0100 Subject: [PATCH 115/120] fix: indexed color logic --- utils/png.js | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/utils/png.js b/utils/png.js index 8f4a2a9..fd406c6 100644 --- a/utils/png.js +++ b/utils/png.js @@ -100,10 +100,10 @@ module.exports = { const width = view.getUint32(16); const height = view.getUint32(20); - const bpc = array[24]; - const pixel_type = array[25]; - let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type]; - const bytespp = channels * bpc / 8; + let bit_depth = array[24]; + const color_type = array[25]; + let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[color_type]; + const bytespp = channels * bit_depth / 8; const row_length = width * bytespp; let pixels = new Uint8Array(height * row_length); @@ -156,7 +156,7 @@ module.exports = { p_offset += row_length; } - if (pixel_type === 3) { + if (color_type === 3) { if (!palette) throw new Error('Indexed color PNG has no PLTE'); @@ -164,16 +164,17 @@ module.exports = { for (let i = 0; i < alphaPalette.length; i++) palette[i] &= 0xffffff00 | alphaPalette[i]; - channels = 4; const newPixels = new Uint8Array(width * height * 4); const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength); - for (let i = 0; i < pixels.length; i++) - pixelView.setUint32(i * 4, palette[pixels[i]], false); + for (let i = 0; i < pixels.length * (8 / bit_depth); i++) + pixelView.setUint32(i * 4, palette[pixels[~~(i / (8 / bit_depth))] & (2**bit_depth-1)], false); + channels = 4; + bit_depth = 8; pixels = newPixels; } - if (bpc !== 8) { - const newPixels = new Uint8Array(pixels.length / bpc * 8); + if (bit_depth !== 8) { + const newPixels = new Uint8Array(pixels.length / bit_depth * 8); for (let i = 0; i < pixels.length; i += 2) newPixels[i / 2] = pixels[i]; pixels = newPixels; @@ -254,4 +255,4 @@ module.exports = { } } } -}; \ No newline at end of file +}; From d068e914e9aa0d227f6be660f6f0d337e34ac624 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 24 Mar 2024 18:46:15 +0000 Subject: [PATCH 116/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index 89eb08b..83a6b6c 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(()=>{return t={860:(t,e,r)=>{const i=r(205),n=r(3),s=r(584),o=r(338),{version:a}=r(147),h=r(820),l=r(501),f=r(193);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255==(255&a)?this.__view__.setUint32(o,a,!1):0==(255&a)?this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}get disposalMode(){return this.__disposalMode__}set disposalMode(t){this.__disposalMode__=_.__convert_disposal_mode__(t)}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},3:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if("undefined"!=typeof SharedArrayBuffer&&e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},546:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},205:(t,e,r)=>{const i=r(3),n=r(546),{compress:s,decompress:o}=r(223),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},584:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},501:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},338:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},193:(t,e,r)=>{const{version:i}=r(147);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},223:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3|0;return(t[i]|t[i+1]<<8)>>(7&e)&r},I=function(t,e){var r=e>>3|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},U=function(t){return(t>>3|0)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3|0;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},B=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=B(h,m)+B(l,b)+f,q=B(h,d)+B(l,x)+f+14+3*$+B(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return z(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);t.exports={compress:function(t,o){return function(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(c=2,_=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=z(g,d,t.subarray(p,m)):(g[p]=c,d=z(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,B,L,W,p-W,d),L=G=B=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];B+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,B,L,W,p-W,d),!c&&7&d&&(d=z(g,d+1,D))}return R(u,0,h+U(d)+l)}(h=t,null==(l=o).level?6:l.level,null==l.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(h.length)))):12+l.mem,c,_,!u));return g=m,d=o.level,p=0===d?0:d<6?1:9===d?3:2,g[0]=120,g[1]=p<<6|(p?32-2*p:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}(t,{level:o})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=U(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,B=N+S(t,w+5,31)+1;w+=14;for(var z=new e(B),C=new e(19),H=0;H>>4)<16)z[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=z[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)z[H++]=$}}var P=z.subarray(0,N),Z=z.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=I(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},147:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","types":"ImageScript.d.ts","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"Mathis Mensing ","license":"(AGPL-3.0-or-later OR MIT)","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=14.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(860);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(()=>{return t={248:(t,e,r)=>{const i=r(511),n=r(740),s=r(763),o=r(607),{version:a}=r(330),h=r(816),l=r(751),f=r(706);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255&~a?255&a?this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1):this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,a,!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}get disposalMode(){return this.__disposalMode__}set disposalMode(t){this.__disposalMode__=_.__convert_disposal_mode__(t)}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},740:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if("undefined"!=typeof SharedArrayBuffer&&e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},223:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},511:(t,e,r)=>{const i=r(740),n=r(223),{compress:s,decompress:o}=r(639),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},763:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},751:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},607:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},706:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},639:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3;return(t[i]|t[i+1]<<8)>>(7&e)&r},I=function(t,e){var r=e>>3;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},U=function(t){return(t>>3)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},B=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=B(h,m)+B(l,b)+f,q=B(h,d)+B(l,x)+f+14+3*$+B(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return z(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);t.exports={compress:function(t,o){return function(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(c=2,_=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=z(g,d,t.subarray(p,m)):(g[p]=c,d=z(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,B,L,W,p-W,d),L=G=B=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];B+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,B,L,W,p-W,d),!c&&7&d&&(d=z(g,d+1,D))}return R(u,0,h+U(d)+l)}(h=t,null==(l=o).level?6:l.level,null==l.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(h.length)))):12+l.mem,c,_,!u));return g=m,d=o.level,p=0===d?0:d<6?1:9===d?3:2,g[0]=120,g[1]=p<<6|(p?32-2*p:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}(t,{level:o})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=U(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,B=N+S(t,w+5,31)+1;w+=14;for(var z=new e(B),C=new e(19),H=0;H>>4)<16)z[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=z[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)z[H++]=$}}var P=z.subarray(0,N),Z=z.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=I(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},330:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","types":"ImageScript.d.ts","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"Mathis Mensing ","license":"(AGPL-3.0-or-later OR MIT)","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=14.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(248);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index b56a910..b822af1 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n /**\n * The Frame's disposal mode\n * @returns {number}\n */\n get disposalMode() {\n return this.__disposalMode__;\n }\n\n /**\n * Sets the frame's disposal mode, converting it to the internal numeric value.\n * @param {string|number} disposalMode The frame's disposal mode\n */\n set disposalMode(disposalMode) {\n this.__disposalMode__ = Frame.__convert_disposal_mode__(disposalMode);\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=-1] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = typeof wrapHardBreaks === 'undefined' ? true : wrapHardBreaks;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (typeof SharedArrayBuffer !== 'undefined' && shared && buffer instanceof SharedArrayBuffer)\n return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n\n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n\n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n\n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n\n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n\n u8.set(ref, offset);\n offset += ref.length;\n });\n\n return u8;\n }\n\n module.exports = { view, from_parts };\n","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n const bpc = array[24];\n const pixel_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[pixel_type];\n const bytespp = channels * bpc / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (pixel_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n channels = 4;\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length; i++)\n pixelView.setUint32(i * 4, palette[pixels[i]], false);\n pixels = newPixels;\n }\n\n if (bpc !== 8) {\n const newPixels = new Uint8Array(pixels.length / bpc * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(860);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","iterateWithColors","offset","getUint32","rgbaToColor","r","g","b","a","rgbToColor","hslaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslToColor","rgbaToHSLA","d","colorToRGBA","color","colorToRGB","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","gradient","colors","entries","Object","sort","positions","e","parseFloat","values","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","encode","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","encodeJPEG","quality","init","decode","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","renderSVG","svg","size","includes","TextEncoder","rasterize","renderText","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","__convert_disposal_mode__","indexOf","super","__disposalMode__","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","getType","isView","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bpc","pixel_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","alloc","walloc","ptr","wfree","memory","copy_and_free","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","buf","opts","adler","opt","pre","post","st","lv","fl2","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","zlibSync","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n /**\n * The Frame's disposal mode\n * @returns {number}\n */\n get disposalMode() {\n return this.__disposalMode__;\n }\n\n /**\n * Sets the frame's disposal mode, converting it to the internal numeric value.\n * @param {string|number} disposalMode The frame's disposal mode\n */\n set disposalMode(disposalMode) {\n this.__disposalMode__ = Frame.__convert_disposal_mode__(disposalMode);\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=-1] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = typeof wrapHardBreaks === 'undefined' ? true : wrapHardBreaks;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (typeof SharedArrayBuffer !== 'undefined' && shared && buffer instanceof SharedArrayBuffer)\n return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n\n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n\n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n\n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n\n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n\n u8.set(ref, offset);\n offset += ref.length;\n });\n\n return u8;\n }\n\n module.exports = { view, from_parts };\n","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n let bit_depth = array[24];\n const color_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[color_type];\n const bytespp = channels * bit_depth / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (color_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length * (8 / bit_depth); i++)\n pixelView.setUint32(i * 4, palette[pixels[~~(i / (8 / bit_depth))] & (2**bit_depth-1)], false);\n channels = 4;\n bit_depth = 8;\n pixels = newPixels;\n }\n\n if (bit_depth !== 8) {\n const newPixels = new Uint8Array(pixels.length / bit_depth * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(248);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","iterateWithColors","offset","getUint32","rgbaToColor","r","g","b","a","rgbToColor","hslaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslToColor","rgbaToHSLA","d","colorToRGBA","color","colorToRGB","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","gradient","colors","entries","Object","sort","positions","e","parseFloat","values","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","encode","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","encodeJPEG","quality","init","decode","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","renderSVG","svg","size","includes","TextEncoder","rasterize","renderText","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","__convert_disposal_mode__","indexOf","super","__disposalMode__","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","getType","isView","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bit_depth","color_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","alloc","walloc","ptr","wfree","memory","copy_and_free","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","buf","opts","adler","opt","pre","post","st","lv","fl2","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","zlibSync","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file From 27e8975010c0d3b9754105b6803793a255a5c867 Mon Sep 17 00:00:00 2001 From: Mathis Mensing Date: Wed, 3 Apr 2024 20:58:26 +0200 Subject: [PATCH 117/120] fix: check buffer length before type conversion --- ImageScript.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ImageScript.js b/ImageScript.js index 632cc27..88f1278 100644 --- a/ImageScript.js +++ b/ImageScript.js @@ -1763,7 +1763,7 @@ class ImageType { * @returns {boolean} */ static isPNG(view) { - return view.getUint32(0, false) === MAGIC_NUMBERS.PNG; + return view.byteLength >= 4 && view.getUint32(0, false) === MAGIC_NUMBERS.PNG; } /** @@ -1771,7 +1771,7 @@ class ImageType { * @returns {boolean} */ static isJPEG(view) { - return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG; + return view.byteLength >= 4 && (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG; } /** @@ -1779,7 +1779,7 @@ class ImageType { * @returns {boolean} */ static isTIFF(view) { - return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF; + return view.byteLength >= 4 && view.getUint32(0, false) === MAGIC_NUMBERS.TIFF; } /** @@ -1787,7 +1787,7 @@ class ImageType { * @returns {boolean} */ static isGIF(view) { - return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF; + return view.byteLength >= 4 && (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF; } } From e720cc5fd116b5775cc30abb9c66b1b5339f707d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 3 Apr 2024 19:09:57 +0000 Subject: [PATCH 118/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index 83a6b6c..df5b8f6 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(()=>{return t={248:(t,e,r)=>{const i=r(511),n=r(740),s=r(763),o=r(607),{version:a}=r(330),h=r(816),l=r(751),f=r(706);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255&~a?255&a?this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1):this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,a,!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}get disposalMode(){return this.__disposalMode__}set disposalMode(t){this.__disposalMode__=_.__convert_disposal_mode__(t)}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t>>8==16767231}static isTIFF(t){return 1229531648===t.getUint32(0,!1)}static isGIF(t){return t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},740:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if("undefined"!=typeof SharedArrayBuffer&&e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},223:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},511:(t,e,r)=>{const i=r(740),n=r(223),{compress:s,decompress:o}=r(639),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},763:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},751:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},607:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},706:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},639:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3;return(t[i]|t[i+1]<<8)>>(7&e)&r},I=function(t,e){var r=e>>3;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},U=function(t){return(t>>3)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},B=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=B(h,m)+B(l,b)+f,q=B(h,d)+B(l,x)+f+14+3*$+B(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return z(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);t.exports={compress:function(t,o){return function(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(c=2,_=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=z(g,d,t.subarray(p,m)):(g[p]=c,d=z(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,B,L,W,p-W,d),L=G=B=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];B+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,B,L,W,p-W,d),!c&&7&d&&(d=z(g,d+1,D))}return R(u,0,h+U(d)+l)}(h=t,null==(l=o).level?6:l.level,null==l.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(h.length)))):12+l.mem,c,_,!u));return g=m,d=o.level,p=0===d?0:d<6?1:9===d?3:2,g[0]=120,g[1]=p<<6|(p?32-2*p:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}(t,{level:o})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=U(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,B=N+S(t,w+5,31)+1;w+=14;for(var z=new e(B),C=new e(19),H=0;H>>4)<16)z[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=z[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)z[H++]=$}}var P=z.subarray(0,N),Z=z.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=I(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},330:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","types":"ImageScript.d.ts","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"Mathis Mensing ","license":"(AGPL-3.0-or-later OR MIT)","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=14.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(248);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(()=>{return t={248:(t,e,r)=>{const i=r(511),n=r(740),s=r(763),o=r(607),{version:a}=r(330),h=r(816),l=r(751),f=r(706);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255&~a?255&a?this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1):this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,a,!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}get disposalMode(){return this.__disposalMode__}set disposalMode(t){this.__disposalMode__=_.__convert_disposal_mode__(t)}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t=4&&2303741511===t.getUint32(0,!1)}static isJPEG(t){return t.byteLength>=4&&t.getUint32(0,!1)>>>8==16767231}static isTIFF(t){return t.byteLength>=4&&1229531648===t.getUint32(0,!1)}static isGIF(t){return t.byteLength>=4&&t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},740:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if("undefined"!=typeof SharedArrayBuffer&&e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},223:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},511:(t,e,r)=>{const i=r(740),n=r(223),{compress:s,decompress:o}=r(639),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},763:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},751:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},607:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},706:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},639:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3;return(t[i]|t[i+1]<<8)>>(7&e)&r},I=function(t,e){var r=e>>3;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},U=function(t){return(t>>3)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},B=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=B(h,m)+B(l,b)+f,q=B(h,d)+B(l,x)+f+14+3*$+B(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return z(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);t.exports={compress:function(t,o){return function(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(c=2,_=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=z(g,d,t.subarray(p,m)):(g[p]=c,d=z(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,B,L,W,p-W,d),L=G=B=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];B+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,B,L,W,p-W,d),!c&&7&d&&(d=z(g,d+1,D))}return R(u,0,h+U(d)+l)}(h=t,null==(l=o).level?6:l.level,null==l.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(h.length)))):12+l.mem,c,_,!u));return g=m,d=o.level,p=0===d?0:d<6?1:9===d?3:2,g[0]=120,g[1]=p<<6|(p?32-2*p:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}(t,{level:o})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=U(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,B=N+S(t,w+5,31)+1;w+=14;for(var z=new e(B),C=new e(19),H=0;H>>4)<16)z[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=z[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)z[H++]=$}}var P=z.subarray(0,N),Z=z.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=I(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},330:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","types":"ImageScript.d.ts","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"Mathis Mensing ","license":"(AGPL-3.0-or-later OR MIT)","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=14.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(248);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index b822af1..ad86f9b 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n /**\n * The Frame's disposal mode\n * @returns {number}\n */\n get disposalMode() {\n return this.__disposalMode__;\n }\n\n /**\n * Sets the frame's disposal mode, converting it to the internal numeric value.\n * @param {string|number} disposalMode The frame's disposal mode\n */\n set disposalMode(disposalMode) {\n this.__disposalMode__ = Frame.__convert_disposal_mode__(disposalMode);\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=-1] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = typeof wrapHardBreaks === 'undefined' ? true : wrapHardBreaks;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (typeof SharedArrayBuffer !== 'undefined' && shared && buffer instanceof SharedArrayBuffer)\n return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n\n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n\n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n\n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n\n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n\n u8.set(ref, offset);\n offset += ref.length;\n });\n\n return u8;\n }\n\n module.exports = { view, from_parts };\n","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n let bit_depth = array[24];\n const color_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[color_type];\n const bytespp = channels * bit_depth / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (color_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length * (8 / bit_depth); i++)\n pixelView.setUint32(i * 4, palette[pixels[~~(i / (8 / bit_depth))] & (2**bit_depth-1)], false);\n channels = 4;\n bit_depth = 8;\n pixels = newPixels;\n }\n\n if (bit_depth !== 8) {\n const newPixels = new Uint8Array(pixels.length / bit_depth * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(248);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","iterateWithColors","offset","getUint32","rgbaToColor","r","g","b","a","rgbToColor","hslaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslToColor","rgbaToHSLA","d","colorToRGBA","color","colorToRGB","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","gradient","colors","entries","Object","sort","positions","e","parseFloat","values","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","encode","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","encodeJPEG","quality","init","decode","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","renderSVG","svg","size","includes","TextEncoder","rasterize","renderText","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","__convert_disposal_mode__","indexOf","super","__disposalMode__","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","getType","isView","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bit_depth","color_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","alloc","walloc","ptr","wfree","memory","copy_and_free","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","buf","opts","adler","opt","pre","post","st","lv","fl2","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","zlibSync","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n /**\n * The Frame's disposal mode\n * @returns {number}\n */\n get disposalMode() {\n return this.__disposalMode__;\n }\n\n /**\n * Sets the frame's disposal mode, converting it to the internal numeric value.\n * @param {string|number} disposalMode The frame's disposal mode\n */\n set disposalMode(disposalMode) {\n this.__disposalMode__ = Frame.__convert_disposal_mode__(disposalMode);\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=-1] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = typeof wrapHardBreaks === 'undefined' ? true : wrapHardBreaks;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.byteLength >= 4 && view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return view.byteLength >= 4 && (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.byteLength >= 4 && view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return view.byteLength >= 4 && (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (typeof SharedArrayBuffer !== 'undefined' && shared && buffer instanceof SharedArrayBuffer)\n return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n\n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n\n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n\n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n\n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n\n u8.set(ref, offset);\n offset += ref.length;\n });\n\n return u8;\n }\n\n module.exports = { view, from_parts };\n","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n let bit_depth = array[24];\n const color_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[color_type];\n const bytespp = channels * bit_depth / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (color_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length * (8 / bit_depth); i++)\n pixelView.setUint32(i * 4, palette[pixels[~~(i / (8 / bit_depth))] & (2**bit_depth-1)], false);\n channels = 4;\n bit_depth = 8;\n pixels = newPixels;\n }\n\n if (bit_depth !== 8) {\n const newPixels = new Uint8Array(pixels.length / bit_depth * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(248);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","iterateWithColors","offset","getUint32","rgbaToColor","r","g","b","a","rgbToColor","hslaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslToColor","rgbaToHSLA","d","colorToRGBA","color","colorToRGB","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","gradient","colors","entries","Object","sort","positions","e","parseFloat","values","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","encode","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","encodeJPEG","quality","init","decode","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","renderSVG","svg","size","includes","TextEncoder","rasterize","renderText","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","__convert_disposal_mode__","indexOf","super","__disposalMode__","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","getType","isView","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bit_depth","color_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","alloc","walloc","ptr","wfree","memory","copy_and_free","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","buf","opts","adler","opt","pre","post","st","lv","fl2","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","zlibSync","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file From e956d5cd37e2fcfc8de778573aa595837ad71e88 Mon Sep 17 00:00:00 2001 From: "Andrew C. Dvorak" Date: Sun, 1 Jun 2025 07:39:22 -0500 Subject: [PATCH 119/120] feat: Add strict types and TSDocs to `ImageScript.d.ts` (#43) This PR adds detailed type declarations and TSDoc comments for all exported members, as well as several new `type` and `interface` exports for ease of use. E.g.: ```ts export class Image { // ... /** * Encodes the image into a JPEG. * * @param quality `1`-`100`, where `1` is lowest quality (highest compression) * and `100` is highest quality (lowest compression). Default: `90` */ async encodeJPEG(quality?: JPEGQuality): Promise; // ... } /** * - `0` = **lowest** quality (smallest file size) * - `100` = **highest** quality (largest file size) */ export type JPEGQuality = | 1 | 2 | 3 // ... | 98 | 99 | 100; ``` --- ImageScript.d.ts | 1004 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 863 insertions(+), 141 deletions(-) diff --git a/ImageScript.d.ts b/ImageScript.d.ts index 34573e2..c613baa 100644 --- a/ImageScript.d.ts +++ b/ImageScript.d.ts @@ -8,16 +8,20 @@ export class Image { constructor(width: number, height: number); - private toString(): string; + private toString(): `Image<${number}x${number}>`; get width(): number; get height(): number; - * [Symbol.iterator](): void; + *[Symbol.iterator](): void; + + *iterateWithColors(): Generator< + [x: number, y: number, color: number], + void, + unknown + >; - * iterateWithColors(): Generator<[x: number, y: number, color: number], void, unknown>; - static rgbaToColor(r: number, g: number, b: number, a: number): number; static rgbToColor(r: number, g: number, b: number): number; @@ -36,7 +40,7 @@ export class Image { getRGBAAt(x: number, y: number): Uint8ClampedArray; - setPixelAt(x: number, y: number, pixelColor: number): Image; + setPixelAt(x: number, y: number, pixelColor: number): this; private __set_pixel__(x: number, y: number, pixelColor: number): void; @@ -44,167 +48,543 @@ export class Image { private static get __out_of_bounds__(): string; - fill(color: number | colorFunction): Image; + /** + * Fills the entire image with the supplied color. + * + * @param color + */ + fill(color: number | ColorFunction): this; clone(): Image; - static get RESIZE_NEAREST_NEIGHBOR(): string; - - static get RESIZE_AUTO(): number; - - scale(factor: number, mode?: string): Image; - - private __scale__(factor: number, mode?: string); - - resize(width: number, height: number, mode?: string): Image; - - contain(width: number, height: number, mode?: string): Image; - - fit(width: number, height: number, mode?: string): Image; - - cover(width: number, height: number, mode?: string): Image; - - private __resize__(width: number, height: number, mode?: string): Image; - - private __resize_nearest_neighbor__(width: number, height: number): Image; - - crop(x: number, y: number, width: number, height: number): Image; - - private __crop__(x: number, y: number, width: number, height: number): Image; - - drawBox(x: number, y: number, width: number, height: number, color: number | colorFunction): Image; - - private __fast_box__(x: number, y: number, width: number, height: number, color: number): Image; - - drawCircle(x: number, y: number, radius: number, color: number | colorFunction): Image; - - cropCircle(max?: boolean, feathering?: number): Image; - - opacity(opacity: number, absolute?: boolean): Image; - - red(saturation: number, absolute?: boolean): Image; - - green(saturation: number, absolute?: boolean): Image; - - blue(saturation: number, absolute?: boolean): Image; - - private __set_channel_value__(value: number, absolute: boolean, offset: number): void; - - lightness(value: number, absolute?: boolean): Image; - - saturation(value: number, absolute?: boolean): Image; - - composite(source: Image, x?: number, y?: number): Image; - - invert(): Image; - - invertValue(): Image; - - invertSaturation(): Image; - - invertHue(): Image; - - hueShift(degrees: number): Image; - + /** + * Use + * {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} + * resizing. + */ + static get RESIZE_NEAREST_NEIGHBOR(): "RESIZE_NEAREST_NEIGHBOR"; + + /** + * Used for automatically preserving an image's aspect ratio when resizing. + */ + static get RESIZE_AUTO(): -1; + + /** + * Resizes the image by the given factor. + * + * @param factor Fraction, where: + * - `0.5` is "50%" (half) + * - `1.0` is "100%" (same size) + * - `2.0` is "200%" (double) + * @param mode Default: {@link Image.RESIZE_NEAREST_NEIGHBOR} + */ + scale(factor: number, mode?: ResizeMode): this; + + private __scale__(factor: number, mode?: ResizeMode); + + /** + * Resizes the image to the given dimensions. + * Use {@link Image.RESIZE_AUTO} as either width or height to automatically + * preserve the aspect ratio. + * + * @param width The new width. + * @param height The new height. + * @param mode Default: {@link Image.RESIZE_NEAREST_NEIGHBOR} + */ + resize(width: number, height: number, mode?: ResizeMode): this; + + /** + * Resizes the image so it is contained in the given bounding box. + * Can return an image with one axis smaller than the given bounding box. + * + * @param width The width of the bounding box + * @param height The height of the bounding box + * @param mode Default: {@link Image.RESIZE_NEAREST_NEIGHBOR} + */ + contain(width: number, height: number, mode?: ResizeMode): this; + + /** + * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box. + * Always returns the exact dimensions of the bounding box. + * + * @param width The width of the bounding box + * @param height The height of the bounding box + * @param mode Default: {@link Image.RESIZE_NEAREST_NEIGHBOR} + */ + fit(width: number, height: number, mode?: ResizeMode): this; + + /** + * Resizes the image so it covers the given bounding box, cropping the overflowing edges. + * Always returns the exact dimensions of the bounding box. + * + * @param width The width of the bounding box + * @param height The height of the bounding box + * @param mode Default: {@link Image.RESIZE_NEAREST_NEIGHBOR} + */ + cover(width: number, height: number, mode?: ResizeMode): this; + + private __resize__(width: number, height: number, mode?: ResizeMode): this; + + private __resize_nearest_neighbor__(width: number, height: number): this; + + crop(x: number, y: number, width: number, height: number): this; + + private __crop__(x: number, y: number, width: number, height: number): this; + + /** + * Draws a box at the specified coordinates. + */ + drawBox( + x: number, + y: number, + width: number, + height: number, + color: number | ColorFunction + ): this; + + private __fast_box__( + x: number, + y: number, + width: number, + height: number, + color: number + ): this; + + /** + * Draws a circle at the specified coordinates with the specified radius. + */ + drawCircle( + x: number, + y: number, + radius: number, + color: number | ColorFunction + ): this; + + /** + * Crops the image into a circle. + * + * @param max Whether to use the larger dimension for the size. Default: `false` + * @param feathering How much feathering to apply to the edges. Default: `0` + */ + cropCircle(max?: boolean, feathering?: number): this; + + /** + * Sets the image's opacity. + * + * @param opacity `0`-`1`, where `0` is completely transparent and + * `1` is completely opaque. + * @param absolute Whether to scale the current opacity (`false`) or + * just set the new opacity (`true`). Default: `false` + */ + opacity(opacity: number, absolute?: boolean): this; + + /** + * Set the red channel's saturation value. + * + * @param saturation `0`-`1` + * @param absolute Whether to scale the current saturation (`false`) or + * just set the new saturation (`true`). Default: `false` + */ + red(saturation: number, absolute?: boolean): this; + + /** + * Set the green channel's saturation value. + * + * @param saturation `0`-`1` + * @param absolute Whether to scale the current saturation (`false`) or + * just set the new saturation (`true`). Default: `false` + */ + green(saturation: number, absolute?: boolean): this; + + /** + * Set the blue channel's saturation value. + * + * @param saturation `0`-`1` + * @param absolute Whether to scale the current saturation (`false`) or + * just set the new saturation (`true`). Default: `false` + */ + blue(saturation: number, absolute?: boolean): this; + + private __set_channel_value__( + value: number, + absolute: boolean, + offset: number + ): void; + + /** + * Sets the brightness of the image. + * + * @param value `0`-`1` + * @param absolute Whether to scale the current lightness (`false`) or + * just set the new lightness (`true`). Default: `false` + */ + lightness(value: number, absolute?: boolean): this; + + /** + * Sets the saturation of the image. + * + * @param value `0`-`1` + * @param absolute Whether to scale the current saturation (`false`) or + * just set the new saturation (`true`). Default: `false` + */ + saturation(value: number, absolute?: boolean): this; + + /** + * Composites (overlays) the {@link source} onto this image at the + * specified coordinates. + */ + composite(source: this, x?: number, y?: number): this; + + /** + * Inverts the image's colors. + */ + invert(): this; + + /** + * Inverts the image's value (lightness). + */ + invertValue(): this; + + /** + * Inverts the image's saturation. + */ + invertSaturation(): this; + + /** + * Inverts the image's hue. + */ + invertHue(): this; + + /** + * Shifts the image's hue. + */ + hueShift(degrees: number): this; + + /** + * Gets the average color of the image. + */ averageColor(): number; - dominantColor(ignoreBlack?: boolean, ignoreWhite?: boolean, bwThreshold?: number): number; - - rotate(angle: number, resize?: boolean): Image; - - private __apply__(image: Image | Frame): Image | Frame; - - static gradient(colors: { [position: number]: number; }): ((position: number) => number); - - roundCorners(radius?: number): Image; + /** + * Gets the image's dominant color. + * + * @param ignoreBlack Whether to ignore dark colors below the threshold. + * Default: `true` + * @param ignoreWhite Whether to ignore light colors above the threshold. + * Default: `true` + * @param bwThreshold The black/white threshold (`0`-`64`). + * Default: `0xf` (`15`) + */ + dominantColor( + ignoreBlack?: boolean, + ignoreWhite?: boolean, + bwThreshold?: number + ): number; + + /** + * Rotates the image the given amount of degrees. + * + * @param angle The angle to rotate the image for (in degrees) + * @param resize Whether to resize the image so it fits all pixels (`true`) or + * just ignore outlying pixels (`false`). Default: `true` + */ + rotate(angle: number, resize?: boolean): this; + + /** + * Flips / mirrors the image horizontally or vertically. + */ + flip(direction: "horizontal" | "vertical"): this; + + private __apply__(image: this | Frame): this | Frame; + + /** + * Creates a multi-point gradient generator. + * + * @param colors The gradient points to use + * (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`). + * @returns The gradient generator. The function argument is the position + * in the gradient (`0`-`1`). + */ + static gradient(colors: { + [position: number]: number; + }): (position: number) => number; + + /** + * Rounds the image's corners. + * + * @param radius Default: `min(width, height) / 4` + */ + roundCorners(radius?: number): this; private static __gradient__(startColor: number, endColor: number): number; - fisheye(radius?: number): Image; - - async encode(compression?: number, metadata?: PNGMetadata): Promise; + /** + * @param radius Default: `2` + */ + fisheye(radius?: number): this; + + /** + * Encodes the image into a PNG. + * + * @param compression `0`-`9`, where `0` is no compression and `9` is highest + * compression (default: `1`) + * @param metadata + */ + async encode( + compression?: PNGCompressionLevel, + metadata?: PNGMetadata + ): Promise; async encode(metadata?: PNGMetadata): Promise; - async encodeJPEG(quality?: number): Promise; - - async encodeWEBP(quality?: null | number): Promise; - - static async decode(data: Buffer | Uint8Array): Promise - - static get SVG_MODE_SCALE(): number; - - static get SVG_MODE_WIDTH(): number; - - static get SVG_MODE_HEIGHT(): number; + /** + * Encodes the image into a JPEG. + * + * @param quality `1`-`100`, where `1` is lowest quality (highest compression) + * and `100` is highest quality (lowest compression). Default: `90` + */ + async encodeJPEG(quality?: JPEGQuality): Promise; + + /** + * Encodes the image into a WEBP. + * + * @param quality `0`-`100`, or `null` for lossless. `0` is lowest quality + * (highest compression) and `100` is highest quality (lowest compression). + * Default: `null` + */ + async encodeWEBP(quality?: null | WEBPQuality): Promise; + + /** + * Decodes an image (PNG, JPEG or TIFF). + * + * @param data The binary data to decode + * @returns The decoded image + */ + static async decode(data: Buffer | Uint8Array): Promise; + + /** + * Scale the SVG by the given amount. For use with {@link Image.renderSVG}. + */ + static get SVG_MODE_SCALE(): 1; + + /** + * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}. + */ + static get SVG_MODE_WIDTH(): 2; + + /** + * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}. + */ + static get SVG_MODE_HEIGHT(): 3; + + /** + * Creates a new image from the given SVG. + * + * @param svg + * @param size + * @param mode {@link Image.SVG_MODE_SCALE}, {@link Image.SVG_MODE_WIDTH}, or + * {@link Image.SVG_MODE_HEIGHT}. + * + * @returns New bitmap image with the rendered {@link svg}. + */ + static async renderSVG( + svg: string, + size?: number, + mode?: SVGScaleMode + ): Promise; + + /** + * Creates a new image containing the rendered text. + * + * @param font TrueType (ttf/ttc) or OpenType (otf) font buffer to use. + * @param scale + * @param text + * @param color + * @param layout + * + * @returns New image with the rendered {@link text}. + */ + static async renderText( + font: Uint8Array, + scale: number, + text: string, + color?: number, + layout?: TextLayout + ): Promise; +} - static async renderSVG(svg: string, size?: number, mode?: number): Promise; +export type FrameDisposalModeName = "any" | "keep" | "previous" | "background"; - static async renderText(font: Uint8Array, scale: number, text: string, color?: number, layout?: TextLayout): Promise; -}; +export type FrameDisposalModeId = 0 | 1 | 2 | 3; +/** + * Represents a frame in a GIF. + */ export class Frame extends Image { - static get DISPOSAL_KEEP(): string; - - static get DISPOSAL_PREVIOUS(): string; - - static get DISPOSAL_BACKGROUND(): string - - private static __convert_disposal_mode__(mode: string | number): any; - - constructor(width: number, height: number, duration?: number, xOffset?: number, yOffset?: number, disposalMode?: typeof Frame.DISPOSAL_KEEP | string); - + static get DISPOSAL_KEEP(): "keep"; + + static get DISPOSAL_PREVIOUS(): "previous"; + + static get DISPOSAL_BACKGROUND(): "background"; + + private static __convert_disposal_mode__( + mode: FrameDisposalModeName | FrameDisposalModeId + ): FrameDisposalModeId; + + /** + * Creates a new, blank frame. + * + * @param width + * @param height + * @param duration Milliseconds (default: `100`) + * @param xOffset Offset on the X-axis (default: `0`) + * @param yOffset Offset on the y-axis (default: `0`) + * @param disposalMode The frame's disposal mode (default: `'keep'`) + */ + constructor( + width: number, + height: number, + duration: number, + xOffset?: number, + yOffset?: number, + disposalMode?: FrameDisposalModeName | FrameDisposalModeId + ); + + /** + * Milliseconds. + */ duration: number; xOffset: number; yOffset: number; - get disposalMode(): number; - - set disposalMode(disposalMode: string|number); - - toString(): string; - - static from(image: Image, duration?: number, xOffset?: number, yOffset?: number, disposalMode?: typeof Frame.DISPOSAL_KEEP | string): Frame; - - resize(width: number, height: number, mode?: typeof Image.RESIZE_NEAREST_NEIGHBOR | string): Image; -}; + get disposalMode(): FrameDisposalModeId; + + set disposalMode(disposalMode: FrameDisposalModeName | FrameDisposalModeId); + + toString(): `Frame<${number}x${number}x${number}ms>`; + + /** + * Converts an Image instance to a Frame, cloning it in the process + * @param image The image to create the frame from + * @param duration Milliseconds (default: `100`) + * @param xOffset Offset on the X-axis (default: `0`) + * @param yOffset Offset on the y-axis (default: `0`) + * @param disposalMode The frame's disposal mode (default: `'keep'`) + */ + static from( + image: Image, + duration?: number, + xOffset?: number, + yOffset?: number, + disposalMode?: FrameDisposalModeName | FrameDisposalModeId + ): Frame; + + /** + * @param width + * @param height + * @param mode Default: {@link Frame.DISPOSAL_KEEP} + */ + resize( + width: number, + height: number, + mode?: typeof Image.RESIZE_NEAREST_NEIGHBOR | string + ): Image; +} -export class GIF extends Array { +/** + * Represents a GIF image as an array of frames. + */ +export class GIF extends Array { + /** + * @param frames + * @param loopCount How many times to loop the GIF for (`-1` = unlimited). + */ constructor(frames: Frame[], loopCount?: number); get width(): number; get height(): number; - toString(): string; + toString(): `GIF<${number}x${number}x${number}ms>`; - * [Symbol.iterator](): Generator + *[Symbol.iterator](): Generator; slice(start: number, end: number): GIF; + /** + * Milliseconds. + */ get duration(): number; - async encode(quality?: number): Promise + /** + * @param quality GIF quality `0`-`100` (default: `95`) + */ + async encode(quality?: GIFQuality): Promise; + + /** + * @param data + * @param onlyExtractFirstFrame Whether to end GIF decoding after the first + * frame (default: `false`) + */ + static async decode( + data: Buffer | Uint8Array, + onlyExtractFirstFrame?: boolean + ): Promise; + + /** + * @param width + * @param height + * @param mode Default: {@link Image.RESIZE_NEAREST_NEIGHBOR} + */ + resize(width: number, height: number, mode?: ResizeMode): void; +} - static async decode(data: Buffer | Uint8Array, onlyExtractFirstFrame?: boolean): Promise; +export type WrapStyle = "word" | "char"; - resize(width: number, height: number, mode?: typeof Image.RESIZE_NEAREST_NEIGHBOR | string): void; -} +export type VerticalAlign = "left" | "center" | "right"; + +export type HorizontalAlign = "top" | "middle" | "bottom"; export class TextLayout { + /** + * @param options Defaults: + * ```js + * { + * maxWidth: Infinity, + * maxHeight: Infinity, + * wrapStyle: 'word', + * verticalAlign: 'left', + * horizontalAlign: 'top', + * wrapHardBreaks: true, + * } + * ``` + */ constructor(options?: { - maxWidth?: number, - maxHeight?: number, - wrapStyle?: string, - verticalAlign?: string, - horizontalAlign?: string, - wrapHardBreaks?: boolean + /** @default Infinity */ + maxWidth?: number; + + /** @default Infinity */ + maxHeight?: number; + + /** @default 'word' */ + wrapStyle?: WrapStyle; + + /** @default 'left' */ + verticalAlign?: VerticalAlign; + + /** @default 'top' */ + horizontalAlign?: HorizontalAlign; + + /** @default true */ + wrapHardBreaks?: boolean; }); -}; +} + +export type ImageTypeName = "png" | "jpeg" | "tiff" | "gif"; export class ImageType { - static getType(data: Buffer | Uint8Array): string | null; + static getType(data: Buffer | Uint8Array): ImageTypeName | null; static isPNG(view: DataView): boolean; @@ -213,21 +593,363 @@ export class ImageType { static isTIFF(view: DataView): boolean; static isGIF(view: DataView): boolean; -}; +} -export function decode(data: Uint8Array | Buffer, onlyExtractFirstFrame?: boolean): Promise; - -type colorFunction = (x: number, y: number) => number; - -type PNGMetadata = { - title?: string, - author?: string, - description?: string, - copyright?: string, - creationTime?: string | number | Date, - software?: string, - disclaimer?: string, - warning?: string, - source?: string, - comment?: string +/** + * @param data + * @param onlyExtractFirstFrame Whether to end GIF decoding after the first + * frame (default: `false`) + */ +export function decode( + data: Uint8Array | Buffer, + onlyExtractFirstFrame?: boolean +): Promise; + +export type PNGMetadata = { + title?: string; + author?: string; + description?: string; + copyright?: string; + creationTime?: string | number | Date; + software?: string; + disclaimer?: string; + warning?: string; + source?: string; + comment?: string; }; + +export type ColorFunction = (x: number, y: number) => number; + +export type ResizeMode = "RESIZE_NEAREST_NEIGHBOR" | -1; + +/** + * - `0` = no compression + * - `9` = highest compression + */ +export type PNGCompressionLevel = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; + +/** + * {@link Image.SVG_MODE_SCALE}, {@link Image.SVG_MODE_WIDTH}, or + * {@link Image.SVG_MODE_HEIGHT}. + */ +export type SVGScaleMode = 1 | 2 | 3; + +/** + * - `0` = **lowest** quality (smallest file size) + * - `100` = **highest** quality (largest file size) + */ +export type WEBPQuality = + | 0 + | 1 + | 2 + | 3 + | 4 + | 5 + | 6 + | 7 + | 8 + | 9 + | 10 + | 11 + | 12 + | 13 + | 14 + | 15 + | 16 + | 17 + | 18 + | 19 + | 20 + | 21 + | 22 + | 23 + | 24 + | 25 + | 26 + | 27 + | 28 + | 29 + | 30 + | 31 + | 32 + | 33 + | 34 + | 35 + | 36 + | 37 + | 38 + | 39 + | 40 + | 41 + | 42 + | 43 + | 44 + | 45 + | 46 + | 47 + | 48 + | 49 + | 50 + | 51 + | 52 + | 53 + | 54 + | 55 + | 56 + | 57 + | 58 + | 59 + | 60 + | 61 + | 62 + | 63 + | 64 + | 65 + | 66 + | 67 + | 68 + | 69 + | 70 + | 71 + | 72 + | 73 + | 74 + | 75 + | 76 + | 77 + | 78 + | 79 + | 80 + | 81 + | 82 + | 83 + | 84 + | 85 + | 86 + | 87 + | 88 + | 89 + | 90 + | 91 + | 92 + | 93 + | 94 + | 95 + | 96 + | 97 + | 98 + | 99 + | 100; + +/** + * - `0` = **lowest** quality (smallest file size) + * - `100` = **highest** quality (largest file size) + */ +export type JPEGQuality = + | 1 + | 2 + | 3 + | 4 + | 5 + | 6 + | 7 + | 8 + | 9 + | 10 + | 11 + | 12 + | 13 + | 14 + | 15 + | 16 + | 17 + | 18 + | 19 + | 20 + | 21 + | 22 + | 23 + | 24 + | 25 + | 26 + | 27 + | 28 + | 29 + | 30 + | 31 + | 32 + | 33 + | 34 + | 35 + | 36 + | 37 + | 38 + | 39 + | 40 + | 41 + | 42 + | 43 + | 44 + | 45 + | 46 + | 47 + | 48 + | 49 + | 50 + | 51 + | 52 + | 53 + | 54 + | 55 + | 56 + | 57 + | 58 + | 59 + | 60 + | 61 + | 62 + | 63 + | 64 + | 65 + | 66 + | 67 + | 68 + | 69 + | 70 + | 71 + | 72 + | 73 + | 74 + | 75 + | 76 + | 77 + | 78 + | 79 + | 80 + | 81 + | 82 + | 83 + | 84 + | 85 + | 86 + | 87 + | 88 + | 89 + | 90 + | 91 + | 92 + | 93 + | 94 + | 95 + | 96 + | 97 + | 98 + | 99 + | 100; + +/** + * - `0` = **lowest** quality (smallest file size) + * - `100` = **highest** quality (largest file size) + */ +export type GIFQuality = + | 0 + | 1 + | 2 + | 3 + | 4 + | 5 + | 6 + | 7 + | 8 + | 9 + | 10 + | 11 + | 12 + | 13 + | 14 + | 15 + | 16 + | 17 + | 18 + | 19 + | 20 + | 21 + | 22 + | 23 + | 24 + | 25 + | 26 + | 27 + | 28 + | 29 + | 30 + | 31 + | 32 + | 33 + | 34 + | 35 + | 36 + | 37 + | 38 + | 39 + | 40 + | 41 + | 42 + | 43 + | 44 + | 45 + | 46 + | 47 + | 48 + | 49 + | 50 + | 51 + | 52 + | 53 + | 54 + | 55 + | 56 + | 57 + | 58 + | 59 + | 60 + | 61 + | 62 + | 63 + | 64 + | 65 + | 66 + | 67 + | 68 + | 69 + | 70 + | 71 + | 72 + | 73 + | 74 + | 75 + | 76 + | 77 + | 78 + | 79 + | 80 + | 81 + | 82 + | 83 + | 84 + | 85 + | 86 + | 87 + | 88 + | 89 + | 90 + | 91 + | 92 + | 93 + | 94 + | 95 + | 96 + | 97 + | 98 + | 99 + | 100; From 74339b22a475fcd5a1da933c2e7b87a9582b5b5a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 1 Jun 2025 12:41:37 +0000 Subject: [PATCH 120/120] Update bundle --- browser/ImageScript.js | 2 +- browser/ImageScript.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/ImageScript.js b/browser/ImageScript.js index df5b8f6..9e91947 100644 --- a/browser/ImageScript.js +++ b/browser/ImageScript.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(()=>{return t={248:(t,e,r)=>{const i=r(511),n=r(740),s=r(763),o=r(607),{version:a}=r(330),h=r(816),l=r(751),f=r(706);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255&~a?255&a?this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1):this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,a,!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}get disposalMode(){return this.__disposalMode__}set disposalMode(t){this.__disposalMode__=_.__convert_disposal_mode__(t)}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t=4&&2303741511===t.getUint32(0,!1)}static isJPEG(t){return t.byteLength>=4&&t.getUint32(0,!1)>>>8==16767231}static isTIFF(t){return t.byteLength>=4&&1229531648===t.getUint32(0,!1)}static isGIF(t){return t.byteLength>=4&&t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},740:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if("undefined"!=typeof SharedArrayBuffer&&e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},223:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},511:(t,e,r)=>{const i=r(740),n=r(223),{compress:s,decompress:o}=r(639),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}},763:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},751:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},607:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},706:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},639:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3;return(t[i]|t[i+1]<<8)>>(7&e)&r},I=function(t,e){var r=e>>3;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},U=function(t){return(t>>3)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},B=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=B(h,m)+B(l,b)+f,q=B(h,d)+B(l,x)+f+14+3*$+B(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return z(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);t.exports={compress:function(t,o){return function(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(c=2,_=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=z(g,d,t.subarray(p,m)):(g[p]=c,d=z(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,B,L,W,p-W,d),L=G=B=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];B+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,B,L,W,p-W,d),!c&&7&d&&(d=z(g,d+1,D))}return R(u,0,h+U(d)+l)}(h=t,null==(l=o).level?6:l.level,null==l.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(h.length)))):12+l.mem,c,_,!u));return g=m,d=o.level,p=0===d?0:d<6?1:9===d?3:2,g[0]=120,g[1]=p<<6|(p?32-2*p:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}(t,{level:o})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=U(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,B=N+S(t,w+5,31)+1;w+=14;for(var z=new e(B),C=new e(19),H=0;H>>4)<16)z[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=z[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)z[H++]=$}}var P=z.subarray(0,N),Z=z.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=I(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},330:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","types":"ImageScript.d.ts","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"Mathis Mensing ","license":"(AGPL-3.0-or-later OR MIT)","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=14.0.0"}}')}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(248);var t,e})); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ImageScript=e():t.ImageScript=e()}(self,(()=>{return t={223:t=>{const e=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);t.exports=function(t){let r=0,i=-1;const n=t.length-4|0;for(;n>r;)i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8,i=e[255&(i^t[r++])]^i>>>8;for(;r>>8;return(4294967295^i)>>>0}},248:(t,e,r)=>{const i=r(511),n=r(740),s=r(763),o=r(607),{version:a}=r(330),h=r(816),l=r(751),f=r(706);class c{constructor(t,e){if(e=~~e,(t=~~t)<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");this.__width__=t,this.__height__=e,this.__buffer__=new ArrayBuffer(t*e*4),this.__view__=new DataView(this.__buffer__),this.__u32__=new Uint32Array(this.__buffer__),this.bitmap=new Uint8ClampedArray(this.__buffer__)}toString(){return`Image<${this.width}x${this.height}>`}get width(){return this.__width__}get height(){return this.__height__}*[Symbol.iterator](){for(let t=1;t<=this.height;t++)for(let e=1;e<=this.width;e++)yield[e,t]}*iterateWithColors(){let t=0;for(let e=1;e<=this.height;e++)for(let r=1;r<=this.width;r++)yield[r,e,this.__view__.getUint32(t,!1)],t+=4}static rgbaToColor(t,e,r,i){return((255&t)<<24|(255&e)<<16|(255&r)<<8|255&i)>>>0}static rgbToColor(t,e,r){return c.rgbaToColor(t,e,r,255)}static hslaToColor(t,e,r,i){let n,s,o;if(t%=1,e=Math.min(1,Math.max(0,e)),r=Math.min(1,Math.max(0,r)),i=Math.min(1,Math.max(0,i)),0===e)n=s=o=r;else{const i=(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),a=r<.5?r*(1+e):r+e-r*e,h=2*r-a;n=i(h,a,t+1/3),s=i(h,a,t),o=i(h,a,t-1/3)}return c.rgbaToColor(255*n,255*s,255*o,255*i)}static hslToColor(t,e,r){return c.hslaToColor(t,e,r,1)}static rgbaToHSLA(t,e,r,i){t/=255,e/=255,r/=255;const n=Math.max(t,e,r),s=Math.min(t,e,r);let o,a,h=(n+s)/2;if(n===s)o=a=0;else{const i=n-s;switch(a=h>.5?i/(2-n-s):i/(n+s),n){case t:o=(e-r)/i+(e>24&255,t>>16&255,t>>8&255,255&t]}static colorToRGB(t){return c.colorToRGBA(t).slice(0,3)}getPixelAt(t,e){return this.__check_boundaries__(t,e),this.__view__.getUint32(4*((~~e-1)*this.width+(~~t-1)),!1)}getRGBAAt(t,e){this.__check_boundaries__(t,e);const r=4*((~~e-1)*this.width+(~~t-1));return this.bitmap.subarray(r,r+4)}setPixelAt(t,e,r){return t=~~t,e=~~e,this.__check_boundaries__(t,e),this.__set_pixel__(t,e,r),this}__set_pixel__(t,e,r){this.__view__.setUint32(4*((e-1)*this.width+(t-1)),r,!1)}__check_boundaries__(t,e){if(isNaN(t))throw new TypeError(`Invalid pixel coordinates (x=${t})`);if(isNaN(e))throw new TypeError(`Invalid pixel coordinates (y=${e})`);if(t<1)throw new RangeError(`${c.__out_of_bounds__} (x=${t})<1`);if(t>this.width)throw new RangeError(`${c.__out_of_bounds__} (x=${t})>(width=${this.width})`);if(e<1)throw new RangeError(`${c.__out_of_bounds__} (y=${e})<1`);if(e>this.height)throw new RangeError(`${c.__out_of_bounds__} (y=${e})>(height=${this.height})`)}static get __out_of_bounds__(){return"Tried referencing a pixel outside of the images boundaries:"}fill(t){if("function"!=typeof t)this.__view__.setUint32(0,t,!1),this.__u32__.fill(this.__u32__[0]);else{let e=0;for(let r=1;r<=this.height;r++)for(let i=1;i<=this.width;i++)this.__view__.setUint32(e,t(i,r),!1),e+=4}return this}clone(){const t=new c(this.width,this.height);return t.bitmap.set(this.bitmap),t}static get RESIZE_NEAREST_NEIGHBOR(){return"RESIZE_NEAREST_NEIGHBOR"}static get RESIZE_AUTO(){return-1}scale(t,e=c.RESIZE_NEAREST_NEIGHBOR){const r=this.__scale__(t,e);return this.__apply__(r)}__scale__(t,e=c.RESIZE_NEAREST_NEIGHBOR){return 1===t?this:this.__resize__(this.width*t,this.height*t,e)}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.__resize__(t,e,r);return this.__apply__(i)}contain(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?e/this.height:t/this.width;return this.scale(i,r)}fit(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=new c(t,e);return this.contain(t,e,r),i.composite(this,(t-this.width)/2,(e-this.height)/2),this.__apply__(i)}cover(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=t/e>this.width/this.height?t/this.width:e/this.height,n=this.scale(i,r);return n.crop((n.width-t)/2,(n.height-e)/2,t,e)}__resize__(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){if(t===c.RESIZE_AUTO&&e===c.RESIZE_AUTO)throw new Error("RESIZE_AUTO can only be used for either width or height, not for both");if(t===c.RESIZE_AUTO?t=this.width/this.height*e:e===c.RESIZE_AUTO&&(e=this.height/this.width*t),t=Math.floor(t),e=Math.floor(e),t<1)throw new RangeError("Image has to be at least 1 pixel wide");if(e<1)throw new RangeError("Image has to be at least 1 pixel high");let i;if(r!==c.RESIZE_NEAREST_NEIGHBOR)throw new Error("Invalid resize mode");return i=this.__resize_nearest_neighbor__(t,e),i}__resize_nearest_neighbor__(t,e){const r=new this.constructor(t,e);for(let i=0;ithis.width&&(r=this.width),i>this.height&&(i=this.height),this.__apply__(this.__crop__(~~t,~~e,~~r,~~i))}__crop__(t,e,r,i){t=~~t,e=~~e;const n=new this.constructor(r,i);for(let s=0;sthis.width||o>this.height)continue;const a=n(i,s);this.__set_pixel__(r,o,a)}return this}__fast_box__(t,e,r,i,n){t<0&&(r+=t,t=0),e<0&&(i+=e,e=0);const s=Math.max(Math.min(t+r,this.width),1);let o=s;for(;t<=--o;)this.__view__.setUint32(4*(o+e*this.width),n);const a=4*(s+e*this.width),h=4*(t+e*this.width);let l=Math.max(Math.min(e+i,this.height),1);for(;e<--l;)this.bitmap.copyWithin(4*(t+l*this.width),h,a);return this}drawCircle(t,e,r,i){const n=r**2;for(let s=Math.max(1,e-r);s<=Math.min(e+r,this.height);s++)for(let o=Math.max(1,t-r);o<=Math.min(t+r,this.width);o++)(o-t)**2+(s-e)**2r?this.bitmap[a]=0:e&&(this.bitmap[a]*=Math.max(0,Math.min(1,1-o/r*e**.5)))}return this}opacity(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid opacity value");return this.__set_channel_value__(t,e,3),this}red(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,0),this}green(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,1),this}blue(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.__set_channel_value__(t,e,2),this}__set_channel_value__(t,e,r){for(let i=r;i{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,s,t*(e?1:o),a)}))}saturation(t,e=!1){if(isNaN(t)||t<0)throw new RangeError("Invalid saturation value");return this.fill(((r,i)=>{const[n,s,o,a]=c.rgbaToHSLA(...this.getRGBAAt(r,i));return c.hslaToColor(n,t*(e?1:s),o,a)}))}composite(t,e=0,r=0){e=~~e,r=~~r;for(let i=0;i=this.height)break;for(let r=0;r=this.width)break;const o=4*(s+n*this.width),a=t.__view__.getUint32(4*(r+i*t.width),!1),h=this.__view__.getUint32(o,!1);255&~a?255&a?this.__view__.setUint32(o,c.__alpha_blend__(a,h),!1):this.__view__.setUint32(o,h,!1):this.__view__.setUint32(o,a,!1)}}}return this}static __alpha_blend__(t,e){const r=255&t,i=r+1,n=256-r;return(255&i*(t>>>24)+n*(e>>>24)>>8)<<24|(255&i*(t>>16&255)+n*(e>>16&255)>>8)<<16|(255&i*(t>>8&255)+n*(e>>8&255)>>8)<<8|255&Math.max(r,255&e)}invert(){for(const[t,e,r]of this.iterateWithColors())this.__set_pixel__(t,e,4294967295-r&4294967040|255&r);return this}invertValue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,n,1-s,o))}return this}invertSaturation(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(i,1-n,s,o))}return this}invertHue(){for(const[t,e,r]of this.iterateWithColors()){const[i,n,s,o]=c.rgbaToHSLA(...c.colorToRGBA(r));this.__set_pixel__(t,e,c.hslaToColor(1-i,n,s,o))}return this}hueShift(t){for(const[e,r,i]of this.iterateWithColors()){const[n,s,o,a]=c.rgbaToHSLA(...c.colorToRGBA(i));this.__set_pixel__(e,r,c.hslaToColor(n+t/360,s,o,a))}return this}averageColor(){let t=[0,0,0],e=0;for(let r=0;rt/e)),255)}dominantColor(t=!0,e=!0,r=15){const i=new Array(262143);for(let n=0;n~~(63*t)));if(t&&h63-r)continue;const l=o<<12|a<<6|h;i[l]=(i[l]||0)+1}let n=-1,s=0;if(i.forEach(((t,e)=>{t>>12&63,a=s>>>6&63,h=63&s;return c.hslaToColor(o/63,a/63,h/63,1)}rotate(t,e=!0){if(t%360==0)return this;if(t%180==0)return this.__rotate_180__();const r=Math.PI*(t/180),i=Math.sin(r),n=Math.cos(r),s=e?Math.abs(this.width*i)+Math.abs(this.height*n):this.width,o=e?Math.abs(this.width*n)+Math.abs(this.height*i):this.height,a=new c(s,o),h=s/2-.5,l=o/2-.5,f=this.width/2-.5,_=this.height/2-.5;let u=0;do{let t=0;const e=f-i*(u-l),r=_+n*(u-l);do{const s=e+n*(t-h),o=r+i*(t-h);c.__interpolate__(this,a,t,u,s,o)}while(t++0&&e>0&&tt[0]-e[0])),r=e.map((t=>parseFloat(t[0]))),i=e.map((t=>t[1]));if(0===r.length)throw new RangeError("Invalid gradient point count");if(1===r.length)return()=>i[0];if(2===r.length){const t=this.__gradient__(i[0],i[1]);return e=>e<=r[0]?i[0]:e>=r[1]?i[1]:t((e-r[0])/(r[1]-r[0]))}const n=Math.min(...r),s=Math.max(...r);let o=[];for(let t=0;t{if(t<=n)return o[0].gradient(0);if(t>=s)return o[o.length-1].gradient(1);for(const e of o)if(t>=e.min&&t<=e.max)return e.gradient((t-e.min)/(e.max-e.min));throw new RangeError(`Invalid gradient position: ${t}`)}}roundCorners(t=Math.min(this.width,this.height)/4){const e=t**2;for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=1;r<=t;r++){const i=(r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=1;n<=t;n++)i+(n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}for(let r=this.width-t;r<=this.width;r++){const i=(this.width-r-t)**2;for(let n=this.height-t;n<=this.height;n++)i+(this.height-n-t)**2>e&&(this.bitmap[4*((n-1)*this.width+r-1)+3]=0)}return this}static __gradient__(t,e){const r=t>>>24,i=t>>16&255,n=t>>8&255,s=255&t,o=(e>>>24)-r,a=(e>>16&255)-i,h=(e>>8&255)-n,l=(255&e)-s;return t=>(255&r+t*o)<<24|(255&i+t*a)<<16|(255&n+t*h)<<8|255&s+t*l}fisheye(t=2){const e=new c(this.width,this.height),r=this.width,i=this.height,n=this.__u32__,s=e.__u32__,o=1/r,a=1/i;for(const[e,h]of this){const l=e*o-.5,f=h*a-.5,c=Math.sqrt(l**2+f**2),_=2*c**t,u=(_*l/c+.5)*r|0,w=(_*f/c+.5)*i|0;u<1||u>r||w<1||w>i||isNaN(u)||isNaN(w)||(s[h*r+e]=n[r*w+u])}const h=.5*n.length+r/2;return s[h]=n[h],this.__apply__(e)}async encode(t=1,{title:e,author:r,description:n,copyright:s,creationTime:o,software:h,disclaimer:l,warning:f,source:c,comment:_}={}){return i.encode(this.bitmap,{width:this.width,height:this.height,level:t,channels:4,text:{Title:e,Author:r,Description:n,Copyright:s,"Creation Time":new Date(void 0===o?Date.now():o).toUTCString(),Software:void 0===h?`github.com/matmen/ImageScript v${a}`:h,Disclaimer:l,Warning:f,Source:c,Comment:_}})}async encodeJPEG(t=90){return(await l.init()).encode(this.bitmap,this.width,this.height,t)}static async decode(t){let e;t=n.view(t);const r=new DataView(t.buffer,t.byteOffset,t.byteLength);if(g.isPNG(r)){const{width:r,height:n,pixels:s}=i.decode(t);e=new c(r,n),e.bitmap.set(s)}else if(g.isJPEG(r)){const r=(await l.init()).decode(t),i=r.width,n=r.height,s=r.format;e=new c(i,n);const o=r.buffer;if(0===s){const t=new DataView(e.bitmap.buffer);for(let e=0;e 0");if(r!==this.SVG_MODE_SCALE&&e<1)throw new RangeError("SVG size must be >= 1");"string"==typeof t&&(t=(new TextEncoder).encode(t));const i=(await o.init()).rasterize(t,r,e),n=new c(i.width,i.height);return n.bitmap.set(i.buffer),n}static async renderText(t,e,r,i=4294967295,n=new w){const{Font:s,Layout:o}=await h.init();t=new s(e,t);const[a,l,f,_]=c.colorToRGBA(i),u=new o;u.reset({max_width:n.maxWidth,max_height:n.maxHeight,wrap_style:n.wrapStyle,vertical_align:n.verticalAlign,horizontal_align:n.horizontalAlign,wrap_hard_breaks:n.wrapHardBreaks}),u.append(t,r,{scale:e});const g=u.rasterize(a,l,f),d=new c(g.width,g.height);return d.bitmap.set(g.buffer),d.height>n.maxHeight&&d.crop(0,0,d.width,Math.floor(u.lines()/d.height*n.maxHeight)*(d.height/u.lines())),t.free(),u.free(),d.opacity(_/255)}}class _ extends c{static get DISPOSAL_KEEP(){return"keep"}static get DISPOSAL_PREVIOUS(){return"previous"}static get DISPOSAL_BACKGROUND(){return"background"}static __convert_disposal_mode__(t){if("string"==typeof t&&(t=["any","keep","previous","background"].indexOf(t)),t<0||t>3)throw new RangeError("Invalid disposal mode");return t}constructor(t,e,r=100,i=0,n=0,s=_.DISPOSAL_KEEP){if(isNaN(r)||r<0)throw new RangeError("Invalid frame duration");super(t,e),this.duration=r,this.xOffset=i,this.yOffset=n,this.disposalMode=s}get disposalMode(){return this.__disposalMode__}set disposalMode(t){this.__disposalMode__=_.__convert_disposal_mode__(t)}toString(){return`Frame<${this.width}x${this.height}x${this.duration}ms>`}static from(t,e,r,i,n=_.DISPOSAL_KEEP){if(!(t instanceof c))throw new TypeError("Invalid image passed");const s=new _(t.width,t.height,e,r,i,n);return s.bitmap.set(t.bitmap),s}resize(t,e,r=c.RESIZE_NEAREST_NEIGHBOR){const i=this.width,n=this.height,s=super.resize(t,e,r);return this.xOffset*=s.width/i,this.yOffset*=s.height/n,s}}class u extends Array{constructor(t,e=-1){super(...t);for(const t of this)if(!(t instanceof _))throw new TypeError(`Frame ${this.indexOf(t)} is not an instance of Frame`);if(e<-1||isNaN(e))throw new RangeError("Invalid loop count");this.loopCount=e}get width(){let t=0;for(const e of this){let r=e.width+e.xOffset;t`}*[Symbol.iterator](){for(let t=0;tt+e.duration),0)}async encode(t=95){const e=new((await s.init()).Encoder)(this.width,this.height,this.loopCount);for(const r of this){if(!(r instanceof _))throw new Error("GIF contains invalid frames");e.add(r.xOffset,r.yOffset,~~(r.duration/10),r.width,r.height,r.bitmap,r.disposalMode,t/100*29+1)}return e.u8()}static async decode(t,e=!1){let r;t=n.view(t);const i=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!g.isGIF(i))throw new Error("Unsupported image type");{const i=[],n=new((await s.init()).Decoder)(t);if(e){const t=n.frames().next().value,e=new _(t.width,t.height,10*t.delay,t.x,t.y,t.dispose);e.bitmap.set(t.buffer),i.push(e),r=new u(i)}const o=0|n.width,a=0|n.height,h=new Uint32Array(n.width*n.height),l=new Uint8Array(h.buffer,h.byteOffset,h.byteLength);for(const t of n.frames()){let e=0,r=0;const n=0|t.x,s=0|t.y,f=t.buffer,c=t.dispose,u=0|t.width,w=0|t.height,g=new Uint32Array(f.buffer,f.byteOffset,u*w),d=i[i.push(new _(o,a,10*t.delay,0,0,3))-1].bitmap,p=new Uint32Array(d.buffer);if(d.set(l),2===c)for(let t=0;t=4&&2303741511===t.getUint32(0,!1)}static isJPEG(t){return t.byteLength>=4&&t.getUint32(0,!1)>>>8==16767231}static isTIFF(t){return t.byteLength>=4&&1229531648===t.getUint32(0,!1)}static isGIF(t){return t.byteLength>=4&&t.getUint32(0,!1)>>>8==4671814}}t.exports={Image:c,GIF:u,Frame:_,TextLayout:w,ImageType:g,decode:function(t,e){return"gif"===g.getType(t)?u.decode(t,e):c.decode(t)}}},330:t=>{"use strict";t.exports=JSON.parse('{"name":"imagescript","version":"1.2.16","description":"zero-dependency javascript image manipulation","main":"ImageScript.js","types":"ImageScript.d.ts","type":"commonjs","scripts":{"build":"webpack"},"repository":{"type":"git","url":"git+https://github.com/matmen/ImageScript.git"},"keywords":["image","image processing","image manipulation","png","jpeg","jpg","scale","resize","crop","webp","svg","bitmap","gif","picture","thumbnail"],"author":"Mathis Mensing ","license":"(AGPL-3.0-or-later OR MIT)","bugs":{"url":"https://github.com/matmen/ImageScript/issues"},"homepage":"https://github.com/matmen/ImageScript#readme","engines":{"node":">=14.0.0"}}')},511:(t,e,r)=>{const i=r(740),n=r(223),{compress:s,decompress:o}=r(639),a=new Uint8Array([73,72,68,82]),h=new Uint8Array([73,68,65,84]),l=new Uint8Array([73,69,78,68]),f=n(new Uint8Array([73,69,78,68])),c=new Uint8Array([137,80,78,71,13,10,26,10]),_={1:0,2:4,3:2,4:6},u=new TextEncoder;t.exports={encode(t,{text:e,width:r,height:o,channels:w,depth:g=8,level:d=0}){let p=0,m=0;const b=r*w,y=new Uint8Array(o+t.length);for(;pm)break}for(t=o(1===g.length?g[0]:i.from_parts(g),n+n*f);_>1)}else{for(;s>1);for(;s>1)}},filter_4(t,e,r,i,n){let s=0;if(0===r){for(;s{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/svg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{rasterize:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.rasterize(s,r.length,i,n);if(0===o)throw new Error("svg: failed to parse");if(1===o)throw new Error("svg: failed to rasterize");const a={width:t.rasterize_width(o),height:t.rasterize_height(o),buffer:e.u8(t.rasterize_buffer(o),e.length()).slice()};return t.rasterize_free(o),a}}}}},639:t=>{var e=Uint8Array,r=Uint16Array,i=Uint32Array,n=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),s=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var n=new r(31),s=0;s<31;++s)n[s]=e+=1<>>1|(21845&d)<<1))>>>2|(13107&c)<<2))>>>4|(3855&c)<<4,g[d]=((65280&c)>>>8|(255&c)<<8)>>>1;var p=function(t,e,i){for(var n=t.length,s=0,o=new r(e);s>>l]=f}else for(a=new r(n),s=0;s>>15-t[s]);return a},m=new e(288);for(d=0;d<144;++d)m[d]=8;for(d=144;d<256;++d)m[d]=9;for(d=256;d<280;++d)m[d]=7;for(d=280;d<288;++d)m[d]=8;var b=new e(32);for(d=0;d<32;++d)b[d]=5;var y=p(m,9,0),v=p(m,9,1),E=p(b,5,0),A=p(b,5,1),x=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},S=function(t,e,r){var i=e>>3;return(t[i]|t[i+1]<<8)>>(7&e)&r},I=function(t,e){var r=e>>3;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(7&e)},U=function(t){return(t>>3)+(7&t&&1)},R=function(t,n,s){(null==n||n<0)&&(n=0),(null==s||s>t.length)&&(s=t.length);var o=new(t instanceof r?r:t instanceof i?i:e)(s-n);return o.set(t.subarray(n,s)),o},T=function(t,e,r){r<<=7&e;var i=e>>3;t[i]|=r,t[i+1]|=r>>>8},M=function(t,e,r){r<<=7&e;var i=e>>3;t[i]|=r,t[i+1]|=r>>>8,t[i+2]|=r>>>16},O=function(t,i){for(var n=[],s=0;sw&&(w=a[s].s);var g=new r(w+1),d=N(n[_-1],g,0);if(d>i){s=0;var p=0,m=d-i,b=1<i))break;p+=b-(1<>>=m;p>0;){var v=a[s].s;g[v]=0&&p;--s){var E=a[s].s;g[E]===i&&(--g[E],++p)}d=i}return[new e(g),d]},N=function(t,e,r){return-1===t.s?Math.max(N(t.l,e,r+1),N(t.r,e,r+1)):e[t.s]=r},G=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new r(++e),n=0,s=t[0],o=1,a=function(t){i[n++]=t},h=1;h<=e;++h)if(t[h]===s&&h!==e)++o;else{if(!s&&o>2){for(;o>138;o-=138)a(32754);o>2&&(a(o>10?o-11<<5|28690:o-3<<5|12305),o=0)}else if(o>3){for(a(s),--o;o>6;o-=6)a(8304);o>2&&(a(o-3<<5|8208),o=0)}for(;o--;)a(s);o=1,s=t[h]}return[i.subarray(0,n),e]},B=function(t,e){for(var r=0,i=0;i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var s=0;s4&&!W[o[$-1]];--$);var F,P,Z,j,J=u+5<<3,K=B(h,m)+B(l,b)+f,q=B(h,d)+B(l,x)+f+14+3*$+B(D,W)+(2*D[16]+3*D[17]+7*D[18]);if(J<=K&&J<=q)return z(e,w,t.subarray(_,_+u));if(T(e,w,1+(q15&&(T(e,w,tt[L]>>>5&127),w+=tt[L]>>>12)}}}else F=y,P=m,Z=E,j=b;for(L=0;L255){et=a[L]>>>18&31,M(e,w,F[et+257]),w+=P[et+257],et>7&&(T(e,w,a[L]>>>23&31),w+=n[et]);var rt=31&a[L];M(e,w,Z[rt]),w+=j[rt],rt>3&&(M(e,w,a[L]>>>5&8191),w+=s[rt])}else M(e,w,F[a[L]]),w+=P[a[L]];return M(e,w,F[256]),w+P[256]},H=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new e(0);function L(t,o){o||(o={});var a=function(){var t=1,e=0;return{p:function(r){for(var i=t,n=e,s=0|r.length,o=0;o!==s;){for(var a=Math.min(o+2655,s);o>16),n=(65535&n)+15*(n>>16)}t=i,e=n},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(e%=65521))<<8|e>>>8}}}();a.p(t);var h,l,c,_,u,g,d,p,m=(g=2,d=4,function(t,o,a,h,l,c){var _=t.length,u=new e(h+_+5*(1+Math.ceil(_/7e3))+l),g=u.subarray(h,u.length-l),d=0;if(!o||_<8)for(var p=0;p<=_;p+=65535){var m=p+65535;m<_?d=z(g,d,t.subarray(p,m)):(g[p]=c,d=z(g,d,t.subarray(p,_)))}else{for(var b=H[o-1],y=b>>>13,v=8191&b,E=(1<7e3||L>24576)&&P>423){d=C(t,g,0,M,O,N,B,L,W,p-W,d),L=G=B=0,W=p;for(var Z=0;Z<286;++Z)O[Z]=0;for(Z=0;Z<30;++Z)N[Z]=0}var j=2,J=0,K=v,q=$-F&32767;if(P>2&&V===T(p-q))for(var Q=Math.min(y,P)-1,X=Math.min(32767,p),Y=Math.min(258,P);q<=X&&--K&&$!==F;){if(t[p+j]===t[p+j-q]){for(var tt=0;ttj){if(j=tt,J=q,tt>Q)break;var et=Math.min(q,tt-2),rt=0;for(Z=0;Zrt&&(rt=nt,F=it)}}}q+=($=F)-(F=A[$])+32768&32767}if(J){M[L++]=268435456|f[j]<<18|w[J];var st=31&f[j],ot=31&w[J];B+=n[st]+s[ot],++O[257+st],++N[ot],k=p+j,++G}else M[L++]=t[p],++O[t[p]]}}d=C(t,g,c,M,O,N,B,L,W,p-W,d),!c&&7&d&&(d=z(g,d+1,D))}return R(u,0,h+U(d)+l)}(_=t,null==(u=o).level?6:u.level,null==u.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(_.length)))):12+u.mem,g,d,!p));return h=m,c=0===(l=o.level)?0:l<6?1:9===l?3:2,h[0]=120,h[1]=c<<6|(c?32-2*c:1),function(t,e,r){for(;r;++e)t[e]=r,r>>>=8}(m,m.length-4,a.d()),m}t.exports={compress:function(t,e){return L(t,{level:e})},decompress:function(t,r){return i=t,a=new Uint8Array(r),function(t,r,i){var a=t.length;if(!a||i&&!i.l&&a<5)return r||new e(0);var h=!r||i,f=!i||i.i;i||(i={}),r||(r=new e(3*a));var c=function(t){var i=r.length;if(t>i){var n=new e(Math.max(2*i,t));n.set(r),r=n}},_=i.f||0,w=i.p||0,g=i.b||0,d=i.l,m=i.d,b=i.m,y=i.n,E=8*a;do{if(!d){i.f=_=S(t,w,1);var T=S(t,w+1,3);if(w+=3,!T){var M=t[(W=U(w)+4)-4]|t[W-3]<<8,O=W+M;if(O>a){if(f)throw"unexpected EOF";break}h&&c(g+M),r.set(t.subarray(W,O),g),i.b=g+=M,i.p=w=8*O;continue}if(1===T)d=v,m=A,b=9,y=5;else{if(2!==T)throw"invalid block type";var N=S(t,w,31)+257,G=S(t,w+10,15)+4,B=N+S(t,w+5,31)+1;w+=14;for(var z=new e(B),C=new e(19),H=0;H>>4)<16)z[H++]=W;else{var $=0,F=0;for(16===W?(F=3+S(t,w,3),w+=2,$=z[H-1]):17===W?(F=3+S(t,w,7),w+=3):18===W&&(F=11+S(t,w,127),w+=7);F--;)z[H++]=$}}var P=z.subarray(0,N),Z=z.subarray(N);b=x(P),y=x(Z),d=p(P,b,1),m=p(Z,y,1)}if(w>E){if(f)throw"unexpected EOF";break}}h&&c(g+131072);for(var j=(1<>>4;if((w+=15&$)>E){if(f)throw"unexpected EOF";break}if(!$)throw"invalid length/literal";if(q<256)r[g++]=q;else{if(256===q){K=w,d=null;break}var Q=q-254;if(q>264){var X=n[H=q-257];Q=S(t,w,(1<>>4;if(!Y)throw"invalid distance";if(w+=15&Y,Z=u[tt],tt>3&&(X=s[tt],Z+=I(t,w)&(1<E){if(f)throw"unexpected EOF";break}h&&c(g+131072);for(var et=g+Q;g>>4>7||(t[0]<<8|t[1])%31)throw"invalid zlib data";if(32&t[1])throw"invalid zlib data: preset dictionaries not supported"}(i),i.subarray(2,-4)),a);var i,a}}},706:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/tiff.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{decode:function(r){const i=e.alloc(r.length);e.u8(i,r.length).set(r);const n=t.decode(i,r.length);if(0===n)throw new Error("tiff: failed to decode");const s={width:t.decode_width(n),height:t.decode_height(n),buffer:e.u8(t.decode_buffer(n),e.length()).slice()};return t.decode_free(n),s}}}}},740:t=>{function e(t,e=!1){if(t instanceof ArrayBuffer)return new Uint8Array(t);if("undefined"!=typeof SharedArrayBuffer&&e&&t instanceof SharedArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}t.exports={view:e,from_parts:function(t,r=!1){let i=0,n=0;t.forEach((t=>i+=null==t.byteLength?t.length:t.byteLength));const s=new Uint8Array(r?new SharedArrayBuffer(i):i);return t.forEach((t=>{const r=Array.isArray(t)?t:e(t,!0);s.set(r,n),n+=r.length})),s}}},751:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/jpeg.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new WebAssembly.Instance(n).exports;class e{static length(){return t.wlen()}static alloc(e){return t.walloc(e)}static free(e,r){return t.wfree(e,r)}static u8(e,r){return new Uint8Array(t.memory.buffer,e,r)}static u32(e,r){return new Uint32Array(t.memory.buffer,e,r)}static copy_and_free(r,i){let n=e.u8(r,i).slice();return t.wfree(r,i),n}}return{encode:function(r,i,n,s){const o=e.alloc(r.length);return e.u8(o,r.length).set(r),e.copy_and_free(t.encode(o,i,n,s),e.length())},decode:function(r,i,n){const s=e.alloc(r.length);e.u8(s,r.length).set(r);const o=t.decode(s,r.length,i,n);if(0===o)throw new Error("jpg: failed to decode");if(1===o)throw new Error("jpg: failed to scale decoder");const a={width:t.decode_width(o),height:t.decode_height(o),format:t.decode_format(o),buffer:e.u8(t.decode_buffer(o),e.length()).slice()};return t.decode_free(o),a}}}}},763:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/gif.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){const t=new Map,e=new TextEncoder,r=new WebAssembly.Instance(n,{env:{push_to_stream(e,r){t.get(e).cb(i.u8(r,i.length()).slice())}}}).exports;class i{static length(){return r.wlen()}static alloc(t){return r.walloc(t)}static free(t,e){return r.wfree(t,e)}static u8(t,e){return new Uint8Array(r.memory.buffer,t,e)}static u32(t,e){return new Uint32Array(r.memory.buffer,t,e)}static copy_and_free(t,e){let n=i.u8(t,e).slice();return r.wfree(t,e),n}}return{Encoder:class{constructor(e,i,n=-1){this.slices=[],t.set(0,this),this.ptr=r.encoder_new(0,e,i,n)}cb(t){this.slices.push(t)}free(){this.ptr=r.encoder_free(this.ptr),t.delete(0)}u8(){this.free();let t=0;const e=new Uint8Array(this.slices.reduce(((t,e)=>t+e.length),0));for(const r of this.slices)e.set(r,t),t+=r.length;return e}add(t,e,n,s,o,a,h,l){const f=i.alloc(a.length);i.u8(f,a.length).set(a),r.encoder_add(this.ptr,f,a.length,t,e,s,o,n,h,l)}set comment(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_comment(this.ptr,s,n.length)}set application(t){const n=e.encode(t),s=i.alloc(n.length);i.u8(s,n.length).set(n),r.encoder_add_application(this.ptr,s,n.length)}},Decoder:class{constructor(t,e=0){const n=i.alloc(t.length);if(i.u8(n,t.length).set(t),this.ptr=r.decoder_new(n,t.length,e),0===this.ptr)throw new Error("gif: failed to parse gif header");this.width=r.decoder_width(this.ptr),this.height=r.decoder_height(this.ptr)}free(){this.ptr=r.decoder_free(this.ptr)}*frames(){let t;for(;t=this.frame();)yield t}frame(){const t=r.decoder_frame(this.ptr);if(1===t)return null;if(0===t)throw this.free(),new Error("gif: failed to decode frame");const e={x:r.decoder_frame_x(t),y:r.decoder_frame_y(t),delay:r.decoder_frame_delay(t),width:r.decoder_frame_width(t),height:r.decoder_frame_height(t),dispose:r.decoder_frame_dispose(t),buffer:i.u8(r.decoder_frame_buffer(t),i.length()).slice()};return r.decoder_frame_free(t),e}}}}}},816:(t,e,r)=>{const{version:i}=r(330);let n=null;t.exports={async init(){if(!n){const t="compileStreaming"in WebAssembly;n=await WebAssembly[t?"compileStreaming":"compile"](await fetch(`https://unpkg.com/imagescript@${i}/wasm/any/font.wasm`).then((e=>t?e:e.arrayBuffer())))}return this.new()},new(){let t=null;const e=new WebAssembly.Instance(n).exports;class r{static length(){return e.wlen()}static alloc(t){return e.walloc(t)}static free(t,r){return e.wfree(t,r)}static u8(t,r){return new Uint8Array(e.memory.buffer,t,r)}static u32(t,r){return new Uint32Array(e.memory.buffer,t,r)}static copy_and_free(t,i){let n=r.u8(t,i).slice();return e.wfree(t,i),n}}const i="Deno"in globalThis?Deno.core.encode:(()=>{const t=new TextEncoder;return e=>t.encode(e)})(),s="Deno"in globalThis?Deno.core.decode:(()=>{const t=new TextDecoder;return e=>t.decode(e)})();return"FinalizationRegistry"in globalThis&&(t=new FinalizationRegistry((([t,r])=>{0===t&&e.font_free(r),1===t&&e.layout_free(r)}))),{Font:class{constructor(i,n){this.scale=i;const s=r.alloc(n.length);if(r.u8(s,n.length).set(n),this.ptr=e.font_new(s,n.length,i),!this.ptr)throw new Error("invalid font");t&&t.register(this,[0,this.ptr],this)}free(){this.ptr=e.font_free(this.ptr),t&&t.unregister(this)}has(t){return e.font_has(this.ptr,String.prototype.charCodeAt.call(t,0))}metrics(t,i=this.scale){const n=e.font_metrics(this.ptr,String.prototype.charCodeAt.call(t,0),i),o=JSON.parse(s(r.u8(e.font_metrics_buffer(n),r.length())));return e.font_metrics_free(n),o}rasterize(t,i=this.scale){const n=e.font_rasterize(this.ptr,String.prototype.charCodeAt.call(t,0),i),o={buffer:r.u8(e.font_rasterize_buffer(n),r.length()).slice(),metrics:JSON.parse(s(r.u8(e.font_rasterize_metrics(n),r.length())))};return e.font_rasterize_free(n),o}},Layout:class{constructor(){this.ptr=e.layout_new(),t&&(this.refs=[]),t&&t.register(this,[1,this.ptr],this)}clear(){e.layout_clear(this.ptr),t&&(this.refs.length=0)}lines(){return e.layout_lines(this.ptr)}free(){t&&(this.refs.length=0),this.ptr=e.layout_free(this.ptr),t&&t.unregister(this)}reset(n={}){n=i(JSON.stringify(n)),t&&(this.refs.length=0);const s=r.alloc(n.length);r.u8(s,n.length).set(n),e.layout_reset(this.ptr,s,n.length)}append(n,s,o){s=i(s);const a=o||{};t&&this.refs.push(n);const h=r.alloc(s.length);r.u8(h,s.length).set(s);const l="r"in a||"g"in a||"b"in a;e.layout_append(this.ptr,n.ptr,h,s.length,null==a.scale?n.scale:a.scale,l,a.r,a.g,a.b)}rasterize(t,i,n){const s=e.layout_rasterize(this.ptr,t,i,n),o={width:e.layout_rasterize_width(s),height:e.layout_rasterize_height(s),buffer:r.u8(e.layout_rasterize_buffer(s),r.length()).slice()};return e.layout_rasterize_free(s),o}}}}}}},e={},function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(248);var t,e})); //# sourceMappingURL=ImageScript.js.map \ No newline at end of file diff --git a/browser/ImageScript.js.map b/browser/ImageScript.js.map index ad86f9b..23d53b3 100644 --- a/browser/ImageScript.js.map +++ b/browser/ImageScript.js.map @@ -1 +1 @@ -{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n /**\n * The Frame's disposal mode\n * @returns {number}\n */\n get disposalMode() {\n return this.__disposalMode__;\n }\n\n /**\n * Sets the frame's disposal mode, converting it to the internal numeric value.\n * @param {string|number} disposalMode The frame's disposal mode\n */\n set disposalMode(disposalMode) {\n this.__disposalMode__ = Frame.__convert_disposal_mode__(disposalMode);\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=-1] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = typeof wrapHardBreaks === 'undefined' ? true : wrapHardBreaks;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.byteLength >= 4 && view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return view.byteLength >= 4 && (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.byteLength >= 4 && view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return view.byteLength >= 4 && (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (typeof SharedArrayBuffer !== 'undefined' && shared && buffer instanceof SharedArrayBuffer)\n return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n\n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n\n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n\n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n\n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n\n u8.set(ref, offset);\n offset += ref.length;\n });\n\n return u8;\n }\n\n module.exports = { view, from_parts };\n","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n let bit_depth = array[24];\n const color_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[color_type];\n const bytespp = channels * bit_depth / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (color_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length * (8 / bit_depth); i++)\n pixelView.setUint32(i * 4, palette[pixels[~~(i / (8 / bit_depth))] & (2**bit_depth-1)], false);\n channels = 4;\n bit_depth = 8;\n pixels = newPixels;\n }\n\n if (bit_depth !== 8) {\n const newPixels = new Uint8Array(pixels.length / bit_depth * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(248);\n"],"names":["root","factory","exports","module","define","amd","self","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","Uint32Array","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","iterateWithColors","offset","getUint32","rgbaToColor","r","g","b","a","rgbToColor","hslaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslToColor","rgbaToHSLA","d","colorToRGBA","color","colorToRGB","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","length","lightness","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","gradient","colors","entries","Object","sort","positions","e","parseFloat","values","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","encode","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","encodeJPEG","quality","init","decode","data","view","buffer","byteOffset","byteLength","ImageType","isPNG","pixels","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","renderSVG","svg","size","includes","TextEncoder","rasterize","renderText","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","__convert_disposal_mode__","indexOf","super","__disposalMode__","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","getType","isView","shared","SharedArrayBuffer","from_parts","buffers","isArray","table","crc","bl","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","compressed","array","bit_depth","color_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","registry","wasm","Instance","wlen","alloc","walloc","ptr","wfree","memory","copy_and_free","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","limit","bptr","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","decode_width","decode_height","decode_format","decode_buffer","decode_free","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","buf","opts","adler","opt","pre","post","st","lv","fl2","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","zlibSync","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"ImageScript.js","mappings":"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","sources":["webpack://ImageScript/webpack/universalModuleDefinition","webpack://ImageScript/./utils/crc32.js","webpack://ImageScript/./ImageScript.js","webpack://ImageScript/./utils/png.js","webpack://ImageScript/./utils/wasm/svg.js","webpack://ImageScript/./utils/zlib.js","webpack://ImageScript/./utils/wasm/tiff.js","webpack://ImageScript/./utils/buffer.js","webpack://ImageScript/./utils/wasm/jpeg.js","webpack://ImageScript/./utils/wasm/gif.js","webpack://ImageScript/./utils/wasm/font.js","webpack://ImageScript/webpack/bootstrap","webpack://ImageScript/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageScript\"] = factory();\n\telse\n\t\troot[\"ImageScript\"] = factory();\n})(self, () => {\nreturn ","const table = new Uint32Array([\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832,\n 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,\n 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A,\n 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,\n 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,\n 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4,\n 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074,\n 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525,\n 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,\n 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76,\n 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,\n 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6,\n 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,\n 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,\n 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7,\n 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,\n 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330,\n 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D]);\n \n module.exports = function crc32(buffer) {\n let offset = 0 | 0;\n let crc = 0xFFFFFFFF | 0;\n const bl = (buffer.length - 4) | 0;\n \n while (bl > offset) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n while (offset < buffer.length) {\n crc = table[(crc ^ buffer[offset++]) & 0xff] ^ (crc >>> 8);\n }\n \n return (crc ^ 0xFFFFFFFF) >>> 0;\n };","const png = require('./utils/png');\nconst mem = require('./utils/buffer.js');\nconst giflib = require('./utils/wasm/gif');\nconst svglib = require('./utils/wasm/svg');\nconst {version} = require('./package.json');\nconst fontlib = require('./utils/wasm/font');\nconst jpeglib = require('./utils/wasm/jpeg');\nconst tifflib = require('./utils/wasm/tiff');\n\nconst MAGIC_NUMBERS = {\n PNG: 0x89504e47,\n JPEG: 0xffd8ff,\n TIFF: 0x49492a00,\n GIF: 0x474946\n};\n\n/**\n * Represents an image; provides utility functions\n */\nclass Image {\n /**\n * Creates a new image with the given dimensions\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n */\n constructor(width, height) {\n width = ~~width;\n height = ~~height;\n\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n /** @private */\n this.__width__ = width;\n /** @private */\n this.__height__ = height;\n /** @private */\n this.__buffer__ = new ArrayBuffer(width * height * 4);\n /** @private */\n this.__view__ = new DataView(this.__buffer__);\n /** @private */\n this.__u32__ = new Uint32Array(this.__buffer__);\n /**\n * The images RGBA pixel data\n * @type {Uint8ClampedArray}\n */\n this.bitmap = new Uint8ClampedArray(this.__buffer__);\n }\n\n /**\n * @private\n * @returns {string}\n */\n toString() {\n return `Image<${this.width}x${this.height}>`;\n }\n\n /**\n * The images width\n * @returns {number}\n */\n get width() {\n return this.__width__;\n }\n\n /**\n * The images height\n * @returns {number}\n */\n get height() {\n return this.__height__;\n }\n\n /**\n * Yields an [x, y] array for every pixel in the image\n * @yields {number[]} The coordinates of the pixel ([x, y])\n * @returns {void}\n */\n * [Symbol.iterator]() {\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y];\n }\n }\n }\n\n /**\n * Yields an [x, y, color] array for every pixel in the image\n * @yields {number[]} The coordinates and color of the pixel ([x, y, color])\n */\n * iterateWithColors() {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n yield [x, y, this.__view__.getUint32(offset, false)];\n offset += 4;\n }\n }\n }\n\n /**\n * Converts RGBA components to an RGBA value\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @param {number} a alpha (0..255)\n * @returns {number} RGBA value\n */\n static rgbaToColor(r, g, b, a) {\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff)) >>> 0;\n }\n\n /**\n * Converts RGB components to an RGBA value (assuming alpha = 255)\n * @param {number} r red (0..255)\n * @param {number} g green (0..255)\n * @param {number} b blue (0..255)\n * @returns {number} RGBA value\n */\n static rgbToColor(r, g, b) {\n return Image.rgbaToColor(r, g, b, 0xff);\n }\n\n /**\n * Converts HSLA colors to RGBA colors\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @param {number} a opacity (0..1)\n * @returns {number} color\n */\n static hslaToColor(h, s, l, a) {\n h %= 1;\n s = Math.min(1, Math.max(0, s));\n l = Math.min(1, Math.max(0, l));\n a = Math.min(1, Math.max(0, a));\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return Image.rgbaToColor(r * 255, g * 255, b * 255, a * 255);\n }\n\n /**\n * Converts HSL colors to RGBA colors (assuming an opacity of 255)\n * @param {number} h hue (0..1)\n * @param {number} s saturation (0..1)\n * @param {number} l lightness (0..1)\n * @returns {number} color\n */\n static hslToColor(h, s, l) {\n return Image.hslaToColor(h, s, l, 1);\n }\n\n /**\n * Converts an RGBA value to an array of HSLA values\n * @param r {number} (0..255)\n * @param g {number} (0..255)\n * @param b {number} (0..255)\n * @param a {number} (0..255)\n * @returns {number[]} The HSLA values ([H, S, L, A])\n */\n static rgbaToHSLA(r, g, b, a) {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a / 255];\n }\n\n /**\n * Converts a color value to an array of RGBA values\n * @param {number} color The color value to convert\n * @returns {number[]} The RGBA values ([R, G, B, A])\n */\n static colorToRGBA(color) {\n return [(color >> 24) & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff];\n }\n\n /**\n * Converts a color value to an array of RGB values (ignoring the colors alpha)\n * @param {number} color The color value to convert\n * @returns {number[]} The RGB values ([R, G, B])\n */\n static colorToRGB(color) {\n return Image.colorToRGBA(color).slice(0, 3);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {number} The color value\n */\n getPixelAt(x, y) {\n this.__check_boundaries__(x, y);\n return this.__view__.getUint32(((~~y - 1) * this.width + (~~x - 1)) * 4, false);\n }\n\n /**\n * Gets the pixel color at the specified position\n * @param {number} x\n * @param {number} y\n * @returns {Uint8ClampedArray} The RGBA value\n */\n getRGBAAt(x, y) {\n this.__check_boundaries__(x, y);\n const idx = ((~~y - 1) * this.width + (~~x - 1)) * 4;\n return this.bitmap.subarray(idx, idx + 4);\n }\n\n /**\n * Sets the pixel color for the specified position\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n setPixelAt(x, y, pixelColor) {\n x = ~~x;\n y = ~~y;\n this.__check_boundaries__(x, y);\n this.__set_pixel__(x, y, pixelColor);\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} pixelColor\n */\n __set_pixel__(x, y, pixelColor) {\n this.__view__.setUint32(((y - 1) * this.width + (x - 1)) * 4, pixelColor, false);\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n */\n __check_boundaries__(x, y) {\n if (isNaN(x)) throw new TypeError(`Invalid pixel coordinates (x=${x})`);\n if (isNaN(y)) throw new TypeError(`Invalid pixel coordinates (y=${y})`);\n if (x < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})<1`);\n if (x > this.width)\n throw new RangeError(`${Image.__out_of_bounds__} (x=${x})>(width=${this.width})`);\n if (y < 1)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})<1`);\n if (y > this.height)\n throw new RangeError(`${Image.__out_of_bounds__} (y=${y})>(height=${this.height})`);\n }\n\n /**\n * @private\n */\n static get __out_of_bounds__() {\n return 'Tried referencing a pixel outside of the images boundaries:';\n }\n\n /**\n * @callback colorFunction\n * @param {number} x\n * @param {number} y\n * @returns {number} pixel color\n */\n\n /**\n * Fills the image data with the supplied color\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n fill(color) {\n const type = typeof color;\n if (type !== 'function') {\n this.__view__.setUint32(0, color, false);\n this.__u32__.fill(this.__u32__[0]);\n } else {\n let offset = 0;\n for (let y = 1; y <= this.height; y++) {\n for (let x = 1; x <= this.width; x++) {\n this.__view__.setUint32(offset, color(x, y), false);\n offset += 4;\n }\n }\n }\n\n return this;\n }\n\n /**\n * Clones the current image\n * @returns {Image}\n */\n clone() {\n const image = new Image(this.width, this.height);\n image.bitmap.set(this.bitmap);\n return image;\n }\n\n /**\n * Use {@link https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation Nearest-neighbor} resizing.\n * @returns {string}\n */\n static get RESIZE_NEAREST_NEIGHBOR() {\n return 'RESIZE_NEAREST_NEIGHBOR';\n }\n\n /**\n * Used for automatically preserving an images aspect ratio when resizing.\n * @returns {number}\n */\n static get RESIZE_AUTO() {\n return -1;\n }\n\n /**\n * Resizes the image by the given factor\n * @param {number} factor The factor to resize the image with\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image}\n */\n scale(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__scale__(factor, mode);\n return this.__apply__(image);\n }\n\n /** @private */\n __scale__(factor, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (factor === 1) return this;\n return this.__resize__(this.width * factor, this.height * factor, mode);\n }\n\n /**\n * Resizes the image to the given dimensions.\n * Use {@link Image.RESIZE_AUTO} as either width or height to automatically preserve the aspect ratio.\n * @param {number} width The new width\n * @param {number} height The new height\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const image = this.__resize__(width, height, mode);\n return this.__apply__(image);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box.\n * Can return an image with one axis smaller than the given bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n contain(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? height / this.height : width / this.width;\n return this.scale(scaleFactor, mode);\n }\n\n /**\n * Resizes the image so it is contained in the given bounding box, placing it in the center of the given bounding box.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n fit(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const result = new Image(width, height);\n this.contain(width, height, mode);\n result.composite(this, (width - this.width) / 2, (height - this.height) / 2);\n return this.__apply__(result);\n }\n\n /**\n * Resizes the image so it covers the given bounding box, cropping the overflowing edges.\n * Always returns the exact dimensions of the bounding box.\n * @param {number} width The width of the bounding box\n * @param {number} height The height of the bounding box\n * @param {string} [mode=Image.RESIZE_NEAREST_NEIGHBOR] The resizing mode to use\n * @returns {Image} The resized image\n */\n cover(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const scaleFactor = width / height > this.width / this.height ? width / this.width : height / this.height;\n const result = this.scale(scaleFactor, mode);\n return result.crop((result.width - width) / 2, (result.height - height) / 2, width, height);\n }\n\n /** @private */\n __resize__(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n if (width === Image.RESIZE_AUTO && height === Image.RESIZE_AUTO) throw new Error('RESIZE_AUTO can only be used for either width or height, not for both');\n else if (width === Image.RESIZE_AUTO) width = this.width / this.height * height;\n else if (height === Image.RESIZE_AUTO) height = this.height / this.width * width;\n\n width = Math.floor(width);\n height = Math.floor(height);\n if (width < 1)\n throw new RangeError('Image has to be at least 1 pixel wide');\n if (height < 1)\n throw new RangeError('Image has to be at least 1 pixel high');\n\n let image;\n if (mode === Image.RESIZE_NEAREST_NEIGHBOR)\n image = this.__resize_nearest_neighbor__(width, height);\n else throw new Error('Invalid resize mode');\n\n return image;\n }\n\n /**\n * @private\n * @param {number} width The new width\n * @param {number} height The new height\n */\n __resize_nearest_neighbor__(width, height) {\n const image = new this.constructor(width, height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const ySrc = Math.floor((y * this.height) / height);\n const xSrc = Math.floor((x * this.width) / width);\n\n const destPos = (y * width + x) * 4;\n const srcPos = (ySrc * this.width + xSrc) * 4;\n\n image.__view__.setUint32(destPos, this.__view__.getUint32(srcPos, false), false);\n }\n }\n\n return image;\n }\n\n /**\n * Crops an image to the specified dimensions\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The new images width\n * @param {number} height The new images height\n * @returns {Image}\n */\n crop(x, y, width, height) {\n if (width > this.width) width = this.width;\n if (height > this.height) height = this.height;\n\n return this.__apply__(this.__crop__(~~x, ~~y, ~~width, ~~height));\n }\n\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @returns {Image}\n * @private\n */\n __crop__(x, y, width, height) {\n x = ~~x;\n y = ~~y;\n\n const image = new this.constructor(width, height);\n\n for (let tY = 0; tY < height; tY++) {\n const idx = (tY + y) * this.width + x;\n image.__u32__.set(this.__u32__.subarray(idx, idx + width), tY * width);\n }\n\n return image;\n }\n\n /**\n * Draws a box at the specified coordinates\n * @param {number} x The x offset\n * @param {number} y The y offset\n * @param {number} width The box width\n * @param {number} height The box height\n * @param {number|colorFunction} color The color to fill the box in with\n * @returns {Image}\n */\n drawBox(x, y, width, height, color) {\n x = ~~(x - 1);\n y = ~~(y - 1);\n width = ~~width;\n height = ~~height;\n\n if (typeof color === 'function') {\n for (let tY = 1; tY <= height; tY++) {\n for (let tX = 1; tX <= width; tX++) {\n const nX = tX + x;\n const nY = tY + y;\n if (Math.min(nX, nY) < 1 || nX > this.width || nY > this.height)\n continue;\n\n const tC = color(tX, tY);\n this.__set_pixel__(nX, nY, tC);\n }\n }\n } else return this.__fast_box__(x, y, width, height, color);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} color\n */\n __fast_box__(x, y, width, height, color) {\n if (x < 0) {\n width += x;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n y = 0;\n }\n\n const right = Math.max(Math.min(x + width, this.width), 1);\n let xPos = right;\n while (x <= --xPos)\n this.__view__.setUint32(4 * (xPos + y * this.width), color);\n const end = 4 * (right + y * this.width);\n const start = 4 * (x + y * this.width);\n\n let bottom = Math.max(Math.min(y + height, this.height), 1);\n while (y < --bottom)\n this.bitmap.copyWithin(4 * (x + bottom * this.width), start, end);\n\n return this;\n }\n\n /**\n * Draws a circle at the specified coordinates with the specified radius\n * @param {number} x The center x position\n * @param {number} y The center y position\n * @param {number} radius The circles radius\n * @param {number|colorFunction} color\n * @returns {Image}\n */\n drawCircle(x, y, radius, color) {\n const radSquared = radius ** 2;\n for (let currentY = Math.max(1, y - radius); currentY <= Math.min(y + radius, this.height); currentY++) {\n for (let currentX = Math.max(1, x - radius); currentX <= Math.min(x + radius, this.width); currentX++) {\n if ((currentX - x) ** 2 + (currentY - y) ** 2 < radSquared)\n this.__set_pixel__(currentX, currentY, typeof color === 'function' ? color(currentX - x + radius, currentY - y + radius) : color);\n }\n }\n\n return this;\n }\n\n /**\n * Crops the image into a circle\n * @param {boolean} [max=false] Whether to use the larger dimension for the size\n * @param {number} [feathering=0] How much feathering to apply to the edges\n * @returns {Image}\n */\n cropCircle(max = false, feathering = 0) {\n const rad = Math[max ? 'max' : 'min'](this.width, this.height) / 2;\n const radSquared = rad ** 2;\n const centerX = this.width / 2;\n const centerY = this.height / 2;\n\n for (const [x, y] of this) {\n const distanceFromCenter = (x - centerX) ** 2 + (y - centerY) ** 2;\n const alphaIdx = ((y - 1) * this.width + (x - 1)) * 4 + 3;\n if (distanceFromCenter > radSquared)\n this.bitmap[alphaIdx] = 0;\n else if (feathering)\n this.bitmap[alphaIdx] *= Math.max(0, Math.min(1, 1 - (distanceFromCenter / radSquared) * feathering ** (1 / 2)));\n }\n\n return this;\n }\n\n /**\n * Sets the images opacity\n * @param {number} opacity The opacity to apply (0..1)\n * @param {boolean} absolute Whether to scale the current opacity (false) or just set the new opacity (true)\n * @returns {Image}\n */\n opacity(opacity, absolute = false) {\n if (isNaN(opacity) || opacity < 0)\n throw new RangeError('Invalid opacity value');\n\n this.__set_channel_value__(opacity, absolute, 3);\n\n return this;\n }\n\n /**\n * Sets the red channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n red(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 0);\n\n return this;\n }\n\n /**\n * Sets the green channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n green(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 1);\n\n return this;\n }\n\n /**\n * Sets the blue channels saturation\n * @param {number} saturation The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n blue(saturation, absolute = false) {\n if (isNaN(saturation) || saturation < 0)\n throw new RangeError('Invalid saturation value');\n\n this.__set_channel_value__(saturation, absolute, 2);\n\n return this;\n }\n\n /**\n * @private\n * @param {number} value\n * @param {boolean} absolute\n * @param {number} offset\n */\n __set_channel_value__(value, absolute, offset) {\n for (let i = offset; i < this.bitmap.length; i += 4)\n this.bitmap[i] = value * (absolute ? 255 : this.bitmap[i]);\n }\n\n /**\n * Sets the brightness of the image\n * @param {number} value The lightness to apply (0..1)\n * @param {boolean} absolute Whether to scale the current lightness (false) or just set the new lightness (true)\n * @returns {Image}\n */\n lightness(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid lightness value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, s, value * (absolute ? 1 : l), a);\n });\n }\n\n /**\n * Sets the saturation of the image\n * @param {number} value The saturation to apply (0..1)\n * @param {boolean} absolute Whether to scale the current saturation (false) or just set the new saturation (true)\n * @returns {Image}\n */\n saturation(value, absolute = false) {\n if (isNaN(value) || value < 0)\n throw new RangeError('Invalid saturation value');\n\n return this.fill((x, y) => {\n const [h, s, l, a] = Image.rgbaToHSLA(...this.getRGBAAt(x, y));\n return Image.hslaToColor(h, value * (absolute ? 1 : s), l, a);\n });\n }\n\n /**\n * Composites (overlays) the source onto this image at the specified coordinates\n * @param {Image} source The image to place\n * @param {number} [x=0] The x position to place the image at\n * @param {number} [y=0] The y position to place the image at\n * @returns {Image}\n */\n composite(source, x = 0, y = 0) {\n x = ~~x;\n y = ~~y;\n\n for (let yy = 0; yy < source.height; yy++) {\n let y_offset = y + yy;\n if (y_offset < 0) continue;\n if (y_offset >= this.height) break;\n\n for (let xx = 0; xx < source.width; xx++) {\n let x_offset = x + xx;\n if (x_offset < 0) continue;\n if (x_offset >= this.width) break;\n\n const offset = 4 * (x_offset + y_offset * this.width);\n const fg = source.__view__.getUint32(4 * (xx + yy * source.width), false);\n const bg = this.__view__.getUint32(offset, false);\n\n if ((fg & 0xff) === 0xff) this.__view__.setUint32(offset, fg, false);\n else if ((fg & 0xff) === 0x00) this.__view__.setUint32(offset, bg, false);\n else this.__view__.setUint32(offset, Image.__alpha_blend__(fg, bg), false);\n }\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {number} fg\n * @param {number} bg\n * @returns {number}\n */\n static __alpha_blend__(fg, bg) {\n const fa = fg & 0xff;\n const alpha = fa + 1;\n const inv_alpha = 256 - fa;\n const r = (alpha * (fg >>> 24) + inv_alpha * (bg >>> 24)) >> 8;\n const b = (alpha * (fg >> 8 & 0xff) + inv_alpha * (bg >> 8 & 0xff)) >> 8;\n const g = (alpha * (fg >> 16 & 0xff) + inv_alpha * (bg >> 16 & 0xff)) >> 8;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (Math.max(fa, bg & 0xff) & 0xff));\n }\n\n /**\n * Inverts the images colors\n * @returns {Image}\n */\n invert() {\n for (const [x, y, color] of this.iterateWithColors())\n this.__set_pixel__(x, y, ((0xffffffff - color) & 0xffffff00) | (color & 0xff));\n\n return this;\n }\n\n /**\n * Inverts the images value (lightness)\n * @returns {Image}\n */\n invertValue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, s, 1 - l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images saturation\n * @returns {Image}\n */\n invertSaturation() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h, 1 - s, l, a));\n }\n\n return this;\n }\n\n /**\n * Inverts the images hue\n * @returns {Image}\n */\n invertHue() {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(1 - h, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Shifts the images hue\n * @param {number} degrees How many degrees to shift the hue by\n */\n hueShift(degrees) {\n for (const [x, y, color] of this.iterateWithColors()) {\n const [h, s, l, a] = Image.rgbaToHSLA(...Image.colorToRGBA(color));\n this.__set_pixel__(x, y, Image.hslaToColor(h + degrees / 360, s, l, a));\n }\n\n return this;\n }\n\n /**\n * Gets the average color of the image\n * @returns {number}\n */\n averageColor() {\n let colorAvg = [0, 0, 0];\n let divisor = 0;\n for (let idx = 0; idx < this.bitmap.length; idx += 4) {\n const rgba = this.bitmap.subarray(idx, idx + 4);\n for (let i = 0; i < 3; i++)\n colorAvg[i] += rgba[i];\n divisor += rgba[3] / 255;\n }\n\n return Image.rgbaToColor(...colorAvg.map(v => v / divisor), 0xff);\n }\n\n /**\n * Gets the images dominant color\n * @param {boolean} [ignoreBlack=true] Whether to ignore dark colors below the threshold\n * @param {boolean} [ignoreWhite=true] Whether to ignore light colors above the threshold\n * @param {number} [bwThreshold=0xf] The black/white threshold (0-64)\n * @return {number} The images dominant color\n */\n dominantColor(ignoreBlack = true, ignoreWhite = true, bwThreshold = 0xf) {\n const colorCounts = new Array(0x3ffff);\n for (let i = 0; i < this.bitmap.length; i += 4) {\n const color = this.__view__.getUint32(i, false);\n const [h, s, l] = Image.rgbaToHSLA(...Image.colorToRGBA(color)).map(v => (~~(v * 0x3f)));\n if (ignoreBlack && l < bwThreshold) continue;\n if (ignoreWhite && l > 0x3f - bwThreshold) continue;\n const key = h << 12 | s << 6 | l;\n colorCounts[key] = (colorCounts[key] || 0) + 1;\n }\n\n let maxColorCount = -1;\n let mostProminentValue = 0;\n colorCounts.forEach((el, i) => {\n if (el < maxColorCount) return;\n maxColorCount = el;\n mostProminentValue = i;\n });\n\n if (mostProminentValue === -1)\n return this.dominantColor(ignoreBlack, ignoreWhite, bwThreshold - 1);\n\n const h = (mostProminentValue >>> 12) & 0x3f;\n const s = (mostProminentValue >>> 6) & 0x3f;\n const l = mostProminentValue & 0x3f;\n\n return Image.hslaToColor(h / 0x3f, s / 0x3f, l / 0x3f, 1);\n }\n\n /**\n * Rotates the image the given amount of degrees\n * @param {number} angle The angle to rotate the image for (in degrees)\n * @param {boolean} resize Whether to resize the image so it fits all pixels or just ignore outlying pixels\n */\n rotate(angle, resize = true) {\n if (angle % 360 === 0) return this;\n if (angle % 180 === 0) return this.__rotate_180__();\n\n const rad = Math.PI * (angle / 180);\n\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n\n const width = resize\n ? Math.abs(this.width * sin) + Math.abs(this.height * cos)\n : this.width;\n const height = resize\n ? Math.abs(this.width * cos) + Math.abs(this.height * sin)\n : this.height;\n\n const out = new Image(width, height);\n\n const out_cx = width / 2 - .5;\n const out_cy = height / 2 - .5;\n const src_cx = this.width / 2 - .5;\n const src_cy = this.height / 2 - .5;\n\n let h = 0;\n do {\n let w = 0;\n const ysin = src_cx - sin * (h - out_cy);\n const ycos = src_cy + cos * (h - out_cy);\n\n do {\n const xf = ysin + cos * (w - out_cx);\n const yf = ycos + sin * (w - out_cx);\n Image.__interpolate__(this, out, w, h, xf, yf);\n } while (w++ < width);\n } while (h++ < height);\n\n return this.__apply__(out);\n }\n\n /**\n * @returns {Image}\n * @private\n */\n __rotate_180__() {\n let offset = 0;\n this.bitmap.reverse();\n while (offset < this.bitmap.length) this.bitmap.subarray(offset, offset += 4).reverse();\n\n return this;\n }\n\n /**\n * @param {Image} src\n * @param {Image} out\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @private\n */\n static __interpolate__(src, out, x0, y0, x1, y1) {\n const x2 = ~~x1;\n const y2 = ~~y1;\n const xq = x1 - x2;\n const yq = y1 - y2;\n const out_slice = out.bitmap.subarray(4 * (x0 + y0 * out.width), -4);\n\n const ref = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n };\n\n Image.__pawn__(x2, y2, (1 - xq) * (1 - yq), ref, src);\n Image.__pawn__(1 + x2, y2, xq * (1 - yq), ref, src);\n Image.__pawn__(x2, 1 + y2, (1 - xq) * yq, ref, src);\n Image.__pawn__(1 + x2, 1 + y2, xq * yq, ref, src);\n\n out_slice[3] = ref.a;\n out_slice[0] = ref.r / ref.a;\n out_slice[1] = ref.g / ref.a;\n out_slice[2] = ref.b / ref.a;\n }\n\n /** @private */\n static __pawn__(point0, point1, weight, ref, src) {\n if (\n point0 > 0\n && point1 > 0\n && point0 < src.width\n && point1 < src.height\n ) {\n const offset = 4 * (point0 + point1 * src.width);\n const src_slice = src.bitmap.subarray(offset, offset + 4);\n\n const wa = weight * src_slice[3];\n\n ref.a += wa;\n ref.r += wa * src_slice[0];\n ref.g += wa * src_slice[1];\n ref.b += wa * src_slice[2];\n }\n }\n\n /**\n * @private\n * @param {Image|Frame} image\n * @returns {Image|Frame}\n */\n __apply__(image) {\n this.__width__ = image.__width__;\n this.__height__ = image.__height__;\n this.__view__ = image.__view__;\n this.__u32__ = image.__u32__;\n this.bitmap = image.bitmap;\n\n if (image instanceof Frame)\n return Frame.from(this, image.duration, image.xOffset, image.yOffset, image.disposalMode);\n\n return this;\n }\n\n /**\n * Creates a multi-point gradient generator\n * @param {Object} colors The gradient points to use (e.g. `{0: 0xff0000ff, 1: 0x00ff00ff}`)\n * @return {(function(number): number)} The gradient generator. The function argument is the position in the gradient (0..1).\n */\n static gradient(colors) {\n const entries = Object.entries(colors).sort((a, b) => a[0] - b[0]);\n const positions = entries.map(e => parseFloat(e[0]));\n const values = entries.map(e => e[1]);\n\n if (positions.length === 0) throw new RangeError('Invalid gradient point count');\n else if (positions.length === 1) {\n return () => values[0];\n } else if (positions.length === 2) {\n const gradient = this.__gradient__(values[0], values[1]);\n return position => {\n if (position <= positions[0]) return values[0];\n if (position >= positions[1]) return values[1];\n return gradient((position - positions[0]) / (positions[1] - positions[0]));\n };\n }\n\n const minDef = Math.min(...positions);\n const maxDef = Math.max(...positions);\n let gradients = [];\n\n for (let i = 0; i < positions.length; i++) {\n let minPos = positions[i - 1];\n if (minPos === undefined) continue;\n\n let maxPos = positions[i];\n\n let minVal = values[i - 1];\n if (minVal === undefined) minVal = values[i];\n\n const maxVal = values[i];\n const gradient = this.__gradient__(minVal, maxVal);\n\n gradients.push({min: minPos, max: maxPos, gradient});\n }\n\n return position => {\n if (position <= minDef) return gradients[0].gradient(0);\n if (position >= maxDef) return gradients[gradients.length - 1].gradient(1);\n\n for (const gradient of gradients)\n if (position >= gradient.min && position <= gradient.max)\n return gradient.gradient((position - gradient.min) / (gradient.max - gradient.min));\n throw new RangeError(`Invalid gradient position: ${position}`);\n };\n }\n\n /**\n * Rounds the images corners\n * @param {number} [radius=min(width,height)/4] The radius of the corners\n * @return {Image}\n */\n roundCorners(radius = Math.min(this.width, this.height) / 4) {\n const radSquared = radius ** 2;\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = 1; x <= radius; x++) {\n const xRad = (x - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = 1; y <= radius; y++) {\n if (xRad + (y - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n for (let x = this.width - radius; x <= this.width; x++) {\n const xRad = ((this.width - x) - radius) ** 2;\n for (let y = this.height - radius; y <= this.height; y++) {\n if (xRad + ((this.height - y) - radius) ** 2 > radSquared)\n this.bitmap[((y - 1) * this.width + x - 1) * 4 + 3] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * @private\n */\n static __gradient__(startColor, endColor) {\n const sr = startColor >>> 24;\n const sg = startColor >> 16 & 0xff;\n const sb = startColor >> 8 & 0xff;\n const sa = startColor & 0xff;\n const er = (endColor >>> 24) - sr;\n const eg = (endColor >> 16 & 0xff) - sg;\n const eb = (endColor >> 8 & 0xff) - sb;\n const ea = (endColor & 0xff) - sa;\n\n return position => {\n const r = sr + position * er;\n const g = sg + position * eg;\n const b = sb + position * eb;\n const a = sa + position * ea;\n return (((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff));\n };\n }\n\n fisheye(radius = 2) {\n const r = new Image(this.width, this.height);\n\n const w = this.width;\n const h = this.height;\n const tu32 = this.__u32__;\n const ru32 = r.__u32__;\n const iw = 1 / w;\n const ih = 1 / h;\n\n for (const [x, y] of this) {\n const xco = x * iw - .5;\n const yco = y * ih - .5;\n const dfc = Math.sqrt(xco ** 2 + yco ** 2);\n const dis = 2 * dfc ** radius;\n const nx = ((dis * xco / dfc + 0.5) * w) | 0;\n const ny = ((dis * yco / dfc + 0.5) * h) | 0;\n\n if (nx < 1 || nx > w || ny < 1 || ny > h || isNaN(nx) || isNaN(ny))\n continue;\n\n ru32[y * w + x] = tu32[w * ny + nx];\n }\n\n const cO = tu32.length * .5 + w / 2;\n ru32[cO] = tu32[cO];\n\n return this.__apply__(r);\n }\n\n /**\n * @typedef {object} PNGMetadata\n * @property {string} [title] The images title\n * @property {string} [author] The images author\n * @property {string} [description] The images description\n * @property {string} [copyright] The images copyright info\n * @property {string|number|Date} [creationTime=Date.now()] The images creation timestamp\n * @property {string} [software=\"github.com/matmen/ImageScript vX.X.X\"] The software used to create this image\n * @property {string} [disclaimer] A disclaimer for the image\n * @property {string} [warning] A warning for the image\n * @property {string} [source] The images source\n * @property {string} [comment] A comment for the image\n */\n\n /**\n * Encodes the image into a PNG\n * @param {number} compression The compression level to use (0-9)\n * @param {PNGMetadata} [meta={}] Image metadata\n * @return {Promise} The encoded data\n */\n async encode(compression = 1, {\n title,\n author,\n description,\n copyright,\n creationTime,\n software,\n disclaimer,\n warning,\n source,\n comment\n } = {}) {\n return png.encode(this.bitmap, {\n width: this.width,\n height: this.height,\n level: compression,\n channels: 4,\n text: {\n Title: title,\n Author: author,\n Description: description,\n Copyright: copyright,\n 'Creation Time': new Date(creationTime === undefined ? Date.now() : creationTime).toUTCString(),\n Software: software === undefined ? `github.com/matmen/ImageScript v${version}` : software,\n Disclaimer: disclaimer,\n Warning: warning,\n Source: source,\n Comment: comment\n }\n });\n }\n\n /**\n * Encodes the image into a JPEG\n * @param {number} [quality=90] The JPEG quality to use (1-100)\n * @return {Promise}\n */\n async encodeJPEG(quality = 90) {\n return (await jpeglib.init()).encode(this.bitmap, this.width, this.height, quality);\n }\n\n /**\n * Decodes an image (PNG, JPEG or TIFF)\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @return {Promise} The decoded image\n */\n static async decode(data) {\n let image;\n\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isPNG(view)) { // PNG\n const {width, height, pixels} = png.decode(data);\n image = new Image(width, height);\n image.bitmap.set(pixels);\n } else if (ImageType.isJPEG(view)) { // JPEG\n const framebuffer = (await jpeglib.init()).decode(data);\n\n const width = framebuffer.width;\n const height = framebuffer.height;\n const pixelType = framebuffer.format;\n\n image = new Image(width, height);\n const buffer = framebuffer.buffer;\n\n if (pixelType === 0) {\n const view = new DataView(image.bitmap.buffer);\n\n for (let i = 0; i < buffer.length; i++) {\n const pixel = buffer[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (pixelType === 1) {\n image.bitmap.fill(0xff);\n for (let i = 0; i < width * height; i++)\n image.bitmap.set(buffer.subarray(i * 3, i * 3 + 3), i * 4);\n } else if (pixelType === 2) {\n for (let i = 0; i < buffer.length; i += 4) {\n image.bitmap[i] = 0xff * (1 - buffer[i] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 1] = 0xff * (1 - buffer[i + 1] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 2] = 0xff * (1 - buffer[i + 2] / 0xff) * (1 - buffer[i + 3] / 0xff);\n image.bitmap[i + 3] = 0xff;\n }\n }\n } else if (ImageType.isTIFF(view)) { // TIFF\n const framebuffer = (await tifflib.init()).decode(data);\n image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n /**\n * Scale the SVG by the given amount. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_SCALE() {\n return 1;\n }\n\n /**\n * Scale the SVG to fit the given width. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_WIDTH() {\n return 2;\n }\n\n /**\n * Scale the SVG to fit the given height. For use with {@link Image.renderSVG}\n * @return {number}\n */\n static get SVG_MODE_HEIGHT() {\n return 3;\n }\n\n /**\n * Creates a new image from the given SVG\n * @param {string} svg The SVG content\n * @param {number} size The size to use\n * @param {number} mode The SVG resizing mode to use (one of {@link SVG_MODE_SCALE}, {@link SVG_MODE_WIDTH}, {@link SVG_MODE_HEIGHT})\n * @return {Promise} The rendered SVG graphic\n */\n static async renderSVG(svg, size = 1, mode = this.SVG_MODE_SCALE) {\n if (![this.SVG_MODE_WIDTH, this.SVG_MODE_HEIGHT, this.SVG_MODE_SCALE].includes(mode))\n throw new Error('Invalid SVG scaling mode');\n\n if (mode === this.SVG_MODE_SCALE && size <= 0)\n throw new RangeError('SVG scale must be > 0');\n if (mode !== this.SVG_MODE_SCALE && size < 1)\n throw new RangeError('SVG size must be >= 1')\n\n if (typeof svg === 'string') svg = new TextEncoder().encode(svg);\n const framebuffer = (await svglib.init()).rasterize(svg, mode, size);\n\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n return image;\n }\n\n /**\n * Creates a new image containing the rendered text.\n * @param {Uint8Array} font TrueType (ttf/ttc) or OpenType (otf) font buffer to use\n * @param {number} scale Font size to use\n * @param {string} text Text to render\n * @param {number} [color=0xffffffff] Text color to use\n * @param {TextLayout} [layout] The text layout to use\n * @return {Promise} The rendered text\n */\n static async renderText(font, scale, text, color = 0xffffffff, layout = new TextLayout()) {\n const { Font, Layout } = await fontlib.init();\n\n font = new Font(scale, font);\n const [r, g, b, a] = Image.colorToRGBA(color);\n\n const layoutOptions = new Layout();\n\n layoutOptions.reset({\n max_width: layout.maxWidth,\n max_height: layout.maxHeight,\n wrap_style: layout.wrapStyle,\n vertical_align: layout.verticalAlign,\n horizontal_align: layout.horizontalAlign,\n wrap_hard_breaks: layout.wrapHardBreaks\n });\n\n layoutOptions.append(font, text, {scale});\n const framebuffer = layoutOptions.rasterize(r, g, b);\n const image = new Image(framebuffer.width, framebuffer.height);\n\n image.bitmap.set(framebuffer.buffer);\n\n if (image.height > layout.maxHeight)\n image.crop(0, 0, image.width, Math.floor(layoutOptions.lines() / image.height * layout.maxHeight) * (image.height / layoutOptions.lines()));\n\n font.free();\n layoutOptions.free();\n return image.opacity(a / 0xff);\n }\n\n}\n\n/**\n * Represents a frame in a GIF\n * @extends Image\n */\n class Frame extends Image {\n /**\n * GIF frame disposal mode KEEP. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_KEEP() {\n return 'keep';\n }\n\n /**\n * GIF frame disposal mode PREVIOUS. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_PREVIOUS() {\n return 'previous';\n }\n\n /**\n * GIF frame disposal mode BACKGROUND. For use with {@link Frame}\n * @returns {string}\n */\n static get DISPOSAL_BACKGROUND() {\n return 'background';\n }\n\n static __convert_disposal_mode__(mode) {\n if (typeof mode === 'string')\n mode = ['any', 'keep', 'previous', 'background'].indexOf(mode);\n if (mode < 0 || mode > 3)\n throw new RangeError('Invalid disposal mode');\n\n return mode;\n }\n\n /**\n * Creates a new, blank frame\n * @param {number} width\n * @param {number} height\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frame's disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n constructor(width, height, duration = 100, xOffset = 0, yOffset = 0, disposalMode = Frame.DISPOSAL_KEEP) {\n if (isNaN(duration) || duration < 0)\n throw new RangeError('Invalid frame duration');\n\n super(width, height);\n this.duration = duration;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n this.disposalMode = disposalMode;\n }\n\n /**\n * The Frame's disposal mode\n * @returns {number}\n */\n get disposalMode() {\n return this.__disposalMode__;\n }\n\n /**\n * Sets the frame's disposal mode, converting it to the internal numeric value.\n * @param {string|number} disposalMode The frame's disposal mode\n */\n set disposalMode(disposalMode) {\n this.__disposalMode__ = Frame.__convert_disposal_mode__(disposalMode);\n }\n\n toString() {\n return `Frame<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * Converts an Image instance to a Frame, cloning it in the process\n * @param {Image} image The image to create the frame from\n * @param {number} [duration = 100] The frames duration (in ms)\n * @param {number} [xOffset=0] The frames offset on the x-axis\n * @param {number} [yOffset=0] The frames offset on the y-axis\n * @param {string|number} [disposalMode=Frame.DISPOSAL_KEEP] The frames disposal mode ({@link Frame.DISPOSAL_KEEP}, {@link Frame.DISPOSAL_PREVIOUS} or {@link Frame.DISPOSAL_BACKGROUND})\n * @return {Frame}\n */\n static from(image, duration, xOffset, yOffset, disposalMode = Frame.DISPOSAL_KEEP) {\n if (!(image instanceof Image))\n throw new TypeError('Invalid image passed');\n\n const frame = new Frame(image.width, image.height, duration, xOffset, yOffset, disposalMode);\n frame.bitmap.set(image.bitmap);\n\n return frame;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n const originalWidth = this.width;\n const originalHeight = this.height;\n\n const result = super.resize(width, height, mode);\n\n this.xOffset *= result.width / originalWidth;\n this.yOffset *= result.height / originalHeight;\n\n return result;\n }\n}\n\n/**\n * Represents a GIF image as an array of frames\n * @extends Array\n */\nclass GIF extends Array {\n /**\n * Creates a new GIF image.\n * @param {Frame[]} frames The frames to create the GIF from\n * @param {number} [loopCount=-1] How often to loop the GIF for (-1 = unlimited)\n * @property {number} loopCount How often the GIF will loop for\n */\n constructor(frames, loopCount = -1) {\n super(...frames);\n\n for (const frame of this)\n if (!(frame instanceof Frame))\n throw new TypeError(`Frame ${this.indexOf(frame)} is not an instance of Frame`);\n\n if (loopCount < -1 || isNaN(loopCount))\n throw new RangeError('Invalid loop count');\n\n this.loopCount = loopCount;\n }\n\n /**\n * The GIFs width\n * @returns {number}\n */\n get width() {\n let max = 0;\n for (const frame of this) {\n let width = frame.width + frame.xOffset;\n if (max < width)\n max = width;\n }\n\n return max;\n }\n\n /**\n * The GIFs height\n * @returns {number}\n */\n get height() {\n let max = 0;\n for (const frame of this) {\n let height = frame.height + frame.yOffset;\n if (max < height)\n max = height;\n }\n\n return max;\n }\n\n toString() {\n return `GIF<${this.width}x${this.height}x${this.duration}ms>`;\n }\n\n /**\n * @returns {Generator}\n */\n * [Symbol.iterator]() {\n for (let i = 0; i < this.length; i++)\n yield this[i];\n }\n\n slice(start, end) {\n if (end === Infinity)\n end = this.length;\n const frames = new Array(end - start);\n for (let i = 0; i < frames.length; i++)\n frames[i] = this[i + start];\n return new GIF(frames, this.loopCount);\n }\n\n /**\n * The GIFs duration (in ms)\n * @return {number}\n */\n get duration() {\n return this.reduce((acc, frame) => acc + frame.duration, 0);\n }\n\n /**\n * Encodes the image into a GIF\n * @param {number} [quality=95] GIF quality 0-100\n * @return {Promise} The encoded data\n */\n async encode(quality = 95) {\n const encoder = new (await giflib.init()).Encoder(this.width, this.height, this.loopCount);\n\n for (const frame of this) {\n if (!(frame instanceof Frame)) throw new Error('GIF contains invalid frames');\n encoder.add(frame.xOffset, frame.yOffset, ~~(frame.duration / 10), frame.width, frame.height, frame.bitmap, frame.disposalMode, quality / 100 * 29 + 1);\n }\n\n return encoder.u8();\n }\n\n /**\n * Decodes a GIF image\n * @param {Buffer|Uint8Array} data The binary data to decode\n * @param {boolean} [onlyExtractFirstFrame=false] Whether to end GIF decoding after the first frame\n * @return {Promise} The decoded GIF\n */\n static async decode(data, onlyExtractFirstFrame = false) {\n let image;\n data = mem.view(data);\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n if (ImageType.isGIF(view)) { // GIF\n const frames = [];\n const decoder = new (await giflib.init()).Decoder(data);\n\n if (onlyExtractFirstFrame) {\n const first = decoder.frames().next().value;\n const frame = new Frame(first.width, first.height, 10 * first.delay, first.x, first.y, first.dispose);\n\n frame.bitmap.set(first.buffer);\n\n frames.push(frame);\n image = new GIF(frames);\n }\n\n const gwidth = decoder.width | 0;\n const gheight = decoder.height | 0;\n const u32 = new Uint32Array(decoder.width * decoder.height);\n const u8 = new Uint8Array(u32.buffer, u32.byteOffset, u32.byteLength);\n\n for (const frame of decoder.frames()) {\n let offset8 = 0 | 0;\n let offset32 = 0 | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n const f8 = frame.buffer;\n const mode = frame.dispose;\n const width = frame.width | 0;\n const height = frame.height | 0;\n const f32 = new Uint32Array(f8.buffer, f8.byteOffset, width * height);\n const f = frames[frames.push(new Frame(gwidth, gheight, 10 * frame.delay, 0, 0, 3)) - 1];\n\n const t8 = f.bitmap;\n const t32 = new Uint32Array(t8.buffer);\n\n t8.set(u8);\n\n if (2 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n }\n }\n }\n\n else if (3 === mode) {\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = 0;\n }\n }\n }\n\n else if (0 === mode || 1 === mode) {\n t8.set(u8);\n for (let y = 0 | 0; y < height; y++) {\n const y_offset = fx + gwidth * (y + fy) | 0;\n\n for (let x = 0 | 0; x < width; x++) {\n const x_offset = x + y_offset;\n\n if (0 === f8[3 + offset8])\n t32[x_offset] = u32[x_offset];\n else t32[x_offset] = f32[offset32];\n\n offset32++;\n offset8 += 4;\n u32[x_offset] = t32[x_offset];\n }\n }\n }\n }\n\n image = new GIF(frames);\n } else throw new Error('Unsupported image type');\n\n return image;\n }\n\n resize(width, height, mode = Image.RESIZE_NEAREST_NEIGHBOR) {\n for (const frame of this)\n frame.resize(width, height, mode);\n }\n}\n\nclass TextLayout {\n /**\n * Layout options for {@link renderText}\n * @param {object} [options]\n * @param {number} [options.maxWidth=Infinity] The texts max width\n * @param {number} [options.maxHeight=Infinity] The texts max height\n * @param {string} [options.wrapStyle='word'] The texts wrap style when reaching the max width (word, char)\n * @param {string} [options.verticalAlign='left'] The vertical align mode (left, center, right)\n * @param {string} [options.horizontalAlign='top'] The horizontal align mode (top, middle, bottom)\n * @param {string} [options.wrapHardBreaks=true] Whether to force wrap at new line characters\n */\n constructor(options) {\n const {maxWidth, maxHeight, wrapStyle, verticalAlign, horizontalAlign, wrapHardBreaks} = options || {};\n\n this.maxWidth = maxWidth || Infinity;\n if (isNaN(this.maxWidth) || this.maxWidth < 1)\n throw new RangeError('Invalid maxWidth');\n\n this.maxHeight = maxHeight || Infinity;\n if (isNaN(this.maxHeight) || this.maxHeight < 1)\n throw new RangeError('Invalid maxHeight');\n\n this.wrapStyle = wrapStyle || 'word';\n if (!['word', 'char'].includes(this.wrapStyle))\n throw new RangeError('Invalid wrapStyle');\n\n this.verticalAlign = verticalAlign || 'left';\n if (!['left', 'center', 'right'].includes(this.verticalAlign))\n throw new RangeError('Invalid verticalAlign');\n\n this.horizontalAlign = horizontalAlign || 'top';\n if (!['top', 'middle', 'bottom'].includes(this.horizontalAlign))\n throw new RangeError('Invalid horizontalAlign');\n\n this.wrapHardBreaks = typeof wrapHardBreaks === 'undefined' ? true : wrapHardBreaks;\n if (typeof this.wrapHardBreaks !== 'boolean')\n throw new TypeError('Invalid wrapHardBreaks');\n }\n}\n\nclass ImageType {\n /**\n * Gets an images type (png, jpeg, tiff, gif)\n * @param {Buffer|Uint8Array} data The image binary to get the type of\n * @returns {string|null} The image type (png, jpeg, tiff, gif, null)\n */\n static getType(data) {\n let view;\n if (!ArrayBuffer.isView(data)) {\n data = new Uint8Array(data);\n view = new DataView(data.buffer);\n } else {\n data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n }\n\n if (this.isPNG(view)) return 'png';\n if (this.isJPEG(view)) return 'jpeg';\n if (this.isTIFF(view)) return 'tiff';\n if (this.isGIF(view)) return 'gif';\n return null;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isPNG(view) {\n return view.byteLength >= 4 && view.getUint32(0, false) === MAGIC_NUMBERS.PNG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isJPEG(view) {\n return view.byteLength >= 4 && (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.JPEG;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isTIFF(view) {\n return view.byteLength >= 4 && view.getUint32(0, false) === MAGIC_NUMBERS.TIFF;\n }\n\n /**\n * @param {DataView} view\n * @returns {boolean}\n */\n static isGIF(view) {\n return view.byteLength >= 4 && (view.getUint32(0, false) >>> 8) === MAGIC_NUMBERS.GIF;\n }\n}\n\n/**\n * Decodes the given image binary\n * @param {Uint8Array|Buffer} data The image data\n * @param {boolean} [onlyExtractFirstFrame] Whether to end GIF decoding after the first frame\n * @returns {Promise} The decoded image\n */\nfunction decode(data, onlyExtractFirstFrame) {\n const type = ImageType.getType(data);\n\n if (type === 'gif')\n return GIF.decode(data, onlyExtractFirstFrame);\n return Image.decode(data);\n}\n\nmodule.exports = {Image, GIF, Frame, TextLayout, ImageType, decode};\n","/* global SharedArrayBuffer */\nconst mem = require('./buffer.js');\nconst crc32 = require('./crc32.js');\nconst { compress, decompress } = require('./zlib.js');\n\nconst __IHDR__ = new Uint8Array([73, 72, 68, 82]);\nconst __IDAT__ = new Uint8Array([73, 68, 65, 84]);\nconst __IEND__ = new Uint8Array([73, 69, 78, 68]);\nconst __IEND_CRC__ = crc32(new Uint8Array([73, 69, 78, 68]));\nconst HEAD = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst color_types = {\n GREYSCALE: 0,\n TRUECOLOR: 2,\n INDEXED_COLOR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOR_ALPHA: 6\n};\n\nconst channels_to_color_type = {\n 1: color_types.GREYSCALE,\n 2: color_types.GREYSCALE_ALPHA,\n\n 3: color_types.TRUECOLOR,\n 4: color_types.TRUECOLOR_ALPHA\n};\n\nconst utf8encoder = new TextEncoder; // replace with latin1 encoder or iext\n\nmodule.exports = {\n encode(data, { text, width, height, channels, depth = 8, level = 0 }) {\n let offset = 0;\n let tmp_offset = 0;\n const row_length = width * channels;\n const tmp = new Uint8Array(height + data.length);\n\n while (offset < data.length) {\n tmp[tmp_offset++] = 0;\n tmp.set(data.subarray(offset, (offset += row_length)), tmp_offset);\n\n tmp_offset += row_length;\n }\n\n if (text) {\n let chunks = [];\n for (const key in text) {\n if (!text[key]) continue;\n const kb = utf8encoder.encode(key);\n const tb = utf8encoder.encode(text[key]);\n const chunk = new Uint8Array(1 + 12 + kb.length + tb.length);\n\n const view = new DataView(chunk.buffer);\n\n chunk[4] = 0x74;\n chunk[5] = 0x45;\n chunk[6] = 0x58;\n chunk[7] = 0x74;\n chunk.set(kb, 8);\n chunks.push(chunk);\n chunk.set(tb, 9 + kb.length);\n view.setUint32(0, chunk.length - 12);\n view.setUint32(chunk.length - 4, crc32(chunk.subarray(4, chunk.length - 4)));\n }\n\n text = mem.from_parts(chunks);\n }\n\n offset = text ? text.length : 0;\n const compressed = compress(tmp, level);\n const array = new Uint8Array(49 + offset + HEAD.length + compressed.length);\n\n array[26] = 0;\n array[27] = 0;\n array[28] = 0;\n array[24] = depth;\n array.set(HEAD, 0);\n array.set(__IHDR__, 12);\n array.set(__IDAT__, 37);\n array.set(compressed, 41);\n array[25] = channels_to_color_type[channels];\n if (text) array.set(text, 45 + compressed.length);\n array.set(__IEND__, 49 + offset + compressed.length);\n\n const view = new DataView(array.buffer);\n\n view.setUint32(8, 13);\n view.setUint32(16, width);\n view.setUint32(20, height);\n view.setUint32(33, compressed.length);\n view.setUint32(45 + offset + compressed.length, 0);\n view.setUint32(53 + offset + compressed.length, __IEND_CRC__);\n view.setUint32(29, crc32(new Uint8Array(array.buffer, 12, 17)));\n view.setUint32(41 + compressed.length, crc32(new Uint8Array(array.buffer, 37, 4 + compressed.length)));\n\n return array;\n },\n\n decode(array) {\n let view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n const width = view.getUint32(16);\n const height = view.getUint32(20);\n let bit_depth = array[24];\n const color_type = array[25];\n let channels = ({ 3: 1, 0: 1, 4: 2, 2: 3, 6: 4 })[color_type];\n const bytespp = channels * bit_depth / 8;\n\n const row_length = width * bytespp;\n let pixels = new Uint8Array(height * row_length);\n\n let offset = 0;\n let p_offset = 0;\n\n let c_offset = 33;\n const chunks = [];\n\n let palette, alphaPalette;\n\n const maxSearchOffset = array.length - 5;\n\n let type;\n while ((type = view.getUint32(4 + c_offset)) !== 1229278788) { // IEND\n if (type === 1229209940) // IDAT\n chunks.push(array.subarray(8 + c_offset, 8 + c_offset + view.getUint32(c_offset)));\n else if (type === 1347179589) { // PLTE\n if (palette)\n throw new Error('PLTE can only occur once in an image');\n palette = new Uint32Array(view.getUint32(c_offset));\n for (let pxlOffset = 0; pxlOffset < palette.length * 8; pxlOffset += 3)\n palette[pxlOffset / 3] = array[8 + c_offset + pxlOffset] << 24 | array[8 + c_offset + pxlOffset + 1] << 16 | array[8 + c_offset + pxlOffset + 2] << 8 | 0xff;\n } else if (type === 1951551059) { // tRNS\n if (alphaPalette)\n throw new Error('tRNS can only occur once in an image');\n alphaPalette = new Uint8Array(view.getUint32(c_offset));\n for (let i = 0; i < alphaPalette.length; i++)\n alphaPalette[i] = array[8 + c_offset + i];\n }\n\n c_offset += 4 + 4 + 4 + view.getUint32(c_offset);\n if (c_offset > maxSearchOffset) // missing IEND\n break;\n }\n\n array = decompress(chunks.length === 1 ? chunks[0] : mem.from_parts(chunks), height + height * row_length);\n\n while (offset < array.byteLength) {\n const filter = array[offset++];\n const slice = array.subarray(offset, offset += row_length);\n\n if (0 === filter) pixels.set(slice, p_offset);\n else if (1 === filter) this.filter_1(slice, pixels, p_offset, bytespp, row_length);\n else if (2 === filter) this.filter_2(slice, pixels, p_offset, bytespp, row_length);\n else if (3 === filter) this.filter_3(slice, pixels, p_offset, bytespp, row_length);\n else if (4 === filter) this.filter_4(slice, pixels, p_offset, bytespp, row_length);\n\n p_offset += row_length;\n }\n\n if (color_type === 3) {\n if (!palette)\n throw new Error('Indexed color PNG has no PLTE');\n\n if (alphaPalette)\n for (let i = 0; i < alphaPalette.length; i++)\n palette[i] &= 0xffffff00 | alphaPalette[i];\n\n const newPixels = new Uint8Array(width * height * 4);\n const pixelView = new DataView(newPixels.buffer, newPixels.byteOffset, newPixels.byteLength);\n for (let i = 0; i < pixels.length * (8 / bit_depth); i++)\n pixelView.setUint32(i * 4, palette[pixels[~~(i / (8 / bit_depth))] & (2**bit_depth-1)], false);\n channels = 4;\n bit_depth = 8;\n pixels = newPixels;\n }\n\n if (bit_depth !== 8) {\n const newPixels = new Uint8Array(pixels.length / bit_depth * 8);\n for (let i = 0; i < pixels.length; i += 2)\n newPixels[i / 2] = pixels[i];\n pixels = newPixels;\n }\n\n if (channels !== 4) {\n const newPixels = new Uint8Array(width * height * 4);\n const view = new DataView(newPixels.buffer);\n\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const pixel = pixels[i];\n view.setUint32(i * 4, pixel << 24 | pixel << 16 | pixel << 8 | 0xff, false);\n }\n } else if (channels === 2) {\n for (let i = 0; i < width * height * 2; i += 2) {\n const pixel = pixels[i];\n view.setUint32(i * 2, pixel << 24 | pixel << 16 | pixel << 8 | pixels[i + 1], false);\n }\n } else if (channels === 3) {\n newPixels.fill(0xff);\n for (let i = 0; i < width * height; i++)\n newPixels.set(pixels.subarray(i * 3, i * 3 + 3), i * 4);\n }\n\n pixels = newPixels;\n }\n\n return { width, height, pixels };\n },\n\n filter_1(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n while (i < bytespp) pixels[i + p_offset] = slice[i++];\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - bytespp];\n },\n\n filter_2(slice, pixels, p_offset, bytespp, row_length) {\n if (0 === p_offset) pixels.set(slice, p_offset);\n else {\n let i = 0;\n while (i < row_length) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n }\n },\n\n filter_3(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + (pixels[i++ - bytespp] >> 1);\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + (pixels[i++ + p_offset - row_length] >> 1);\n while (i < row_length) pixels[i + p_offset] = slice[i] + (pixels[i + p_offset - bytespp] + pixels[i++ + p_offset - row_length] >> 1);\n }\n },\n\n filter_4(slice, pixels, p_offset, bytespp, row_length) {\n let i = 0;\n\n if (0 === p_offset) {\n while (i < bytespp) pixels[i] = slice[i++];\n while (i < row_length) pixels[i] = slice[i] + pixels[i++ - bytespp];\n } else {\n while (i < bytespp) pixels[i + p_offset] = slice[i] + pixels[i++ + p_offset - row_length];\n\n while (i < row_length) {\n const a = pixels[i + p_offset - bytespp];\n const b = pixels[i + p_offset - row_length];\n const c = pixels[i + p_offset - bytespp - row_length];\n\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n\n pixels[i + p_offset] = slice[i++] + ((pa <= pb && pa <= pc) ? a : ((pb <= pc) ? b : c));\n }\n }\n }\n};\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/svg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function rasterize(buffer, fit, scale) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.rasterize(bptr, buffer.length, fit, scale);\n\n if (0 === ptr) throw new Error('svg: failed to parse');\n if (1 === ptr) throw new Error('svg: failed to rasterize');\n\n const framebuffer = {\n width: wasm.rasterize_width(ptr),\n height: wasm.rasterize_height(ptr),\n buffer: mem.u8(wasm.rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.rasterize_free(ptr), framebuffer);\n }\n\n return { rasterize };\n },\n}\n","// node_modules/fflate/esm/browser.js\n// https://github.com/101arrowz/fflate\n\n// MIT License\n\n// Copyright (c) 2020 Arjun Barrett\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n\nvar u8 = Uint8Array;\nvar u16 = Uint16Array;\nvar u32 = Uint32Array;\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]);\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2);\nvar fl = _a[0];\nvar revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0);\nvar fd = _b[0];\nvar revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar x;\nvar hMap = function (cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n }\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = hMap(flt, 9, 0);\nvar flrm = hMap(flt, 9, 1);\nvar fdm = hMap(fdt, 5, 0);\nvar fdrm = hMap(fdt, 5, 1);\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function (d, p, m) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8) >> (p & 7) & m;\n};\nvar bits16 = function (d, p) {\n var o = p >> 3 | 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);\n};\nvar shft = function (p) {\n return (p >> 3 | 0) + (p & 7 && 1);\n};\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function (dat, buf, st) {\n var sl = dat.length;\n if (!sl || st && !st.l && sl < 5)\n return buf || new u8(0);\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function (l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type === 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type === 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s === 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s === 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s === 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (; ; lpos = pos) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym === 256) {\n lpos = pos, lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt === buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = p >> 3 | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function (d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s === 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 !== s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 !== i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] === mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function (n, l, d) {\n return n.s === -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function (c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] === cln && i !== s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function (out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar et = new u8(0);\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv === hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod !== pimod) {\n if (dat[i + l] === dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] === dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i !== l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | a >>> 8 << 16 | (b & 255) << 8 | b >>> 8;\n }\n };\n};\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function (c, o) {\n var lv = o.level, fl2 = lv === 0 ? 0 : lv < 6 ? 1 : lv === 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function (d) {\n if ((d[0] & 15) !== 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n\n// bundle.js\nfunction compress(buf, level) {\n return zlibSync(buf, { level });\n}\n\nfunction decompress(buf, limit) {\n return unzlibSync(buf, new Uint8Array(limit));\n}\n\nmodule.exports = {\n compress,\n decompress\n};\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n\tasync init() {\n\t\tif (!mod) {\n\t\t\tconst streaming = 'compileStreaming' in WebAssembly;\n\t\t\tmod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/tiff.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n\t\t};\n\n\t\treturn this.new();\n\t},\n\n\tnew() {\n\t\tconst wasm = new WebAssembly.Instance(mod).exports;\n\n\t\tclass mem {\n\t\t\tstatic length() { return wasm.wlen(); }\n\t\t\tstatic alloc(size) { return wasm.walloc(size); }\n\t\t\tstatic free(ptr, size) { return wasm.wfree(ptr, size); }\n\t\t\tstatic u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n\t\t\tstatic u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n\t\t\tstatic copy_and_free(ptr, size) {\n\t\t\t\tlet slice = mem.u8(ptr, size).slice();\n\t\t\t\treturn (wasm.wfree(ptr, size), slice);\n\t\t\t}\n\t\t}\n\n\t\tfunction decode(buffer) {\n\t\t\tconst bptr = mem.alloc(buffer.length);\n\t\t\tmem.u8(bptr, buffer.length).set(buffer);\n\t\t\tconst ptr = wasm.decode(bptr, buffer.length);\n\t\t\tif (0 === ptr) throw new Error('tiff: failed to decode');\n\n\t\t\tconst framebuffer = {\n\t\t\t\twidth: wasm.decode_width(ptr),\n\t\t\t\theight: wasm.decode_height(ptr),\n\t\t\t\tbuffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n\t\t\t}\n\n\t\t\treturn (wasm.decode_free(ptr), framebuffer);\n\t\t}\n\n\t\treturn { decode };\n\t},\n}\n","function view(buffer, shared = false) {\n if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);\n if (typeof SharedArrayBuffer !== 'undefined' && shared && buffer instanceof SharedArrayBuffer)\n return new Uint8Array(buffer);\n if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n\n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n\n function from_parts(buffers, shared = false) {\n let length = 0;\n let offset = 0;\n buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));\n\n const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);\n\n buffers.forEach(buffer => {\n const ref = Array.isArray(buffer) ? buffer : view(buffer, true);\n\n u8.set(ref, offset);\n offset += ref.length;\n });\n\n return u8;\n }\n\n module.exports = { view, from_parts };\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/jpeg.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n function encode(buffer, width, height, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n return mem.copy_and_free(wasm.encode(ptr, width, height, quality), mem.length());\n }\n\n function decode(buffer, width, height) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n const ptr = wasm.decode(bptr, buffer.length, width, height);\n\n if (0 === ptr) throw new Error('jpg: failed to decode');\n if (1 === ptr) throw new Error('jpg: failed to scale decoder');\n\n const framebuffer = {\n width: wasm.decode_width(ptr),\n height: wasm.decode_height(ptr),\n format: wasm.decode_format(ptr),\n buffer: mem.u8(wasm.decode_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.decode_free(ptr), framebuffer);\n }\n\n return { encode, decode };\n },\n}","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/gif.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n };\n\n return this.new();\n },\n\n new() {\n const streams = new Map;\n const utf8encoder = new TextEncoder;\n\n const wasm = new WebAssembly.Instance(mod, {\n env: {\n push_to_stream(id, ptr) {\n streams.get(id).cb(mem.u8(ptr, mem.length()).slice());\n },\n },\n }).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n\n class Encoder {\n constructor(width, height, loops = -1) {\n this.slices = [];\n streams.set(0, this);\n this.ptr = wasm.encoder_new(0, width, height, loops);\n }\n\n cb(buffer) {\n this.slices.push(buffer);\n }\n\n free() {\n this.ptr = wasm.encoder_free(this.ptr);\n streams.delete(0);\n }\n\n u8() {\n this.free();\n let offset = 0;\n const u8 = new Uint8Array(this.slices.reduce((sum, array) => sum + array.length, 0));\n\n for (const x of this.slices) {\n u8.set(x, offset);\n offset += x.length;\n }\n\n return u8;\n }\n\n add(x, y, delay, width, height, buffer, dispose, quality) {\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add(this.ptr, ptr, buffer.length, x, y, width, height, delay, dispose, quality);\n }\n\n set comment(comment) {\n const buffer = utf8encoder.encode(comment);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_comment(this.ptr, ptr, buffer.length);\n }\n\n set application(application) {\n const buffer = utf8encoder.encode(application);\n\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n wasm.encoder_add_application(this.ptr, ptr, buffer.length);\n }\n }\n\n class Decoder {\n constructor(buffer, limit = 0) {\n const bptr = mem.alloc(buffer.length);\n mem.u8(bptr, buffer.length).set(buffer);\n this.ptr = wasm.decoder_new(bptr, buffer.length, limit);\n if (0 === this.ptr) throw new Error('gif: failed to parse gif header');\n\n this.width = wasm.decoder_width(this.ptr);\n this.height = wasm.decoder_height(this.ptr);\n }\n\n free() {\n this.ptr = wasm.decoder_free(this.ptr);\n }\n\n *frames() {\n let frame;\n while (frame = this.frame()) yield frame;\n }\n\n frame() {\n const ptr = wasm.decoder_frame(this.ptr);\n\n if (1 === ptr) return null;\n if (0 === ptr) throw (this.free(), new Error('gif: failed to decode frame'));\n\n const framebuffer = {\n x: wasm.decoder_frame_x(ptr),\n y: wasm.decoder_frame_y(ptr),\n delay: wasm.decoder_frame_delay(ptr),\n width: wasm.decoder_frame_width(ptr),\n height: wasm.decoder_frame_height(ptr),\n dispose: wasm.decoder_frame_dispose(ptr),\n buffer: mem.u8(wasm.decoder_frame_buffer(ptr), mem.length()).slice(),\n };\n\n return (wasm.decoder_frame_free(ptr), framebuffer);\n }\n }\n\n return { Encoder, Decoder };\n },\n}\n","const { version } = require('../../package.json');\n\nlet mod = null;\nmodule.exports = {\n async init() {\n if (!mod) {\n const streaming = 'compileStreaming' in WebAssembly;\n mod = await WebAssembly[!streaming ? 'compile' : 'compileStreaming'](await fetch(`https://unpkg.com/imagescript@${version}/wasm/any/font.wasm`).then(x => streaming ? x : x.arrayBuffer()));\n }\n\n return this.new();\n },\n\n new() {\n let registry = null;\n const wasm = new WebAssembly.Instance(mod).exports;\n\n class mem {\n static length() { return wasm.wlen(); }\n static alloc(size) { return wasm.walloc(size); }\n static free(ptr, size) { return wasm.wfree(ptr, size); }\n static u8(ptr, size) { return new Uint8Array(wasm.memory.buffer, ptr, size); }\n static u32(ptr, size) { return new Uint32Array(wasm.memory.buffer, ptr, size); }\n\n static copy_and_free(ptr, size) {\n let slice = mem.u8(ptr, size).slice();\n return (wasm.wfree(ptr, size), slice);\n }\n }\n const encode_utf8 = 'Deno' in globalThis ? Deno.core.encode : (() => {\n const encoder = new TextEncoder();\n return string => encoder.encode(string);\n })();\n\n const decode_utf8 = 'Deno' in globalThis ? Deno.core.decode : (() => {\n const decoder = new TextDecoder();\n return buffer => decoder.decode(buffer);\n })();\n\n if ('FinalizationRegistry' in globalThis) {\n registry = new FinalizationRegistry(([t, ptr]) => {\n if (t === 0) wasm.font_free(ptr);\n if (t === 1) wasm.layout_free(ptr);\n });\n }\n\n class Font {\n constructor(scale, buffer) {\n this.scale = scale;\n const ptr = mem.alloc(buffer.length);\n mem.u8(ptr, buffer.length).set(buffer);\n this.ptr = wasm.font_new(ptr, buffer.length, scale);\n\n if (!this.ptr) throw new Error('invalid font');\n if (registry) registry.register(this, [0, this.ptr], this);\n }\n\n free() {\n this.ptr = wasm.font_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n has(char) {\n return wasm.font_has(this.ptr, String.prototype.charCodeAt.call(char, 0));\n }\n\n metrics(char, scale = this.scale) {\n const ptr = wasm.font_metrics(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n const metrics = JSON.parse(decode_utf8(mem.u8(wasm.font_metrics_buffer(ptr), mem.length())));\n\n return (wasm.font_metrics_free(ptr), metrics);\n }\n\n rasterize(char, scale = this.scale) {\n const ptr = wasm.font_rasterize(this.ptr, String.prototype.charCodeAt.call(char, 0), scale);\n\n const glyph = {\n buffer: mem.u8(wasm.font_rasterize_buffer(ptr), mem.length()).slice(),\n metrics: JSON.parse(decode_utf8(mem.u8(wasm.font_rasterize_metrics(ptr), mem.length()))),\n }\n\n return (wasm.font_rasterize_free(ptr), glyph);\n }\n }\n\n class Layout {\n constructor() {\n this.ptr = wasm.layout_new();\n if (registry) this.refs = [];\n if (registry) registry.register(this, [1, this.ptr], this);\n }\n\n clear() {\n wasm.layout_clear(this.ptr);\n if (registry) this.refs.length = 0;\n }\n\n lines() {\n return wasm.layout_lines(this.ptr);\n }\n\n free() {\n if (registry) this.refs.length = 0;\n this.ptr = wasm.layout_free(this.ptr);\n if (registry) registry.unregister(this);\n }\n\n reset(options = {}) {\n options = encode_utf8(JSON.stringify(options));\n\n if (registry) this.refs.length = 0;\n const ptr = mem.alloc(options.length);\n mem.u8(ptr, options.length).set(options);\n wasm.layout_reset(this.ptr, ptr, options.length);\n }\n\n append(font, text, init) {\n text = encode_utf8(text);\n const options = init || {};\n if (registry) this.refs.push(font);\n const ptr = mem.alloc(text.length);\n mem.u8(ptr, text.length).set(text);\n const has_color = ('r' in options) || ('g' in options) || ('b' in options);\n wasm.layout_append(this.ptr, font.ptr, ptr, text.length, options.scale == null ? font.scale : options.scale, has_color, options.r, options.g, options.b);\n }\n\n rasterize(r, g, b) {\n const ptr = wasm.layout_rasterize(this.ptr, r, g, b);\n\n const framebuffer = {\n width: wasm.layout_rasterize_width(ptr),\n height: wasm.layout_rasterize_height(ptr),\n buffer: mem.u8(wasm.layout_rasterize_buffer(ptr), mem.length()).slice(),\n }\n\n return (wasm.layout_rasterize_free(ptr), framebuffer);\n }\n }\n\n return { Font, Layout };\n },\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(248);\n"],"names":["root","factory","exports","module","define","amd","self","table","Uint32Array","buffer","offset","crc","bl","length","png","mem","giflib","svglib","version","fontlib","jpeglib","tifflib","Image","constructor","width","height","RangeError","this","__width__","__height__","__buffer__","ArrayBuffer","__view__","DataView","__u32__","bitmap","Uint8ClampedArray","toString","Symbol","iterator","y","x","iterateWithColors","getUint32","rgbaToColor","r","g","b","a","rgbToColor","hslaToColor","h","s","l","Math","min","max","hue2rgb","p","q","t","hslToColor","rgbaToHSLA","d","colorToRGBA","color","colorToRGB","slice","getPixelAt","__check_boundaries__","getRGBAAt","idx","subarray","setPixelAt","pixelColor","__set_pixel__","setUint32","isNaN","TypeError","__out_of_bounds__","fill","clone","image","set","RESIZE_NEAREST_NEIGHBOR","RESIZE_AUTO","scale","factor","mode","__scale__","__apply__","__resize__","resize","contain","scaleFactor","fit","result","composite","cover","crop","Error","floor","__resize_nearest_neighbor__","ySrc","xSrc","destPos","srcPos","__crop__","tY","drawBox","__fast_box__","tX","nX","nY","tC","right","xPos","end","start","bottom","copyWithin","drawCircle","radius","radSquared","currentY","currentX","cropCircle","feathering","centerX","centerY","distanceFromCenter","alphaIdx","opacity","absolute","__set_channel_value__","red","saturation","green","blue","value","i","lightness","source","yy","y_offset","xx","x_offset","fg","bg","__alpha_blend__","fa","alpha","inv_alpha","invert","invertValue","invertSaturation","invertHue","hueShift","degrees","averageColor","colorAvg","divisor","rgba","map","v","dominantColor","ignoreBlack","ignoreWhite","bwThreshold","colorCounts","Array","key","maxColorCount","mostProminentValue","forEach","el","rotate","angle","__rotate_180__","rad","PI","sin","cos","abs","out","out_cx","out_cy","src_cx","src_cy","w","ysin","ycos","xf","yf","__interpolate__","reverse","src","x0","y0","x1","y1","x2","y2","xq","yq","out_slice","ref","__pawn__","point0","point1","weight","src_slice","wa","Frame","from","duration","xOffset","yOffset","disposalMode","gradient","colors","entries","Object","sort","positions","e","parseFloat","values","__gradient__","position","minDef","maxDef","gradients","minPos","undefined","maxPos","minVal","maxVal","push","roundCorners","xRad","startColor","endColor","sr","sg","sb","sa","er","eg","eb","ea","fisheye","tu32","ru32","iw","ih","xco","yco","dfc","sqrt","dis","nx","ny","cO","encode","compression","title","author","description","copyright","creationTime","software","disclaimer","warning","comment","level","channels","text","Title","Author","Description","Copyright","Date","now","toUTCString","Software","Disclaimer","Warning","Source","Comment","encodeJPEG","quality","init","decode","data","view","byteOffset","byteLength","ImageType","isPNG","pixels","isJPEG","framebuffer","pixelType","format","pixel","isTIFF","SVG_MODE_SCALE","SVG_MODE_WIDTH","SVG_MODE_HEIGHT","renderSVG","svg","size","includes","TextEncoder","rasterize","renderText","font","layout","TextLayout","Font","Layout","layoutOptions","reset","max_width","maxWidth","max_height","maxHeight","wrap_style","wrapStyle","vertical_align","verticalAlign","horizontal_align","horizontalAlign","wrap_hard_breaks","wrapHardBreaks","append","lines","free","DISPOSAL_KEEP","DISPOSAL_PREVIOUS","DISPOSAL_BACKGROUND","__convert_disposal_mode__","indexOf","super","__disposalMode__","frame","originalWidth","originalHeight","GIF","frames","loopCount","Infinity","reduce","acc","encoder","Encoder","add","u8","onlyExtractFirstFrame","isGIF","decoder","Decoder","first","next","delay","dispose","gwidth","gheight","u32","Uint8Array","offset8","offset32","fx","fy","f8","f32","t8","t32","options","getType","isView","crc32","compress","decompress","__IHDR__","__IDAT__","__IEND__","__IEND_CRC__","HEAD","channels_to_color_type","utf8encoder","depth","tmp_offset","row_length","tmp","chunks","kb","tb","chunk","from_parts","compressed","array","bit_depth","color_type","bytespp","p_offset","c_offset","palette","alphaPalette","maxSearchOffset","type","pxlOffset","filter","filter_1","filter_2","filter_3","filter_4","newPixels","pixelView","c","pa","pb","pc","mod","streaming","WebAssembly","fetch","then","arrayBuffer","new","wasm","Instance","wlen","alloc","walloc","ptr","wfree","memory","copy_and_free","bptr","rasterize_width","rasterize_height","rasterize_buffer","rasterize_free","u16","Uint16Array","fleb","fdeb","clim","freb","j","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","m","flt","fdt","flm","flrm","fdm","fdrm","bits","o","bits16","shft","slc","n","wbits","wbits16","hTree","f","t2","et","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","_a2","dlt","mlb","_b2","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","zlibSync","opts","adler","lv","fl2","opt","pre","post","st","lvl","plvl","lst","ceil","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","log","wbytes","buf","limit","sl","noBuf","noSt","cbuf","l2","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","inflt","zlv","decode_width","decode_height","decode_buffer","decode_free","shared","SharedArrayBuffer","buffers","isArray","decode_format","streams","Map","env","push_to_stream","id","get","cb","loops","slices","encoder_new","encoder_free","delete","sum","encoder_add","encoder_add_comment","application","encoder_add_application","decoder_new","decoder_width","decoder_height","decoder_free","decoder_frame","decoder_frame_x","decoder_frame_y","decoder_frame_delay","decoder_frame_width","decoder_frame_height","decoder_frame_dispose","decoder_frame_buffer","decoder_frame_free","registry","encode_utf8","globalThis","Deno","core","string","decode_utf8","TextDecoder","FinalizationRegistry","font_free","layout_free","font_new","register","unregister","has","char","font_has","String","prototype","charCodeAt","call","metrics","font_metrics","JSON","parse","font_metrics_buffer","font_metrics_free","font_rasterize","glyph","font_rasterize_buffer","font_rasterize_metrics","font_rasterize_free","layout_new","refs","clear","layout_clear","layout_lines","stringify","layout_reset","has_color","layout_append","layout_rasterize","layout_rasterize_width","layout_rasterize_height","layout_rasterize_buffer","layout_rasterize_free","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file

  2. 7*%=nh0~pD<6_OuNjquK;OFt(#9P!3@H+R}@I9 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 literal 1052040 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⪙I?;TVD}ziNh&Ji`$Aj%WG$wEf78 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 diff --git a/tests/targets/crop.png b/tests/targets/crop.png deleted file mode 100644 index 9b38bfcced95464d45c0d38b9db61aed82bb05c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2488 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 diff --git a/tests/targets/external.png b/tests/targets/external.png deleted file mode 100644 index d27eba0c98c79be0afb030536828961c1ab6bd50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 493736 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