@banou/ripple 0.0.21 → 0.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +102 -187
- package/assets/{libtorrent-CnjRmD5O.js → libtorrent-DY7aMUNo.js} +1 -1
- package/assets/{worker-i0pDn8fp.js → worker-DqSNLC3T.js} +6 -6
- package/{build-JdIfVZn7.js → build-B7te3F-u.js} +1 -1
- package/fkn.json +1 -1
- package/index.js +7506 -6812
- package/libav-jspi.wasm +0 -0
- package/libav-worker.js +3 -3
- package/libav.wasm +0 -0
- package/package.json +3 -1
- package/{remote-U0iHKFtw.js → remote-DvdN47iT.js} +1 -1
- package/sw.js +2 -2
- package/api-DIgTslNb-BSzu7eku.js +0 -374
- package/api-d5i206BT.js +0 -2
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 Banou
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,212 +1,127 @@
|
|
|
1
|
-
# Ripple
|
|
1
|
+
# Ripple
|
|
2
|
+
|
|
3
|
+
Download and stream torrents in your browser. Ripple runs a real BitTorrent engine
|
|
4
|
+
([libtorrent](https://www.libtorrent.org), compiled to WebAssembly) in the page, reaches peers
|
|
5
|
+
through the [FKN](https://fkn.app) relay, and plays a video while it downloads. There is nothing to
|
|
6
|
+
install and no Ripple server.
|
|
7
|
+
|
|
8
|
+
- Live at [torrent.fkn.app](https://torrent.fkn.app), and inside FKN at
|
|
9
|
+
[fkn.app/app/npm:@banou/ripple](https://fkn.app/app/npm:@banou/ripple)
|
|
10
|
+
- Published on npm as [`@banou/ripple`](https://www.npmjs.com/package/@banou/ripple)
|
|
11
|
+
|
|
12
|
+
## Features
|
|
13
|
+
|
|
14
|
+
- **Add a magnet or a `.torrent`.** Paste it, drop it, or open it from your system once Ripple is
|
|
15
|
+
installed as an app, which then opens `magnet:` links and `.torrent` files.
|
|
16
|
+
- **Watch while it downloads**, with subtitles, a choice of audio track and a Normalize volume
|
|
17
|
+
switch.
|
|
18
|
+
- **Pick the files you want** before the download starts.
|
|
19
|
+
- **Keep files in the browser or in a folder on your disk**, and save one file, or a zip of
|
|
20
|
+
several.
|
|
21
|
+
- **Create a torrent** from files or a folder (v1, v2 or hybrid, private with a source tag, web
|
|
22
|
+
seeds) and seed it straight from those files.
|
|
23
|
+
- **Your library on every device.** Signed in to FKN, your list and its thumbnails sync, encrypted
|
|
24
|
+
in your browser before they leave it.
|
|
25
|
+
- **Share links** that open the player or a download page, which other sites can embed.
|
|
26
|
+
- **One engine for all your tabs.** One tab runs it and the others use it.
|
|
27
|
+
- **Speed limits** for everything or per torrent, and the peers, trackers, files and all-time share
|
|
28
|
+
ratio of each torrent.
|
|
29
|
+
- **No Ripple account and no analytics.**
|
|
30
|
+
|
|
31
|
+
## How it is built
|
|
32
|
+
|
|
33
|
+
- **UI**: React 19, routed with React Router 7 and styled with Emotion, in `src/router` and
|
|
34
|
+
`src/components`.
|
|
35
|
+
- **Engine**: [`libtorrent-wasm`](https://www.npmjs.com/package/libtorrent-wasm) in a Web Worker
|
|
36
|
+
(`src/torrent/worker.ts`), driven from the page by `src/torrent/client.ts`. One tab holds it
|
|
37
|
+
under a Web Lock and the others reach it over a BroadcastChannel (`engine-election.ts`,
|
|
38
|
+
`engine-share.ts`).
|
|
39
|
+
- **Network**: `@fkn/lib/net` and `@fkn/lib/dgram`, carried through the FKN relay (`relayWorker`
|
|
40
|
+
bridges the worker). Inbound peers reach a port the relay reserves.
|
|
41
|
+
- **Storage**: OPFS, or a folder you grant (`src/torrent/hybrid-storage.ts`). The list, resume data
|
|
42
|
+
and thumbnails are in IndexedDB.
|
|
43
|
+
- **Player**: [`@banou/media-player`](https://www.npmjs.com/package/@banou/media-player) at
|
|
44
|
+
`/watch` (`src/router/embed.tsx`), with libav-wasm and jassub.
|
|
45
|
+
- **Sync**: `src/torrent/use-cloud-backup.ts` and `src/torrent/thumbnail-sync.ts`, under `ripple/`
|
|
46
|
+
in the FKN account's storage.
|
|
47
|
+
|
|
48
|
+
## Development
|
|
49
|
+
|
|
50
|
+
Use Node 24 (`.node-version` names 24.21.0).
|
|
2
51
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
| --- | --- | --- |
|
|
12
|
-
| `m` | the packed magnet, base64url | what Ripple writes today |
|
|
13
|
-
| `magnet` | base64 of the magnet URI | the original form, read forever |
|
|
14
|
-
| `fileIndex` | a file index | the file `/watch` plays; the fallback `/download` uses |
|
|
15
|
-
| `files` | `all`, `3`, `0-4`, `0,2,5` | what `/download` delivers |
|
|
16
|
-
| `f` | a packed file list | optional preview, `/download` only |
|
|
17
|
-
|
|
18
|
-
One of `m` or `magnet` is required. `m` wins if both are present.
|
|
19
|
-
|
|
20
|
-
There is no `mode` parameter. It used to choose the page and is now neither written nor read, so a
|
|
21
|
-
link still carrying one gets the page its PATH names and the parameter is ignored.
|
|
22
|
-
|
|
23
|
-
### The two magnet forms
|
|
24
|
-
|
|
25
|
-
`magnet=<base64 of the magnet URI>` is the original, and it is **permanent**. Every link ever handed
|
|
26
|
-
out with it keeps working, and an embedder that finds it easier to write can keep writing it. Nothing
|
|
27
|
-
about it has changed.
|
|
28
|
-
|
|
29
|
-
`m=` is the same torrent packed smaller: the infohash as raw bytes rather than 40 hex characters, and
|
|
30
|
-
the rest of the query deflated against a fixed table of the announce URLs that public magnets
|
|
31
|
-
overwhelmingly share. It is base64url, so a query string carries it without escaping anything. Across
|
|
32
|
-
a corpus covering every magnet form Ripple accepts, the median link is **69% shorter**; a five-tracker
|
|
33
|
-
release goes from a 549-character URL to 148. A magnet using only private trackers has nothing to
|
|
34
|
-
match against and still comes out around 42% shorter, on the strength of the packed infohash alone.
|
|
35
|
-
|
|
36
|
-
Ripple writes whichever of the two is shorter, which is almost always `m`. The digit is a version:
|
|
37
|
-
the table it compresses against can never be edited, so if it ever needs to change the parameter
|
|
38
|
-
becomes `m2` and `m` keeps decoding the way it always did.
|
|
39
|
-
|
|
40
|
-
### Parameter order
|
|
41
|
-
|
|
42
|
-
Order never matters when READING a link. When writing one, Ripple puts the plainest parts first:
|
|
43
|
-
|
|
44
|
-
```
|
|
45
|
-
/watch?fileIndex=3&m=AQAIraWnphg6rh4J2DHfZ0jVZglaEAMWq8GZeSWpORSmTXxFBwA
|
|
46
|
-
/download?files=2&m=AQAIraWnphg6rh4J2DHfZ0jVZglaEAMWq8GZeSWpORSmTXxFBwA
|
|
47
|
-
/download?m=AQAIraWnphg6rh4J2DHfZ0jVZglaEAMWq8GZeSWpORSmTXxFBwA&f=AWNSC87MK0nN0YdQ
|
|
52
|
+
```sh
|
|
53
|
+
npm ci
|
|
54
|
+
npm run dev # http://localhost:4560
|
|
55
|
+
npm run build # the site and the npm package, into build/
|
|
56
|
+
npm test # unit tests (vitest, node)
|
|
57
|
+
npm run test:browser # component tests in Chrome
|
|
58
|
+
npm run typecheck
|
|
59
|
+
npm run lint # vp lint
|
|
48
60
|
```
|
|
49
61
|
|
|
50
|
-
The
|
|
51
|
-
it was the only thing in the link; now that everything around it is base64url or an index, leading
|
|
52
|
-
with it buried the one part a person can read behind forty characters of noise. A URL is read from
|
|
53
|
-
the left and truncated from the right, so `f`, the longest parameter and the one a reader cares
|
|
54
|
-
least about, goes last.
|
|
55
|
-
|
|
56
|
-
### `f`, the file list
|
|
57
|
-
|
|
58
|
-
A magnet names a torrent and nothing else, so a download link normally opens on "Reading the torrent
|
|
59
|
-
from the network" for as long as metadata takes. `f` closes that gap by carrying the file list the
|
|
60
|
-
sender already had, and the page shows it immediately, marked **from the link**.
|
|
62
|
+
The Playwright suites build first, then drive the built site in Chrome:
|
|
61
63
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
| command | what it covers |
|
|
65
|
+
| --- | --- |
|
|
66
|
+
| `npm run test:e2e:local` | the app, needing nothing but the browser (and ffmpeg) |
|
|
67
|
+
| `npm run test:e2e:machine` | live figures keep their width, which depends on the machine's fonts |
|
|
68
|
+
| `npm run test:e2e:swarm` | the engine against real public swarms |
|
|
69
|
+
| `npm run test:e2e:rig` | the whole chain against a local swarm, see [tests/swarm-rig](./tests/swarm-rig/README.md) |
|
|
67
70
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
left off entirely rather than pushing the link past what a chat message will carry. Absent, `f`
|
|
71
|
-
changes nothing, so a link without it behaves exactly as it always has.
|
|
71
|
+
The swarm and rig suites need a headful Chrome, because headless Chromium stalls the engine at
|
|
72
|
+
0 B/s. Run them under `xvfb-run -a -s "-screen 0 1280x720x24"` so no window opens.
|
|
72
73
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
file list is the part that is both small and worth having.
|
|
74
|
+
A push to `main` deploys [torrent.fkn.app](https://torrent.fkn.app) (Cloudflare Pages), and
|
|
75
|
+
publishes to npm when `package.json` names a version the registry does not have yet
|
|
76
|
+
(`.github/workflows/publish-lib.yml`). Each published version is signed for FKN with `fkn-sign`.
|
|
77
77
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
Plays `fileIndex` (0 if absent) in the media player, with the filename, peer count and transfer
|
|
81
|
-
rates drawn over the video.
|
|
82
|
-
|
|
83
|
-
The mode used to be a parameter, and for a while Ripple wrote `mode=watch` out in full so that a
|
|
84
|
-
link said what it did rather than being told apart by an absence. The path says it for free and in
|
|
85
|
-
the part of a URL that is read first, so the parameter is gone from both halves and a link still
|
|
86
|
-
carrying one gets the page its path names.
|
|
78
|
+
## Embedding
|
|
87
79
|
|
|
88
|
-
|
|
89
|
-
|
|
80
|
+
`/watch` and `/download` are the pages another site puts in an iframe. Both take a magnet and the
|
|
81
|
+
same query; the path chooses which one renders. `/watch` plays a file, `/download` delivers files.
|
|
90
82
|
|
|
91
|
-
|
|
83
|
+
| param | value | meaning |
|
|
84
|
+
| --- | --- | --- |
|
|
85
|
+
| `magnet` | base64 of the magnet URI | the form to write; permanent |
|
|
86
|
+
| `m` | the packed magnet, base64url | what Ripple's own share links write |
|
|
87
|
+
| `fileIndex` | a file index | the file `/watch` plays (0 if absent); the fallback `/download` uses |
|
|
88
|
+
| `files` | `all`, `3`, `0-4`, `0,2,5` | what `/download` delivers |
|
|
92
89
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
90
|
+
One of `magnet` or `m` is required, and `m` is read first when both are present. `magnet=` is the
|
|
91
|
+
original form and every link written with it keeps working. `m=` is the same torrent packed into a
|
|
92
|
+
much shorter link.
|
|
96
93
|
|
|
97
94
|
```
|
|
98
|
-
/
|
|
99
|
-
/download?magnet=<base64
|
|
100
|
-
/download?magnet=<base64>&files=
|
|
101
|
-
/download?magnet=<base64>&files=0
|
|
102
|
-
/download?magnet=<base64>&
|
|
103
|
-
|
|
95
|
+
/watch?magnet=<base64>&fileIndex=3 plays file 3
|
|
96
|
+
/download?magnet=<base64> the whole torrent
|
|
97
|
+
/download?magnet=<base64>&files=3 just file 3
|
|
98
|
+
/download?magnet=<base64>&files=0-4 files 0 to 4 inclusive, as a zip
|
|
99
|
+
/download?magnet=<base64>&files=0,2,5 those three, as a zip
|
|
100
|
+
/download?magnet=<base64>&fileIndex=3 same as files=3
|
|
104
101
|
```
|
|
105
102
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
### What an embedder has to grant
|
|
103
|
+
One file is delivered as that file, and more than one as a single `.zip`. `files` outranks
|
|
104
|
+
`fileIndex`. Indices the torrent does not have are dropped, and a selection that resolves to
|
|
105
|
+
nothing says so instead of downloading the whole torrent.
|
|
110
106
|
|
|
111
|
-
**
|
|
112
|
-
|
|
113
|
-
restored from inside, and Chrome then refuses the download *silently*: the navigation is dropped, no
|
|
114
|
-
event fires and nothing throws. There is no `downloads` feature in Permissions-Policy, so `allow=`
|
|
115
|
-
is not a lever here; the `sandbox` attribute is the only one.
|
|
107
|
+
**A sandboxed frame needs `allow-downloads`**, or the browser drops the download without an error.
|
|
108
|
+
Leaving out `sandbox` works too.
|
|
116
109
|
|
|
117
110
|
```html
|
|
118
111
|
<iframe src="https://torrent.fkn.app/download?magnet=..."
|
|
119
112
|
sandbox="allow-scripts allow-same-origin allow-downloads"></iframe>
|
|
120
113
|
```
|
|
121
114
|
|
|
122
|
-
|
|
123
|
-
offers a link to open itself top-level, which is the way out if the embedder cannot grant the flag.
|
|
124
|
-
|
|
125
|
-
Two other consequences of being framed, both handled: Chrome refuses `showSaveFilePicker` in a
|
|
126
|
-
cross-origin frame, so the page does not ask for one, and delivery goes through the service worker
|
|
127
|
-
instead.
|
|
115
|
+
Why each part works the way it does is in [docs/embedding.md](./docs/embedding.md).
|
|
128
116
|
|
|
129
|
-
##
|
|
130
|
-
|
|
131
|
-
| command | what it covers | cost |
|
|
132
|
-
| --- | --- | --- |
|
|
133
|
-
| `npm test` | pure logic in node | ~1s |
|
|
134
|
-
| `npm run test:browser` | components in real Chrome | ~2s |
|
|
135
|
-
| `npx tsc --noEmit` | types | ~1s |
|
|
136
|
-
| `npx vp lint` | oxlint, type aware | ~1s |
|
|
137
|
-
| `npm run test:download` | the download page against a real torrent, end to end | ~30s |
|
|
138
|
-
| `npm run test:e2e` | the engine against real swarms | minutes, headful |
|
|
139
|
-
| `npm run test:e2e:rig` | the whole chain against a local swarm, see below | ~90s, headful under Xvfb |
|
|
117
|
+
## Privacy
|
|
140
118
|
|
|
141
|
-
|
|
142
|
-
|
|
119
|
+
Ripple needs no account and runs no analytics. Your list and your files stay in your browser, or in
|
|
120
|
+
a folder you choose. Signed in to FKN, your list and its thumbnails sync to your FKN account,
|
|
121
|
+
encrypted in your browser first. Peers see the FKN relay's address, not yours. The
|
|
122
|
+
[privacy page](https://torrent.fkn.app/privacy) lists what Ripple keeps
|
|
123
|
+
(`src/router/privacy.tsx`).
|
|
143
124
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
`e2e:rig` downloads a torrent that exists only on this machine. The seeders are transmission daemons
|
|
147
|
-
on `127.0.0.2` and up, the relay is a local webvpn build, and the broker is a local fkn-client web
|
|
148
|
-
build, so the only source of a byte is the fleet the magnet names. The public swarm cannot give that:
|
|
149
|
-
byte-identical code measured 14.7 s to 73.4 s to first frame there.
|
|
150
|
-
|
|
151
|
-
| piece | where | port |
|
|
152
|
-
| --- | --- | --- |
|
|
153
|
-
| broker (fkn-client `web`, development build) | `http://localhost:5234/api` | 5234 |
|
|
154
|
-
| relay (webvpn release build) | WebTransport, HTTP, WebSocket on `127.0.0.1` | 5433, 5434, 5443 |
|
|
155
|
-
| ripple (`build/`, served) | `http://localhost:5460` | 5460 |
|
|
156
|
-
| seeders (transmission 4) | `127.0.0.2:52600` and up, rpc `9400` and up | |
|
|
157
|
-
|
|
158
|
-
None of it overlaps fkn/local's rig (1234, 3000, 4433, 4560, 8443), so the two run side by side. The
|
|
159
|
-
ports live in `tests/swarm-rig/topology.json`.
|
|
160
|
-
|
|
161
|
-
It needs three checkouts, and an fkn-client worktree of its own, because the rig rewrites that
|
|
162
|
-
checkout's `.env.local` files and build output:
|
|
163
|
-
|
|
164
|
-
```sh
|
|
165
|
-
git -C ~/dev/horionsoftware/fkn-client worktree add --detach ~/dev/fkn-client-rig origin/main
|
|
166
|
-
(cd ~/dev/horionsoftware/webvpn && cargo build --release)
|
|
167
|
-
|
|
168
|
-
export RIPPLE_RIG_FKN_CLIENT=~/dev/fkn-client-rig
|
|
169
|
-
export RIPPLE_RIG_WEBVPN=~/dev/horionsoftware/webvpn
|
|
170
|
-
export RIPPLE_RIG_LOCAL=~/dev/horionsoftware/local
|
|
171
|
-
export RIPPLE_CHROME=$(command -v google-chrome-stable)
|
|
172
|
-
export RIG_TRANSMISSION=$(nix build --no-link --print-out-paths 'nixpkgs#transmission_4')
|
|
173
|
-
|
|
174
|
-
nix shell nixpkgs#xvfb-run -c env -u WAYLAND_DISPLAY -u NIXOS_OZONE_WL \
|
|
175
|
-
xvfb-run -a -s "-screen 0 1280x720x24" npm run test:e2e:rig
|
|
176
|
-
```
|
|
125
|
+
## License
|
|
177
126
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
1. `scripts/rig-prepare.mjs` builds `@fkn/lib` with `VITE_WEB_ORIGIN=http://localhost:5234` and the
|
|
181
|
-
web app as the broker, then checks what each build baked in. It refuses a main worktree.
|
|
182
|
-
2. `npm run build`, which sees `RIPPLE_RIG_FKN_CLIENT` and resolves `@fkn/lib` to that local build
|
|
183
|
-
(the published lib has `https://fkn.app` baked in, and no setting of ripple's can move it). The
|
|
184
|
-
build warns when it does this. Afterwards `build/` points at the rig's broker, so rebuild without
|
|
185
|
-
the variable before serving it for anything else.
|
|
186
|
-
3. `playwright.rig.config.ts` starts the relay (the environment `byo.sh webvpn --export` prints, moved
|
|
187
|
-
to the rig's ports, with a fresh certificate and `FREE_RATE_BYTES_PER_SEC` at 1 GiB/s), the broker
|
|
188
|
-
and ripple, then runs `tests/swarm-rig.spec.ts`.
|
|
189
|
-
|
|
190
|
-
The spec has three tests, run in order:
|
|
191
|
-
|
|
192
|
-
- **Configuration.** The relay answers. The RUNNING relay's environment allows private targets and
|
|
193
|
-
carries the raised rate. `/api` serves the broker's own document, not the SPA fallback.
|
|
194
|
-
- **The swarm arm.** It makes a 60 s 720p fixture with ffmpeg (no private flag, which would stop
|
|
195
|
-
seeders serving metadata to a magnet). It starts N seeders with staggered adds and opens `/watch`
|
|
196
|
-
for the magnet in a fresh regular profile. It then asserts that the engine held the whole file,
|
|
197
|
-
that OPFS holds it piece for piece and by SHA-256, that a frame was painted, and that the seeders
|
|
198
|
-
uploaded at least the file. It prints time to first byte, first frame and completion from the add.
|
|
199
|
-
- **The control.** The same fleet comes up and goes down, and the same visit runs for 30 s. It must
|
|
200
|
-
see 0 bytes in the engine and in OPFS, and the swarm arm's own assertion must FAIL on it.
|
|
201
|
-
|
|
202
|
-
The seeders run under a shell that kills them when the test process is gone, so a run killed
|
|
203
|
-
outright leaves nothing on their addresses. Without that shell, all four outlived a SIGKILL.
|
|
204
|
-
|
|
205
|
-
Knobs: `RIPPLE_RIG_SEEDERS` (default 4), `RIPPLE_RIG_BUDGET_MS` (swarm arm, 120000),
|
|
206
|
-
`RIPPLE_RIG_CONTROL_MS` (30000), `RIPPLE_RIG_STATE` (fixture and seeder state, default
|
|
207
|
-
`$TMPDIR/ripple-swarm-rig`). The config refuses to start when `WAYLAND_DISPLAY` or `NIXOS_OZONE_WL`
|
|
208
|
-
is set, because the Nix Chrome wrapper then opens a real window even under `xvfb-run`.
|
|
209
|
-
|
|
210
|
-
The engine's DHT is on, and it announces the infohash through the relay. So the control can see a
|
|
211
|
-
stray peer (1 peer in two of three runs, 0 bytes each time). This is why the seeders' own upload
|
|
212
|
-
count is part of the claim.
|
|
127
|
+
MIT, see [LICENSE](./LICENSE).
|
|
@@ -3,4 +3,4 @@ var e=(()=>{var e=import.meta.url;return(async function(t={}){var n,r=t,i,a,o=ne
|
|
|
3
3
|
`,Math.max(n,r))+1;t=t.slice(i),e&8&&V(`emscripten_log with EM_LOG_C_STACK no longer has any effect`);var a=t.split(`
|
|
4
4
|
`);t=``;var o=/* @__PURE__ */ RegExp(`\\s*(.*?)@(.*?):([0-9]+):([0-9]+)`),s=/* @__PURE__ */ RegExp(`\\s*at (.*?) \\((.*):(.*):(.*)\\)`);for(var c of a){var l=``,u=``,d=0,f=0,p=s.exec(c);if(p?.length==5)l=p[1],u=p[2],d=p[3],f=p[4];else if(p=o.exec(c),p?.length>=4)l=p[1],u=p[2],d=p[3],f=p[4]|0;else{t+=c+`
|
|
5
5
|
`;continue}e&24&&(e&64&&(u=u.substring(u.replace(/\\/g,`/`).lastIndexOf(`/`)+1)),t+=` at ${l} (${u}:${d}:${f})\n`)}return t=t.replace(/\s+$/,``),t},On=(e,t)=>{e&24&&(t=t.replace(/\s+$/,``),t+=(t.length>0?`
|
|
6
|
-
`:``)+Dn(e)),e&1?e&4?console.error(t):e&2?console.warn(t):e&512?console.info(t):e&256?console.debug(t):console.log(t):e&6?x(t):te(t)},kn=(e,t,n)=>{On(e,Pe(Tn(t,n)))},An=()=>2147483648,jn=e=>{var t=S.buffer,n=(e-t.byteLength+65535)/65536|0;try{return S.grow(n),me(),1}catch(n){x(`growMemory: Attempted to grow heap from ${t.byteLength} bytes to ${e} bytes, but got error: ${n}`)}},Mn=e=>{var t=E.length;e>>>=0,w(e>t);var n=An();if(e>n)return x(`Cannot enlarge memory, requested ${e} bytes, but the limit is ${n} bytes!`),!1;for(var r=1;r<=4;r*=2){var i=t*(1+.2/r);i=Math.min(i,e+100663296);var a=Math.min(n,vt(Math.max(e,i),65536));if(jn(a))return!0}return x(`Failed to grow the heap from ${t} bytes to ${a} bytes, not enough memory!`),!1},Nn={},Pn=()=>p||`./this.program`,Fn=()=>{if(!Fn.strings){var e={USER:`web_user`,LOGNAME:`web_user`,PATH:`/`,PWD:`/`,HOME:`/home/web_user`,LANG:(typeof navigator==`object`&&navigator.languages&&navigator.languages[0]||`C`).replace(`-`,`_`)+`.UTF-8`,_:Pn()};for(var t in Nn)Nn[t]===void 0?delete e[t]:e[t]=Nn[t];var n=[];for(var t in e)n.push(`${t}=${e[t]}`);Fn.strings=n}return Fn.strings},In=(e,t)=>{for(var n=0;n<e.length;++n)w(e.charCodeAt(n)===(e.charCodeAt(n)&255)),T[t++]=e.charCodeAt(n);T[t]=0},Ln=(e,t)=>{var n=0;return Fn().forEach((r,i)=>{var a=t+n;A[e+i*4>>2]=a,In(r,a),n+=r.length+1}),0},Rn=(e,t)=>{var n=Fn();A[e>>2]=n.length;var r=0;return n.forEach(e=>r+=e.length+1),A[t>>2]=r,0};function zn(e){return G.closeFd(e),0}function Bn(e){if(G.fds.has(e))return zn(e);try{let t=Y.getStreamFromFD(e);return J.close(t),0}catch(e){if(J===void 0||e.name!==`ErrnoError`)throw e;return e.errno}}var Vn=(e,t,n,r)=>{for(var i=0,a=0;a<n;a++){var o=A[t>>2],s=A[t+4>>2];t+=8;var c=J.read(e,T,o,s,r);if(c<0)return-1;if(i+=c,c<s)break;r!==void 0&&(r+=c)}return i};function Hn(e,t,n,r,i,a){var o=kt(r,i);try{if(isNaN(o))return 61;var s=Vn(Y.getStreamFromFD(e),t,n,o);return A[a>>2]=s,0}catch(e){if(J===void 0||e.name!==`ErrnoError`)throw e;return e.errno}}var Un=(e,t,n,r)=>{for(var i=0,a=0;a<n;a++){var o=A[t>>2],s=A[t+4>>2];t+=8;var c=J.write(e,T,o,s,r);if(c<0)return-1;if(i+=c,c<s)break;r!==void 0&&(r+=c)}return i};function Wn(e,t,n,r,i,a){var o=kt(r,i);try{if(isNaN(o))return 61;var s=Un(Y.getStreamFromFD(e),t,n,o);return A[a>>2]=s,0}catch(e){if(J===void 0||e.name!==`ErrnoError`)throw e;return e.errno}}function Gn(e,t,n,r){try{var i=Vn(Y.getStreamFromFD(e),t,n);return A[r>>2]=i,0}catch(e){if(J===void 0||e.name!==`ErrnoError`)throw e;return e.errno}}function Kn(e,t,n,r,i){var a=kt(t,n);try{if(isNaN(a))return 61;var o=Y.getStreamFromFD(e);return J.llseek(o,a,r),R=[o.position>>>0,(L=o.position,+Math.abs(L)>=1?L>0?Math.floor(L/4294967296)>>>0:~~+Math.ceil((L-+(~~L>>>0))/4294967296)>>>0:0)],k[i>>2]=R[0],k[i+4>>2]=R[1],o.getdents&&a===0&&r===0&&(o.getdents=null),0}catch(e){if(J===void 0||e.name!==`ErrnoError`)throw e;return e.errno}}function qn(e,t,n,r){try{var i=Un(Y.getStreamFromFD(e),t,n);return A[r>>2]=i,0}catch(e){if(J===void 0||e.name!==`ErrnoError`)throw e;return e.errno}}var Jn=e=>{for(var t=e.split(`.`),n=0;n<4;n++){var r=Number(t[n]);if(isNaN(r))return null;t[n]=r}return(t[0]|t[1]<<8|t[2]<<16|t[3]<<24)>>>0},Yn=e=>parseInt(e),Xn=e=>{var t,n,r,i,a=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i,o=[];if(!a.test(e))return null;if(e===`::`)return[0,0,0,0,0,0,0,0];for(e=e.startsWith(`::`)?e.replace(`::`,`Z:`):e.replace(`::`,`:Z:`),e.indexOf(`.`)>0?(e=e.replace(/* @__PURE__ */ RegExp(`[.]`,`g`),`:`),t=e.split(`:`),t[t.length-4]=Yn(t[t.length-4])+Yn(t[t.length-3])*256,t[t.length-3]=Yn(t[t.length-2])+Yn(t[t.length-1])*256,t=t.slice(0,t.length-2)):t=e.split(`:`),r=0,i=0,n=0;n<t.length;n++)if(typeof t[n]==`string`){if(t[n]===`Z`){for(i=0;i<8-t.length+1;i++)o[n+i]=0;r=i-1}else o[n+r]=Er(parseInt(t[n],16))}else o[n+r]=t[n];return[o[1]<<16|o[0],o[3]<<16|o[2],o[5]<<16|o[4],o[7]<<16|o[6]]},Zn={address_map:{id:1,addrs:{},names:{}},lookup_name(e){var t=Jn(e);if(t!==null||(t=Xn(e),t!==null))return e;var n;if(Zn.address_map.addrs[e])n=Zn.address_map.addrs[e];else{var r=Zn.address_map.id++;w(r<65535,`exceeded max address mappings of 65535`),n=`172.29.`+(r&255)+`.`+(r&65280),Zn.address_map.names[n]=e,Zn.address_map.addrs[e]=n}return n},lookup_addr(e){return Zn.address_map.names[e]?Zn.address_map.names[e]:null}},Qn=e=>(e&255)+`.`+(e>>8&255)+`.`+(e>>16&255)+`.`+(e>>24&255),$n=e=>{var t=``,n=0,r=0,i=0,a=0,o=0,s=0,c=[e[0]&65535,e[0]>>16,e[1]&65535,e[1]>>16,e[2]&65535,e[2]>>16,e[3]&65535,e[3]>>16],l=!0,u=``;for(s=0;s<5;s++)if(c[s]!==0){l=!1;break}if(l){if(u=Qn(c[6]|c[7]<<16),c[5]===-1)return t=`::ffff:`,t+=u,t;if(c[5]===0)return t=`::`,u===`0.0.0.0`&&(u=``),u===`0.0.0.1`&&(u=`1`),t+=u,t}for(n=0;n<8;n++)c[n]===0&&(n-i>1&&(o=0),i=n,o++),o>r&&(r=o,a=n-r+1);for(n=0;n<8;n++){if(r>1&&c[n]===0&&n>=a&&n<a+r){n===a&&(t+=`:`,a===0&&(t+=`:`));continue}t+=Number(Tr(c[n]&65535)).toString(16),t+=n<7?`:`:``}return t},er=(e,t,n,r,i)=>{switch(t){case 2:n=Jn(n),_t(e,16),i&&(k[i>>2]=16),D[e>>1]=t,k[e+4>>2]=n,D[e+2>>1]=Er(r);break;case 10:n=Xn(n),_t(e,28),i&&(k[i>>2]=28),k[e>>2]=t,k[e+8>>2]=n[0],k[e+12>>2]=n[1],k[e+16>>2]=n[2],k[e+20>>2]=n[3],D[e+2>>1]=Er(r);break;default:return 5}return 0},tr=(e,t,n,r)=>{var i=0,a=0,o=0,s=0,c=0,l=0,u;function d(e,t,n,r,i,a){var o,s=e===10?28:16,c,l;return i=e===10?$n(i):Qn(i),o=Or(s),l=er(o,e,i,a),w(!l),c=Or(32),k[c+4>>2]=e,k[c+8>>2]=t,k[c+12>>2]=n,A[c+24>>2]=r,A[c+20>>2]=o,e===10?k[c+16>>2]=28:k[c+16>>2]=16,k[c+28>>2]=0,c}if(n&&(o=k[n>>2],s=k[n+4>>2],c=k[n+8>>2],l=k[n+12>>2]),c&&!l&&(l=c===2?17:6),!c&&l&&(c=l===17?2:1),l===0&&(l=6),c===0&&(c=1),!e&&!t)return-2;if(o&-1088||n!==0&&k[n>>2]&2&&!e)return-1;if(o&32)return-2;if(c!==0&&c!==1&&c!==2)return-7;if(s!==0&&s!==2&&s!==10)return-6;if(t&&(t=H(t),a=parseInt(t,10),isNaN(a)))return o&1024?-2:-8;if(!e)return s===0&&(s=2),o&1||(i=s===2?Cr(2130706433):[0,0,0,Cr(1)]),u=d(s,c,l,null,i,a),A[r>>2]=u,0;if(e=H(e),i=Jn(e),i!==null){if(s===0||s===2)s=2;else if(s===10&&o&8)i=[0,0,Cr(65535),i],s=10;else return-2}else if(i=Xn(e),i!==null){if(s===0||s===10)s=10;else return-2}return i==null?o&4?-2:(e=Zn.lookup_name(e),i=Jn(e),s===0?s=2:s===10&&(i=[0,0,Cr(65535),i]),u=d(s,c,l,null,i,a),A[r>>2]=u,0):(u=d(s,c,l,e,i,a),A[r>>2]=u,0)};function nr(e,t,n){if(!G.storage||!G.storage.check){r._lt_disk_complete_status(t,n,0,0),G.scheduleTick();return}Promise.resolve(G.storage.check(e)).then(e=>{r._lt_disk_complete_status(t,n,e|0,0),G.scheduleTick()}).catch(e=>{r._lt_disk_complete_status(t,n,0,e.errno||G.err.IO),G.scheduleTick()})}var rr=function(e,t,n,i){let a=e=>{r._lt_disk_complete_delete(t,n,e||0),G.scheduleTick()};if(!G.storage||!G.storage.deleteFiles){a(0);return}Promise.resolve(G.storage.deleteFiles(e,i)).then(()=>a(0),e=>a(e.errno||G.err.IO))},ir=function(e,t,n,i){let a=H(i),o=(e,i)=>{let o=_r(a);r._lt_disk_complete_move(t,n,o,i,e||0),Dr(o),G.scheduleTick()};if(!G.storage||!G.storage.move){o(G.err.NOSYS,1);return}Promise.resolve(G.storage.move(e,a)).then(()=>o(0,0),e=>o(e.errno||G.err.IO,1))};function ar(e,t,n,r){if(!G.storage)return;let i=H(t),a=H(n,r),o=[];try{o=JSON.parse(a)}catch{}Promise.resolve(G.storage.onNewStorage(e,i,o)).catch(e=>console.error(`[fkn] onNewStorage error`,e))}function or(e,t,n,i,a,o,s){G.stats.diskRead++;let c=a+o*4294967296;if(!G.storage){let e=Or(s);E.fill(0,e,e+s),r._lt_disk_complete_read(t,n,e,s,0);return}let l=e=>{let i=Or(e.length);E.set(e,i),r._lt_disk_complete_read(t,n,i,e.length,0)},u=e=>{console.error(`[fkn] disk read error`,e),r._lt_disk_complete_read(t,n,0,0,e.errno||G.err.IO),G.scheduleTick()},d;try{d=G.storage.read(e,i,c,s)}catch(e){u(e);return}d&&typeof d.then==`function`?d.then(l,u).then(()=>G.scheduleTick()):l(d)}var sr=function(e,t,n){let i=()=>{r._lt_disk_complete_simple(t,n),G.scheduleTick()};if(!G.storage||!G.storage.release){i();return}Promise.resolve(G.storage.release(e)).then(i,i)},cr=function(e){G.storage&&Promise.resolve(G.storage.onRemoveStorage(e)).catch(e=>console.error(`[fkn] onRemoveStorage error`,e))},lr=function(e,t,n,i,a){let o=H(a),s=e=>{let i=_r(o);r._lt_disk_complete_rename(t,n,i,e||0),Dr(i),G.scheduleTick()};if(!G.storage||!G.storage.rename){s(G.err.NOSYS);return}Promise.resolve(G.storage.rename(e,i,o)).then(()=>s(0),e=>s(e.errno||G.err.IO))},ur=function(e,t,n){let i=()=>{r._lt_disk_complete_simple(t,n),G.scheduleTick()};if(!G.storage||!G.storage.stop){i();return}Promise.resolve(G.storage.stop(e)).then(i,i)};function dr(e,t,n,i,a,o,s,c){G.stats.diskWrite++;let l=a+o*4294967296;if(!G.storage){r._lt_disk_complete_write(t,n,0);return}let u=E.slice(s,s+c),d=e=>{r._lt_disk_complete_write(t,n,e?.errno||G.err.IO),G.scheduleTick()},f;try{f=G.storage.write(e,i,l,u)}catch(e){d(e);return}f&&typeof f.then==`function`?f.then(()=>{r._lt_disk_complete_write(t,n,0),G.scheduleTick()},d):r._lt_disk_complete_write(t,n,0)}var fr=function(e,t){G.initialized||G.init(),G.stats.dnsReq++;let n=H(e),i=t?6:4,a=e=>{G.stats.dnsDone++;let t=_r(n),i=_r(e||``);r._lt_dns_complete(t,i),Dr(t),Dr(i),G.scheduleTick()},o=G.host&&G.host.dnsLookup;if(o){Promise.resolve(o(n,{family:i})).then(e=>{if(!e)return a(``);a((Array.isArray(e)?e:[e]).map(e=>e.address).join(`,`))}).catch(()=>a(``));return}let s=t?`AAAA`:`A`;fetch(`https://1.1.1.1/dns-query?name=`+encodeURIComponent(n)+`&type=`+s,{headers:{Accept:`application/dns-json`}}).then(e=>e.ok?e.json():null).then(e=>{if(!e)return a(``);let n=t?28:1,r=(e.Answer||[]).filter(e=>e.type===n).map(e=>e.data);a(r.join(`,`))}).catch(()=>a(``))},pr=e=>e;function mr(e,t){try{return lt(E.subarray(e,e+t)),0}catch(e){if(J===void 0||e.name!==`ErrnoError`)throw e;return e.errno}}var hr=[],gr,Z=e=>{var t=hr[e];return t||(e>=hr.length&&(hr.length=e+1),hr[e]=t=gr.get(e)),w(gr.get(e)==t,`JavaScript-side Wasm function table mirror is out of date!`),t},_r=e=>{var t=ft(e)+1,n=Or(t);return n&&jt(e,n,t),n};r.incrementExceptionRefcount=e=>Lr(e),r.decrementExceptionRefcount=e=>Ir(e);var vr=e=>Pr(e),yr=e=>{var t=B(),n=vr(4),r=vr(4);Rr(e,n,r);var i=A[n>>2],a=A[r>>2],o=H(i);Dr(i);var s;return a&&(s=H(a),Dr(a)),z(t),[o,s]},br=e=>yr(e);r.getExceptionMessage=br,G.fds=/* @__PURE__ */ new Map,G.freeFds=[],J.createPreloadedFile=wt,J.staticInit();function xr(){P(`ENVIRONMENT`),P(`GL_MAX_TEXTURE_IMAGE_UNITS`),P(`SDL_canPlayWithWebAudio`),P(`SDL_numSimultaneouslyQueuedBuffers`),P(`INITIAL_MEMORY`),P(`wasmMemory`),P(`arguments`),P(`buffer`),P(`canvas`),P(`doNotCaptureKeyboard`),P(`dynamicLibraries`),P(`elementPointerLock`),P(`extraStackTrace`),P(`forcedAspectRatio`),P(`instantiateWasm`),P(`keyboardListeningElement`),P(`freePreloadedMediaOnUse`),P(`loadSplitModule`),P(`locateFile`),P(`logReadFiles`),P(`mainScriptUrlOrBlob`),P(`mem`),P(`monitorRunDependencies`),P(`noExitRuntime`),P(`noInitialRun`),P(`onAbort`),P(`onCustomMessage`),P(`onExit`),P(`onFree`),P(`onFullScreen`),P(`onMalloc`),P(`onRealloc`),P(`onRuntimeInitialized`),P(`postMainLoop`),P(`postRun`),P(`preInit`),P(`preMainLoop`),P(`preRun`),P(`preinitializedWebGLContext`),P(`preloadPlugins`),P(`setStatus`),P(`statusMessage`),P(`stderr`),P(`stdin`),P(`stdout`),P(`thisProgram`),P(`wasm`),P(`websocket`),P(`fetchSettings`)}var Sr={__assert_fail:Fe,__cxa_begin_catch:Le,__cxa_current_primary_exception:Re,__cxa_end_catch:ze,__cxa_find_matching_catch_2:We,__cxa_find_matching_catch_3:Ge,__cxa_find_matching_catch_4:Ke,__cxa_find_matching_catch_5:qe,__cxa_rethrow:Je,__cxa_rethrow_primary_exception:Ye,__cxa_throw:Xe,__cxa_uncaught_exceptions:Ze,__resumeException:Ve,__syscall__newselect:$e,__syscall_accept4:tt,__syscall_bind:rt,__syscall_connect:at,__syscall_fcntl64:st,__syscall_fstat64:Ot,__syscall_ftruncate64:At,__syscall_getcwd:Mt,__syscall_getpeername:Pt,__syscall_getsockname:It,__syscall_getsockopt:Rt,__syscall_ioctl:zt,__syscall_listen:Vt,__syscall_lstat64:Ht,__syscall_mkdirat:Ut,__syscall_newfstatat:Wt,__syscall_openat:Kt,__syscall_pipe:qt,__syscall_poll:Yt,__syscall_recvfrom:Qt,__syscall_renameat:$t,__syscall_rmdir:en,__syscall_sendmsg:rn,__syscall_sendto:an,__syscall_socket:sn,__syscall_stat64:cn,__syscall_unlinkat:ln,_abort_js:un,_emscripten_throw_longjmp:dn,_tzset_js:fn,clock_time_get:_n,emscripten_date_now:mn,emscripten_err:vn,emscripten_log:kn,emscripten_resize_heap:Mn,environ_get:Ln,environ_sizes_get:Rn,fd_close:Bn,fd_pread:Hn,fd_pwrite:Wn,fd_read:Gn,fd_seek:Kn,fd_write:qn,getaddrinfo:tr,invoke_diii:zi,invoke_fiii:Ri,invoke_i:Ci,invoke_ii:gi,invoke_iii:xi,invoke_iiii:Si,invoke_iiiii:yi,invoke_iiiiii:Di,invoke_iiiiiii:Oi,invoke_iiiiiiii:wi,invoke_iiiiiiiii:Fi,invoke_iiiiiiiiii:Ni,invoke_iiiiiiiiiii:Pi,invoke_iiiiiiiiiiii:Ii,invoke_iiiiiiiiiiiii:Li,invoke_iiiij:Wi,invoke_iiijii:Zi,invoke_iij:Ui,invoke_iiji:na,invoke_iijii:aa,invoke_ij:ia,invoke_j:Hi,invoke_ji:Yi,invoke_jii:Gi,invoke_jiiii:pa,invoke_jiiiii:ra,invoke_jiij:Vi,invoke_v:Ti,invoke_vi:hi,invoke_vii:vi,invoke_viii:_i,invoke_viiii:mi,invoke_viiiii:bi,invoke_viiiiii:Ei,invoke_viiiiiii:ki,invoke_viiiiiiii:ji,invoke_viiiiiiiii:Ai,invoke_viiiiiiiiii:Mi,invoke_viiiiiiiiiiiiiii:Bi,invoke_viiiij:ea,invoke_viiiijiii:Qi,invoke_viiiijiijii:ca,invoke_viiiji:Xi,invoke_viiijiiiii:qi,invoke_viiijj:la,invoke_viiji:ua,invoke_viijiiiiii:Ji,invoke_viijji:ta,invoke_vij:Ki,invoke_viji:$i,invoke_vijii:sa,invoke_vijiji:da,invoke_vijijii:fa,invoke_vijj:oa,js_disk_check:nr,js_disk_delete:rr,js_disk_move:ir,js_disk_new_storage:ar,js_disk_read:or,js_disk_release:sr,js_disk_remove_storage:cr,js_disk_rename:lr,js_disk_stop:ur,js_disk_write:dr,js_resolver_async:fr,llvm_eh_typeid_for:pr,random_get:mr},Q=await je(),Cr=I(`htonl`,1),wr=I(`strerror`,1),Tr=I(`ntohs`,1),Er=I(`htons`,1),Dr=r._free=I(`free`,1),Or=r._malloc=I(`malloc`,1);r._lt_dns_complete=I(`lt_dns_complete`,2),r._lt_set_log=I(`lt_set_log`,1),r._lt_set_utp_receive_buffer=I(`lt_set_utp_receive_buffer`,1),r._lt_set_dht=I(`lt_set_dht`,1),r._lt_session_set_rate_limits=I(`lt_session_set_rate_limits`,3),r._lt_set_listen_port=I(`lt_set_listen_port`,1),r._lt_session_create=I(`lt_session_create`,0),r._lt_session_destroy=I(`lt_session_destroy`,0),r._lt_diag_tick_count=I(`lt_diag_tick_count`,0),r._lt_diag_total_handlers=I(`lt_diag_total_handlers`,0),r._lt_diag_open_tcp=I(`lt_diag_open_tcp`,0),r._lt_diag_listen_full=I(`lt_diag_listen_full`,0),r._lt_diag_open_udp=I(`lt_diag_open_udp`,0),r._lt_diag_force_reopen=I(`lt_diag_force_reopen`,0),r._lt_diag_parse_interfaces=I(`lt_diag_parse_interfaces`,1),r._lt_session_tick=I(`lt_session_tick`,0),r._lt_session_next_timer_ms=I(`lt_session_next_timer_ms`,1),r._lt_session_pump_alerts=I(`lt_session_pump_alerts`,0),r._lt_alerts_size=I(`lt_alerts_size`,0),r._lt_alerts_data=I(`lt_alerts_data`,0),r._lt_alerts_clear=I(`lt_alerts_clear`,0),r._lt_session_add_magnet=I(`lt_session_add_magnet`,2),r._lt_session_add_torrent_file=I(`lt_session_add_torrent_file`,3),r._lt_session_remove_torrent=I(`lt_session_remove_torrent`,1),r._lt_session_remove_torrent_ex=I(`lt_session_remove_torrent_ex`,2),r._lt_torrent_pause=I(`lt_torrent_pause`,1),r._lt_torrent_resume=I(`lt_torrent_resume`,1),r._lt_torrent_force_recheck=I(`lt_torrent_force_recheck`,1),r._lt_torrent_save_resume_data=I(`lt_torrent_save_resume_data`,1),r._lt_session_add_torrent_with_resume=I(`lt_session_add_torrent_with_resume`,3),r._lt_torrent_post_status=I(`lt_torrent_post_status`,1),r._lt_torrent_status=I(`lt_torrent_status`,2),r._lt_torrent_post_peers=I(`lt_torrent_post_peers`,1),r._lt_torrent_post_trackers=I(`lt_torrent_post_trackers`,1),r._lt_torrent_infohash=I(`lt_torrent_infohash`,2),r._lt_torrent_infohash_v2=I(`lt_torrent_infohash_v2`,2),r._lt_torrent_set_sequential=I(`lt_torrent_set_sequential`,2),r._lt_torrent_set_flags=I(`lt_torrent_set_flags`,3),r._lt_torrent_force_reannounce=I(`lt_torrent_force_reannounce`,1),r._lt_torrent_queue_position=I(`lt_torrent_queue_position`,2),r._lt_torrent_set_upload_limit=I(`lt_torrent_set_upload_limit`,2),r._lt_torrent_set_download_limit=I(`lt_torrent_set_download_limit`,2),r._lt_torrent_read_piece=I(`lt_torrent_read_piece`,2),r._lt_torrent_set_piece_deadline=I(`lt_torrent_set_piece_deadline`,4),r._lt_torrent_clear_piece_deadlines=I(`lt_torrent_clear_piece_deadlines`,1),r._lt_torrent_reset_piece_deadline=I(`lt_torrent_reset_piece_deadline`,2),r._lt_torrent_prioritize_pieces=I(`lt_torrent_prioritize_pieces`,3),r._lt_torrent_prioritize_piece_list=I(`lt_torrent_prioritize_piece_list`,4),r._lt_torrent_prioritize_files=I(`lt_torrent_prioritize_files`,3),r._lt_torrent_cancel_piece_requests=I(`lt_torrent_cancel_piece_requests`,2),r._lt_torrent_set_file_priority=I(`lt_torrent_set_file_priority`,3),r._lt_disk_complete_read=I(`lt_disk_complete_read`,5),r._lt_disk_complete_write=I(`lt_disk_complete_write`,3),r._lt_disk_complete_simple=I(`lt_disk_complete_simple`,2),r._lt_disk_complete_status=I(`lt_disk_complete_status`,4),r._lt_disk_complete_move=I(`lt_disk_complete_move`,5),r._lt_disk_complete_delete=I(`lt_disk_complete_delete`,3),r._lt_disk_complete_rename=I(`lt_disk_complete_rename`,4);var kr=I(`fflush`,1),$=I(`setThrew`,2),Ar=I(`_emscripten_tempret_set`,1),jr=Q.emscripten_stack_init;Q.emscripten_stack_get_free,Q.emscripten_stack_get_base;var Mr=Q.emscripten_stack_get_end,Nr=Q._emscripten_stack_restore,Pr=Q._emscripten_stack_alloc,Fr=Q.emscripten_stack_get_current,Ir=I(`__cxa_decrement_exception_refcount`,1),Lr=I(`__cxa_increment_exception_refcount`,1),Rr=I(`__get_exception_message`,3),zr=I(`__cxa_can_catch`,3),Br=I(`__cxa_get_exception_ptr`,1),Vr=r.dynCall_jiij=I(`dynCall_jiij`,5),Hr=r.dynCall_j=I(`dynCall_j`,1),Ur=r.dynCall_iij=I(`dynCall_iij`,4),Wr=r.dynCall_vijj=I(`dynCall_vijj`,6),Gr=r.dynCall_iiiij=I(`dynCall_iiiij`,6),Kr=r.dynCall_vij=I(`dynCall_vij`,4),qr=r.dynCall_jii=I(`dynCall_jii`,3),Jr=r.dynCall_viiijiiiii=I(`dynCall_viiijiiiii`,11),Yr=r.dynCall_viijiiiiii=I(`dynCall_viijiiiiii`,11),Xr=r.dynCall_ji=I(`dynCall_ji`,2),Zr=r.dynCall_iiijii=I(`dynCall_iiijii`,7),Qr=r.dynCall_viiiijiii=I(`dynCall_viiiijiii`,10),$r=r.dynCall_viji=I(`dynCall_viji`,5),ei=r.dynCall_viiiij=I(`dynCall_viiiij`,7),ti=r.dynCall_viijji=I(`dynCall_viijji`,8),ni=r.dynCall_iiji=I(`dynCall_iiji`,5),ri=r.dynCall_jiiiii=I(`dynCall_jiiiii`,6),ii=r.dynCall_viiiji=I(`dynCall_viiiji`,7),ai=r.dynCall_ij=I(`dynCall_ij`,3),oi=r.dynCall_iijii=I(`dynCall_iijii`,6),si=r.dynCall_vijii=I(`dynCall_vijii`,6),ci=r.dynCall_viiiijiijii=I(`dynCall_viiiijiijii`,13),li=r.dynCall_viiijj=I(`dynCall_viiijj`,8),ui=r.dynCall_viiji=I(`dynCall_viiji`,6),di=r.dynCall_vijiji=I(`dynCall_vijiji`,8),fi=r.dynCall_vijijii=I(`dynCall_vijijii`,9);r.dynCall_jiji=I(`dynCall_jiji`,5),r.dynCall_viijii=I(`dynCall_viijii`,7);var pi=r.dynCall_jiiii=I(`dynCall_jiiii`,5);r.dynCall_iiiiij=I(`dynCall_iiiiij`,7),r.dynCall_iiiiijj=I(`dynCall_iiiiijj`,9),r.dynCall_iiiiiijj=I(`dynCall_iiiiiijj`,10);function mi(e,t,n,r,i){var a=B();try{Z(e)(t,n,r,i)}catch(e){if(z(a),!(e instanceof N))throw e;$(1,0)}}function hi(e,t){var n=B();try{Z(e)(t)}catch(e){if(z(n),!(e instanceof N))throw e;$(1,0)}}function gi(e,t){var n=B();try{return Z(e)(t)}catch(e){if(z(n),!(e instanceof N))throw e;$(1,0)}}function _i(e,t,n,r){var i=B();try{Z(e)(t,n,r)}catch(e){if(z(i),!(e instanceof N))throw e;$(1,0)}}function vi(e,t,n){var r=B();try{Z(e)(t,n)}catch(e){if(z(r),!(e instanceof N))throw e;$(1,0)}}function yi(e,t,n,r,i){var a=B();try{return Z(e)(t,n,r,i)}catch(e){if(z(a),!(e instanceof N))throw e;$(1,0)}}function bi(e,t,n,r,i,a){var o=B();try{Z(e)(t,n,r,i,a)}catch(e){if(z(o),!(e instanceof N))throw e;$(1,0)}}function xi(e,t,n){var r=B();try{return Z(e)(t,n)}catch(e){if(z(r),!(e instanceof N))throw e;$(1,0)}}function Si(e,t,n,r){var i=B();try{return Z(e)(t,n,r)}catch(e){if(z(i),!(e instanceof N))throw e;$(1,0)}}function Ci(e){var t=B();try{return Z(e)()}catch(e){if(z(t),!(e instanceof N))throw e;$(1,0)}}function wi(e,t,n,r,i,a,o,s){var c=B();try{return Z(e)(t,n,r,i,a,o,s)}catch(e){if(z(c),!(e instanceof N))throw e;$(1,0)}}function Ti(e){var t=B();try{Z(e)()}catch(e){if(z(t),!(e instanceof N))throw e;$(1,0)}}function Ei(e,t,n,r,i,a,o){var s=B();try{Z(e)(t,n,r,i,a,o)}catch(e){if(z(s),!(e instanceof N))throw e;$(1,0)}}function Di(e,t,n,r,i,a){var o=B();try{return Z(e)(t,n,r,i,a)}catch(e){if(z(o),!(e instanceof N))throw e;$(1,0)}}function Oi(e,t,n,r,i,a,o){var s=B();try{return Z(e)(t,n,r,i,a,o)}catch(e){if(z(s),!(e instanceof N))throw e;$(1,0)}}function ki(e,t,n,r,i,a,o,s){var c=B();try{Z(e)(t,n,r,i,a,o,s)}catch(e){if(z(c),!(e instanceof N))throw e;$(1,0)}}function Ai(e,t,n,r,i,a,o,s,c,l){var u=B();try{Z(e)(t,n,r,i,a,o,s,c,l)}catch(e){if(z(u),!(e instanceof N))throw e;$(1,0)}}function ji(e,t,n,r,i,a,o,s,c){var l=B();try{Z(e)(t,n,r,i,a,o,s,c)}catch(e){if(z(l),!(e instanceof N))throw e;$(1,0)}}function Mi(e,t,n,r,i,a,o,s,c,l,u){var d=B();try{Z(e)(t,n,r,i,a,o,s,c,l,u)}catch(e){if(z(d),!(e instanceof N))throw e;$(1,0)}}function Ni(e,t,n,r,i,a,o,s,c,l){var u=B();try{return Z(e)(t,n,r,i,a,o,s,c,l)}catch(e){if(z(u),!(e instanceof N))throw e;$(1,0)}}function Pi(e,t,n,r,i,a,o,s,c,l,u){var d=B();try{return Z(e)(t,n,r,i,a,o,s,c,l,u)}catch(e){if(z(d),!(e instanceof N))throw e;$(1,0)}}function Fi(e,t,n,r,i,a,o,s,c){var l=B();try{return Z(e)(t,n,r,i,a,o,s,c)}catch(e){if(z(l),!(e instanceof N))throw e;$(1,0)}}function Ii(e,t,n,r,i,a,o,s,c,l,u,d){var f=B();try{return Z(e)(t,n,r,i,a,o,s,c,l,u,d)}catch(e){if(z(f),!(e instanceof N))throw e;$(1,0)}}function Li(e,t,n,r,i,a,o,s,c,l,u,d,f){var p=B();try{return Z(e)(t,n,r,i,a,o,s,c,l,u,d,f)}catch(e){if(z(p),!(e instanceof N))throw e;$(1,0)}}function Ri(e,t,n,r){var i=B();try{return Z(e)(t,n,r)}catch(e){if(z(i),!(e instanceof N))throw e;$(1,0)}}function zi(e,t,n,r){var i=B();try{return Z(e)(t,n,r)}catch(e){if(z(i),!(e instanceof N))throw e;$(1,0)}}function Bi(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){var g=B();try{Z(e)(t,n,r,i,a,o,s,c,l,u,d,f,p,m,h)}catch(e){if(z(g),!(e instanceof N))throw e;$(1,0)}}function Vi(e,t,n,r,i){var a=B();try{return Vr(e,t,n,r,i)}catch(e){if(z(a),!(e instanceof N))throw e;$(1,0)}}function Hi(e){var t=B();try{return Hr(e)}catch(e){if(z(t),!(e instanceof N))throw e;$(1,0)}}function Ui(e,t,n,r){var i=B();try{return Ur(e,t,n,r)}catch(e){if(z(i),!(e instanceof N))throw e;$(1,0)}}function Wi(e,t,n,r,i,a){var o=B();try{return Gr(e,t,n,r,i,a)}catch(e){if(z(o),!(e instanceof N))throw e;$(1,0)}}function Gi(e,t,n){var r=B();try{return qr(e,t,n)}catch(e){if(z(r),!(e instanceof N))throw e;$(1,0)}}function Ki(e,t,n,r){var i=B();try{Kr(e,t,n,r)}catch(e){if(z(i),!(e instanceof N))throw e;$(1,0)}}function qi(e,t,n,r,i,a,o,s,c,l,u){var d=B();try{Jr(e,t,n,r,i,a,o,s,c,l,u)}catch(e){if(z(d),!(e instanceof N))throw e;$(1,0)}}function Ji(e,t,n,r,i,a,o,s,c,l,u){var d=B();try{Yr(e,t,n,r,i,a,o,s,c,l,u)}catch(e){if(z(d),!(e instanceof N))throw e;$(1,0)}}function Yi(e,t){var n=B();try{return Xr(e,t)}catch(e){if(z(n),!(e instanceof N))throw e;$(1,0)}}function Xi(e,t,n,r,i,a,o){var s=B();try{ii(e,t,n,r,i,a,o)}catch(e){if(z(s),!(e instanceof N))throw e;$(1,0)}}function Zi(e,t,n,r,i,a,o){var s=B();try{return Zr(e,t,n,r,i,a,o)}catch(e){if(z(s),!(e instanceof N))throw e;$(1,0)}}function Qi(e,t,n,r,i,a,o,s,c,l){var u=B();try{Qr(e,t,n,r,i,a,o,s,c,l)}catch(e){if(z(u),!(e instanceof N))throw e;$(1,0)}}function $i(e,t,n,r,i){var a=B();try{$r(e,t,n,r,i)}catch(e){if(z(a),!(e instanceof N))throw e;$(1,0)}}function ea(e,t,n,r,i,a,o){var s=B();try{ei(e,t,n,r,i,a,o)}catch(e){if(z(s),!(e instanceof N))throw e;$(1,0)}}function ta(e,t,n,r,i,a,o,s){var c=B();try{ti(e,t,n,r,i,a,o,s)}catch(e){if(z(c),!(e instanceof N))throw e;$(1,0)}}function na(e,t,n,r,i){var a=B();try{return ni(e,t,n,r,i)}catch(e){if(z(a),!(e instanceof N))throw e;$(1,0)}}function ra(e,t,n,r,i,a){var o=B();try{return ri(e,t,n,r,i,a)}catch(e){if(z(o),!(e instanceof N))throw e;$(1,0)}}function ia(e,t,n){var r=B();try{return ai(e,t,n)}catch(e){if(z(r),!(e instanceof N))throw e;$(1,0)}}function aa(e,t,n,r,i,a){var o=B();try{return oi(e,t,n,r,i,a)}catch(e){if(z(o),!(e instanceof N))throw e;$(1,0)}}function oa(e,t,n,r,i,a){var o=B();try{Wr(e,t,n,r,i,a)}catch(e){if(z(o),!(e instanceof N))throw e;$(1,0)}}function sa(e,t,n,r,i,a){var o=B();try{si(e,t,n,r,i,a)}catch(e){if(z(o),!(e instanceof N))throw e;$(1,0)}}function ca(e,t,n,r,i,a,o,s,c,l,u,d,f){var p=B();try{ci(e,t,n,r,i,a,o,s,c,l,u,d,f)}catch(e){if(z(p),!(e instanceof N))throw e;$(1,0)}}function la(e,t,n,r,i,a,o,s){var c=B();try{li(e,t,n,r,i,a,o,s)}catch(e){if(z(c),!(e instanceof N))throw e;$(1,0)}}function ua(e,t,n,r,i,a){var o=B();try{ui(e,t,n,r,i,a)}catch(e){if(z(o),!(e instanceof N))throw e;$(1,0)}}function da(e,t,n,r,i,a,o,s){var c=B();try{di(e,t,n,r,i,a,o,s)}catch(e){if(z(c),!(e instanceof N))throw e;$(1,0)}}function fa(e,t,n,r,i,a,o,s,c){var l=B();try{fi(e,t,n,r,i,a,o,s,c)}catch(e){if(z(l),!(e instanceof N))throw e;$(1,0)}}function pa(e,t,n,r,i){var a=B();try{return pi(e,t,n,r,i)}catch(e){if(z(a),!(e instanceof N))throw e;$(1,0)}}r.UTF8ToString=H,r.lengthBytesUTF8=ft,r.stringToNewUTF8=_r,(/* @__PURE__ */ `writeI53ToI64.writeI53ToI64Clamped.writeI53ToI64Signaling.writeI53ToU64Clamped.writeI53ToU64Signaling.readI53FromI64.readI53FromU64.getTempRet0.exitJS.readSockaddr.readEmAsmArgs.listenOnce.autoResumeAudioContext.dynCallLegacy.getDynCaller.dynCall.handleException.keepRuntimeAlive.runtimeKeepalivePush.runtimeKeepalivePop.callUserCallback.maybeExit.asmjsMangle.HandleAllocator.getNativeTypeSize.addOnPreRun.addOnInit.addOnPostCtor.addOnPreMain.addOnExit.addOnPostRun.STACK_SIZE.STACK_ALIGN.POINTER_SIZE.ASSERTIONS.getCFunc.ccall.cwrap.uleb128Encode.sigToWasmTypes.generateFuncType.convertJsFunctionToWasm.getEmptyTableSlot.updateTableMap.getFunctionAddress.addFunction.removeFunction.intArrayToString.AsciiToString.UTF16ToString.stringToUTF16.lengthBytesUTF16.UTF32ToString.stringToUTF32.lengthBytesUTF32.stringToUTF8OnStack.writeArrayToMemory.registerKeyEventCallback.maybeCStringToJsString.findEventTarget.getBoundingClientRect.fillMouseEventData.registerMouseEventCallback.registerWheelEventCallback.registerUiEventCallback.registerFocusEventCallback.fillDeviceOrientationEventData.registerDeviceOrientationEventCallback.fillDeviceMotionEventData.registerDeviceMotionEventCallback.screenOrientation.fillOrientationChangeEventData.registerOrientationChangeEventCallback.fillFullscreenChangeEventData.registerFullscreenChangeEventCallback.JSEvents_requestFullscreen.JSEvents_resizeCanvasForFullscreen.registerRestoreOldStyle.hideEverythingExceptGivenElement.restoreHiddenElements.setLetterbox.softFullscreenResizeWebGLRenderTarget.doRequestFullscreen.fillPointerlockChangeEventData.registerPointerlockChangeEventCallback.registerPointerlockErrorEventCallback.requestPointerLock.fillVisibilityChangeEventData.registerVisibilityChangeEventCallback.registerTouchEventCallback.fillGamepadEventData.registerGamepadEventCallback.registerBeforeUnloadEventCallback.fillBatteryEventData.battery.registerBatteryEventCallback.setCanvasElementSize.getCanvasElementSize.convertPCtoSourceLocation.wasiRightsToMuslOFlags.wasiOFlagsToMuslOFlags.safeSetTimeout.setImmediateWrapped.safeRequestAnimationFrame.clearImmediateWrapped.registerPostMainLoop.registerPreMainLoop.getPromise.makePromise.idsToPromises.makePromiseCallback.Browser_asyncPrepareDataCounter.isLeapYear.ydayFromDate.arraySum.addDays.getSocketFromFD.getSocketAddress.FS_unlink.FS_mkdirTree._setNetworkCallback.heapObjectForWebGLType.toTypedArrayIndex.webgl_enable_ANGLE_instanced_arrays.webgl_enable_OES_vertex_array_object.webgl_enable_WEBGL_draw_buffers.webgl_enable_WEBGL_multi_draw.webgl_enable_EXT_polygon_offset_clamp.webgl_enable_EXT_clip_control.webgl_enable_WEBGL_polygon_mode.emscriptenWebGLGet.computeUnpackAlignedImageSize.colorChannelsInGlTextureFormat.emscriptenWebGLGetTexPixelData.emscriptenWebGLGetUniform.webglGetUniformLocation.webglPrepareUniformLocationsBeforeFirstUse.webglGetLeftBracePos.emscriptenWebGLGetVertexAttrib.__glGetActiveAttribOrUniform.writeGLArray.registerWebGlEventCallback.runAndAbortIfError.ALLOC_NORMAL.ALLOC_STACK.allocate.writeStringToMemory.writeAsciiToMemory.setErrNo.demangle.stackTrace.FKN_setsockopt.FKN_resolve`.split(`.`)).forEach(fe),(/* @__PURE__ */ `run.addRunDependency.removeRunDependency.out.err.callMain.abort.wasmMemory.wasmExports.writeStackCookie.checkStackCookie.convertI32PairToI53.convertI32PairToI53Checked.convertU32PairToI53.stackSave.stackRestore.stackAlloc.setTempRet0.ptrToString.zeroMemory.getHeapMax.growMemory.ENV.ERRNO_CODES.strError.inetPton4.inetNtop4.inetPton6.inetNtop6.writeSockaddr.DNS.Protocols.Sockets.timers.warnOnce.emscriptenLog.readEmAsmArgsArray.jstoi_q.jstoi_s.getExecutableName.asyncLoad.alignMemory.mmapAlloc.wasmTable.noExitRuntime.freeTableIndexes.functionsInTableMap.reallyNegative.unSign.strLen.reSign.formatString.setValue.getValue.PATH.PATH_FS.UTF8Decoder.UTF8ArrayToString.stringToUTF8Array.stringToUTF8.intArrayFromString.stringToAscii.UTF16Decoder.JSEvents.specialHTMLTargets.findCanvasEventTarget.currentFullscreenStrategy.restoreOldWindowedStyle.jsStackTrace.getCallstack.UNWIND_CACHE.ExitStatus.getEnvStrings.checkWasiClock.doReadv.doWritev.initRandomFill.randomFill.emSetImmediate.emClearImmediate_deps.emClearImmediate.promiseMap.uncaughtExceptionCount.exceptionLast.exceptionCaught.ExceptionInfo.findMatchingCatch.getExceptionMessageCommon.incrementExceptionRefcount.decrementExceptionRefcount.getExceptionMessage.Browser.getPreloadedImageData__data.wget.MONTH_DAYS_REGULAR.MONTH_DAYS_LEAP.MONTH_DAYS_REGULAR_CUMULATIVE.MONTH_DAYS_LEAP_CUMULATIVE.SYSCALLS.preloadPlugins.FS_createPreloadedFile.FS_modeStringToFlags.FS_getMode.FS_stdin_getChar_buffer.FS_stdin_getChar.FS_createPath.FS_createDevice.FS_readFile.FS.FS_createDataFile.FS_createLazyFile.MEMFS.TTY.PIPEFS.SOCKFS.tempFixedLengthArray.miniTempWebGLFloatBuffers.miniTempWebGLIntBuffers.GL.AL.GLUT.EGL.GLEW.IDBStore.SDL.SDL_gfx.allocateUTF8.allocateUTF8OnStack.print.printErr.FKN.FKN_socket.FKN_connect.FKN_bind.FKN_listen.FKN_accept.FKN_recv.FKN_recvfrom.FKN_send.FKN_sendto.FKN_close.FKN_getsockname.FKN_getpeername.FKN_getsockopt.FKN_fcntl.FKN_poll`.split(`.`)).forEach(pe);var ma;function ha(){jr(),M()}function ga(){if(_e>0){ve=ga;return}if(ha(),_e>0){ve=ga;return}function e(){w(!ma),ma=!0,r.calledRun=!0,!C&&(he(),i(r),w(!r._main,`compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]`),ge())}e(),ae()}ga(),n=o;for(let e of Object.keys(r))e in t||Object.defineProperty(t,e,{configurable:!0,get(){F(`Access to module property ('${e}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}});return n})})();(()=>{var t=e;e=function(e){if(new.target)throw Error("Module() should not be called with `new Module()`");return t(e)}})();var t=e;export{t as default};
|
|
6
|
+
`:``)+Dn(e)),e&1?e&4?console.error(t):e&2?console.warn(t):e&512?console.info(t):e&256?console.debug(t):console.log(t):e&6?x(t):te(t)},kn=(e,t,n)=>{On(e,Pe(Tn(t,n)))},An=()=>2147483648,jn=e=>{var t=S.buffer,n=(e-t.byteLength+65535)/65536|0;try{return S.grow(n),me(),1}catch(n){x(`growMemory: Attempted to grow heap from ${t.byteLength} bytes to ${e} bytes, but got error: ${n}`)}},Mn=e=>{var t=E.length;e>>>=0,w(e>t);var n=An();if(e>n)return x(`Cannot enlarge memory, requested ${e} bytes, but the limit is ${n} bytes!`),!1;for(var r=1;r<=4;r*=2){var i=t*(1+.2/r);i=Math.min(i,e+100663296);var a=Math.min(n,vt(Math.max(e,i),65536));if(jn(a))return!0}return x(`Failed to grow the heap from ${t} bytes to ${a} bytes, not enough memory!`),!1},Nn={},Pn=()=>p||`./this.program`,Fn=()=>{if(!Fn.strings){var e={USER:`web_user`,LOGNAME:`web_user`,PATH:`/`,PWD:`/`,HOME:`/home/web_user`,LANG:(typeof navigator==`object`&&navigator.languages&&navigator.languages[0]||`C`).replace(`-`,`_`)+`.UTF-8`,_:Pn()};for(var t in Nn)Nn[t]===void 0?delete e[t]:e[t]=Nn[t];var n=[];for(var t in e)n.push(`${t}=${e[t]}`);Fn.strings=n}return Fn.strings},In=(e,t)=>{for(var n=0;n<e.length;++n)w(e.charCodeAt(n)===(e.charCodeAt(n)&255)),T[t++]=e.charCodeAt(n);T[t]=0},Ln=(e,t)=>{var n=0;return Fn().forEach((r,i)=>{var a=t+n;A[e+i*4>>2]=a,In(r,a),n+=r.length+1}),0},Rn=(e,t)=>{var n=Fn();A[e>>2]=n.length;var r=0;return n.forEach(e=>r+=e.length+1),A[t>>2]=r,0};function zn(e){return G.closeFd(e),0}function Bn(e){if(G.fds.has(e))return zn(e);try{let t=Y.getStreamFromFD(e);return J.close(t),0}catch(e){if(J===void 0||e.name!==`ErrnoError`)throw e;return e.errno}}var Vn=(e,t,n,r)=>{for(var i=0,a=0;a<n;a++){var o=A[t>>2],s=A[t+4>>2];t+=8;var c=J.read(e,T,o,s,r);if(c<0)return-1;if(i+=c,c<s)break;r!==void 0&&(r+=c)}return i};function Hn(e,t,n,r,i,a){var o=kt(r,i);try{if(isNaN(o))return 61;var s=Vn(Y.getStreamFromFD(e),t,n,o);return A[a>>2]=s,0}catch(e){if(J===void 0||e.name!==`ErrnoError`)throw e;return e.errno}}var Un=(e,t,n,r)=>{for(var i=0,a=0;a<n;a++){var o=A[t>>2],s=A[t+4>>2];t+=8;var c=J.write(e,T,o,s,r);if(c<0)return-1;if(i+=c,c<s)break;r!==void 0&&(r+=c)}return i};function Wn(e,t,n,r,i,a){var o=kt(r,i);try{if(isNaN(o))return 61;var s=Un(Y.getStreamFromFD(e),t,n,o);return A[a>>2]=s,0}catch(e){if(J===void 0||e.name!==`ErrnoError`)throw e;return e.errno}}function Gn(e,t,n,r){try{var i=Vn(Y.getStreamFromFD(e),t,n);return A[r>>2]=i,0}catch(e){if(J===void 0||e.name!==`ErrnoError`)throw e;return e.errno}}function Kn(e,t,n,r,i){var a=kt(t,n);try{if(isNaN(a))return 61;var o=Y.getStreamFromFD(e);return J.llseek(o,a,r),R=[o.position>>>0,(L=o.position,+Math.abs(L)>=1?L>0?Math.floor(L/4294967296)>>>0:~~+Math.ceil((L-+(~~L>>>0))/4294967296)>>>0:0)],k[i>>2]=R[0],k[i+4>>2]=R[1],o.getdents&&a===0&&r===0&&(o.getdents=null),0}catch(e){if(J===void 0||e.name!==`ErrnoError`)throw e;return e.errno}}function qn(e,t,n,r){try{var i=Un(Y.getStreamFromFD(e),t,n);return A[r>>2]=i,0}catch(e){if(J===void 0||e.name!==`ErrnoError`)throw e;return e.errno}}var Jn=e=>{for(var t=e.split(`.`),n=0;n<4;n++){var r=Number(t[n]);if(isNaN(r))return null;t[n]=r}return(t[0]|t[1]<<8|t[2]<<16|t[3]<<24)>>>0},Yn=e=>parseInt(e),Xn=e=>{var t,n,r,i,a=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i,o=[];if(!a.test(e))return null;if(e===`::`)return[0,0,0,0,0,0,0,0];for(e=e.startsWith(`::`)?e.replace(`::`,`Z:`):e.replace(`::`,`:Z:`),e.indexOf(`.`)>0?(e=e.replace(/* @__PURE__ */ RegExp(`[.]`,`g`),`:`),t=e.split(`:`),t[t.length-4]=Yn(t[t.length-4])+Yn(t[t.length-3])*256,t[t.length-3]=Yn(t[t.length-2])+Yn(t[t.length-1])*256,t=t.slice(0,t.length-2)):t=e.split(`:`),r=0,i=0,n=0;n<t.length;n++)if(typeof t[n]==`string`){if(t[n]===`Z`){for(i=0;i<8-t.length+1;i++)o[n+i]=0;r=i-1}else o[n+r]=Er(parseInt(t[n],16))}else o[n+r]=t[n];return[o[1]<<16|o[0],o[3]<<16|o[2],o[5]<<16|o[4],o[7]<<16|o[6]]},Zn={address_map:{id:1,addrs:{},names:{}},lookup_name(e){var t=Jn(e);if(t!==null||(t=Xn(e),t!==null))return e;var n;if(Zn.address_map.addrs[e])n=Zn.address_map.addrs[e];else{var r=Zn.address_map.id++;w(r<65535,`exceeded max address mappings of 65535`),n=`172.29.`+(r&255)+`.`+(r&65280),Zn.address_map.names[n]=e,Zn.address_map.addrs[e]=n}return n},lookup_addr(e){return Zn.address_map.names[e]?Zn.address_map.names[e]:null}},Qn=e=>(e&255)+`.`+(e>>8&255)+`.`+(e>>16&255)+`.`+(e>>24&255),$n=e=>{var t=``,n=0,r=0,i=0,a=0,o=0,s=0,c=[e[0]&65535,e[0]>>16,e[1]&65535,e[1]>>16,e[2]&65535,e[2]>>16,e[3]&65535,e[3]>>16],l=!0,u=``;for(s=0;s<5;s++)if(c[s]!==0){l=!1;break}if(l){if(u=Qn(c[6]|c[7]<<16),c[5]===-1)return t=`::ffff:`,t+=u,t;if(c[5]===0)return t=`::`,u===`0.0.0.0`&&(u=``),u===`0.0.0.1`&&(u=`1`),t+=u,t}for(n=0;n<8;n++)c[n]===0&&(n-i>1&&(o=0),i=n,o++),o>r&&(r=o,a=n-r+1);for(n=0;n<8;n++){if(r>1&&c[n]===0&&n>=a&&n<a+r){n===a&&(t+=`:`,a===0&&(t+=`:`));continue}t+=Number(Tr(c[n]&65535)).toString(16),t+=n<7?`:`:``}return t},er=(e,t,n,r,i)=>{switch(t){case 2:n=Jn(n),_t(e,16),i&&(k[i>>2]=16),D[e>>1]=t,k[e+4>>2]=n,D[e+2>>1]=Er(r);break;case 10:n=Xn(n),_t(e,28),i&&(k[i>>2]=28),k[e>>2]=t,k[e+8>>2]=n[0],k[e+12>>2]=n[1],k[e+16>>2]=n[2],k[e+20>>2]=n[3],D[e+2>>1]=Er(r);break;default:return 5}return 0},tr=(e,t,n,r)=>{var i=0,a=0,o=0,s=0,c=0,l=0,u;function d(e,t,n,r,i,a){var o,s=e===10?28:16,c,l;return i=e===10?$n(i):Qn(i),o=Or(s),l=er(o,e,i,a),w(!l),c=Or(32),k[c+4>>2]=e,k[c+8>>2]=t,k[c+12>>2]=n,A[c+24>>2]=r,A[c+20>>2]=o,e===10?k[c+16>>2]=28:k[c+16>>2]=16,k[c+28>>2]=0,c}if(n&&(o=k[n>>2],s=k[n+4>>2],c=k[n+8>>2],l=k[n+12>>2]),c&&!l&&(l=c===2?17:6),!c&&l&&(c=l===17?2:1),l===0&&(l=6),c===0&&(c=1),!e&&!t)return-2;if(o&-1088||n!==0&&k[n>>2]&2&&!e)return-1;if(o&32)return-2;if(c!==0&&c!==1&&c!==2)return-7;if(s!==0&&s!==2&&s!==10)return-6;if(t&&(t=H(t),a=parseInt(t,10),isNaN(a)))return o&1024?-2:-8;if(!e)return s===0&&(s=2),o&1||(i=s===2?Cr(2130706433):[0,0,0,Cr(1)]),u=d(s,c,l,null,i,a),A[r>>2]=u,0;if(e=H(e),i=Jn(e),i!==null){if(s===0||s===2)s=2;else if(s===10&&o&8)i=[0,0,Cr(65535),i],s=10;else return-2}else if(i=Xn(e),i!==null){if(s===0||s===10)s=10;else return-2}return i==null?o&4?-2:(e=Zn.lookup_name(e),i=Jn(e),s===0?s=2:s===10&&(i=[0,0,Cr(65535),i]),u=d(s,c,l,null,i,a),A[r>>2]=u,0):(u=d(s,c,l,e,i,a),A[r>>2]=u,0)};function nr(e,t,n){if(!G.storage||!G.storage.check){r._lt_disk_complete_status(t,n,0,0),G.scheduleTick();return}Promise.resolve(G.storage.check(e)).then(e=>{r._lt_disk_complete_status(t,n,e|0,0),G.scheduleTick()}).catch(e=>{r._lt_disk_complete_status(t,n,0,e.errno||G.err.IO),G.scheduleTick()})}var rr=function(e,t,n,i){let a=e=>{r._lt_disk_complete_delete(t,n,e||0),G.scheduleTick()};if(!G.storage||!G.storage.deleteFiles){a(0);return}Promise.resolve(G.storage.deleteFiles(e,i)).then(()=>a(0),e=>a(e.errno||G.err.IO))},ir=function(e,t,n,i){let a=H(i),o=(e,i)=>{let o=_r(a);r._lt_disk_complete_move(t,n,o,i,e||0),Dr(o),G.scheduleTick()};if(!G.storage||!G.storage.move){o(G.err.NOSYS,1);return}Promise.resolve(G.storage.move(e,a)).then(()=>o(0,0),e=>o(e.errno||G.err.IO,1))};function ar(e,t,n,r){if(!G.storage)return;let i=H(t),a=H(n,r),o=[];try{o=JSON.parse(a)}catch{}Promise.resolve(G.storage.onNewStorage(e,i,o)).catch(e=>console.error(`[fkn] onNewStorage error`,e))}function or(e,t,n,i,a,o,s){G.stats.diskRead++;let c=(a>>>0)+o*4294967296;if(!G.storage){let e=Or(s);E.fill(0,e,e+s),r._lt_disk_complete_read(t,n,e,s,0);return}let l=e=>{let i=Or(e.length);E.set(e,i),r._lt_disk_complete_read(t,n,i,e.length,0)},u=e=>{console.error(`[fkn] disk read error`,e),r._lt_disk_complete_read(t,n,0,0,e.errno||G.err.IO),G.scheduleTick()},d;try{d=G.storage.read(e,i,c,s)}catch(e){u(e);return}d&&typeof d.then==`function`?d.then(l,u).then(()=>G.scheduleTick()):l(d)}var sr=function(e,t,n){let i=()=>{r._lt_disk_complete_simple(t,n),G.scheduleTick()};if(!G.storage||!G.storage.release){i();return}Promise.resolve(G.storage.release(e)).then(i,i)},cr=function(e){G.storage&&Promise.resolve(G.storage.onRemoveStorage(e)).catch(e=>console.error(`[fkn] onRemoveStorage error`,e))},lr=function(e,t,n,i,a){let o=H(a),s=e=>{let i=_r(o);r._lt_disk_complete_rename(t,n,i,e||0),Dr(i),G.scheduleTick()};if(!G.storage||!G.storage.rename){s(G.err.NOSYS);return}Promise.resolve(G.storage.rename(e,i,o)).then(()=>s(0),e=>s(e.errno||G.err.IO))},ur=function(e,t,n){let i=()=>{r._lt_disk_complete_simple(t,n),G.scheduleTick()};if(!G.storage||!G.storage.stop){i();return}Promise.resolve(G.storage.stop(e)).then(i,i)};function dr(e,t,n,i,a,o,s,c){G.stats.diskWrite++;let l=(a>>>0)+o*4294967296;if(!G.storage){r._lt_disk_complete_write(t,n,0);return}let u=E.slice(s,s+c),d=e=>{r._lt_disk_complete_write(t,n,e?.errno||G.err.IO),G.scheduleTick()},f;try{f=G.storage.write(e,i,l,u)}catch(e){d(e);return}f&&typeof f.then==`function`?f.then(()=>{r._lt_disk_complete_write(t,n,0),G.scheduleTick()},d):r._lt_disk_complete_write(t,n,0)}var fr=function(e,t){G.initialized||G.init(),G.stats.dnsReq++;let n=H(e),i=t?6:4,a=e=>{G.stats.dnsDone++;let t=_r(n),i=_r(e||``);r._lt_dns_complete(t,i),Dr(t),Dr(i),G.scheduleTick()},o=G.host&&G.host.dnsLookup;if(o){Promise.resolve(o(n,{family:i})).then(e=>{if(!e)return a(``);a((Array.isArray(e)?e:[e]).map(e=>e.address).join(`,`))}).catch(()=>a(``));return}let s=t?`AAAA`:`A`;fetch(`https://1.1.1.1/dns-query?name=`+encodeURIComponent(n)+`&type=`+s,{headers:{Accept:`application/dns-json`}}).then(e=>e.ok?e.json():null).then(e=>{if(!e)return a(``);let n=t?28:1,r=(e.Answer||[]).filter(e=>e.type===n).map(e=>e.data);a(r.join(`,`))}).catch(()=>a(``))},pr=e=>e;function mr(e,t){try{return lt(E.subarray(e,e+t)),0}catch(e){if(J===void 0||e.name!==`ErrnoError`)throw e;return e.errno}}var hr=[],gr,Z=e=>{var t=hr[e];return t||(e>=hr.length&&(hr.length=e+1),hr[e]=t=gr.get(e)),w(gr.get(e)==t,`JavaScript-side Wasm function table mirror is out of date!`),t},_r=e=>{var t=ft(e)+1,n=Or(t);return n&&jt(e,n,t),n};r.incrementExceptionRefcount=e=>Lr(e),r.decrementExceptionRefcount=e=>Ir(e);var vr=e=>Pr(e),yr=e=>{var t=B(),n=vr(4),r=vr(4);Rr(e,n,r);var i=A[n>>2],a=A[r>>2],o=H(i);Dr(i);var s;return a&&(s=H(a),Dr(a)),z(t),[o,s]},br=e=>yr(e);r.getExceptionMessage=br,G.fds=/* @__PURE__ */ new Map,G.freeFds=[],J.createPreloadedFile=wt,J.staticInit();function xr(){P(`ENVIRONMENT`),P(`GL_MAX_TEXTURE_IMAGE_UNITS`),P(`SDL_canPlayWithWebAudio`),P(`SDL_numSimultaneouslyQueuedBuffers`),P(`INITIAL_MEMORY`),P(`wasmMemory`),P(`arguments`),P(`buffer`),P(`canvas`),P(`doNotCaptureKeyboard`),P(`dynamicLibraries`),P(`elementPointerLock`),P(`extraStackTrace`),P(`forcedAspectRatio`),P(`instantiateWasm`),P(`keyboardListeningElement`),P(`freePreloadedMediaOnUse`),P(`loadSplitModule`),P(`locateFile`),P(`logReadFiles`),P(`mainScriptUrlOrBlob`),P(`mem`),P(`monitorRunDependencies`),P(`noExitRuntime`),P(`noInitialRun`),P(`onAbort`),P(`onCustomMessage`),P(`onExit`),P(`onFree`),P(`onFullScreen`),P(`onMalloc`),P(`onRealloc`),P(`onRuntimeInitialized`),P(`postMainLoop`),P(`postRun`),P(`preInit`),P(`preMainLoop`),P(`preRun`),P(`preinitializedWebGLContext`),P(`preloadPlugins`),P(`setStatus`),P(`statusMessage`),P(`stderr`),P(`stdin`),P(`stdout`),P(`thisProgram`),P(`wasm`),P(`websocket`),P(`fetchSettings`)}var Sr={__assert_fail:Fe,__cxa_begin_catch:Le,__cxa_current_primary_exception:Re,__cxa_end_catch:ze,__cxa_find_matching_catch_2:We,__cxa_find_matching_catch_3:Ge,__cxa_find_matching_catch_4:Ke,__cxa_find_matching_catch_5:qe,__cxa_rethrow:Je,__cxa_rethrow_primary_exception:Ye,__cxa_throw:Xe,__cxa_uncaught_exceptions:Ze,__resumeException:Ve,__syscall__newselect:$e,__syscall_accept4:tt,__syscall_bind:rt,__syscall_connect:at,__syscall_fcntl64:st,__syscall_fstat64:Ot,__syscall_ftruncate64:At,__syscall_getcwd:Mt,__syscall_getpeername:Pt,__syscall_getsockname:It,__syscall_getsockopt:Rt,__syscall_ioctl:zt,__syscall_listen:Vt,__syscall_lstat64:Ht,__syscall_mkdirat:Ut,__syscall_newfstatat:Wt,__syscall_openat:Kt,__syscall_pipe:qt,__syscall_poll:Yt,__syscall_recvfrom:Qt,__syscall_renameat:$t,__syscall_rmdir:en,__syscall_sendmsg:rn,__syscall_sendto:an,__syscall_socket:sn,__syscall_stat64:cn,__syscall_unlinkat:ln,_abort_js:un,_emscripten_throw_longjmp:dn,_tzset_js:fn,clock_time_get:_n,emscripten_date_now:mn,emscripten_err:vn,emscripten_log:kn,emscripten_resize_heap:Mn,environ_get:Ln,environ_sizes_get:Rn,fd_close:Bn,fd_pread:Hn,fd_pwrite:Wn,fd_read:Gn,fd_seek:Kn,fd_write:qn,getaddrinfo:tr,invoke_diii:zi,invoke_fiii:Ri,invoke_i:Ci,invoke_ii:gi,invoke_iii:xi,invoke_iiii:Si,invoke_iiiii:yi,invoke_iiiiii:Di,invoke_iiiiiii:Oi,invoke_iiiiiiii:wi,invoke_iiiiiiiii:Fi,invoke_iiiiiiiiii:Ni,invoke_iiiiiiiiiii:Pi,invoke_iiiiiiiiiiii:Ii,invoke_iiiiiiiiiiiii:Li,invoke_iiiij:Wi,invoke_iiijii:Zi,invoke_iij:Ui,invoke_iiji:na,invoke_iijii:aa,invoke_ij:ia,invoke_j:Hi,invoke_ji:Yi,invoke_jii:Gi,invoke_jiiii:pa,invoke_jiiiii:ra,invoke_jiij:Vi,invoke_v:Ti,invoke_vi:hi,invoke_vii:vi,invoke_viii:_i,invoke_viiii:mi,invoke_viiiii:bi,invoke_viiiiii:Ei,invoke_viiiiiii:ki,invoke_viiiiiiii:ji,invoke_viiiiiiiii:Ai,invoke_viiiiiiiiii:Mi,invoke_viiiiiiiiiiiiiii:Bi,invoke_viiiij:ea,invoke_viiiijiii:Qi,invoke_viiiijiijii:ca,invoke_viiiji:Xi,invoke_viiijiiiii:qi,invoke_viiijj:la,invoke_viiji:ua,invoke_viijiiiiii:Ji,invoke_viijji:ta,invoke_vij:Ki,invoke_viji:$i,invoke_vijii:sa,invoke_vijiji:da,invoke_vijijii:fa,invoke_vijj:oa,js_disk_check:nr,js_disk_delete:rr,js_disk_move:ir,js_disk_new_storage:ar,js_disk_read:or,js_disk_release:sr,js_disk_remove_storage:cr,js_disk_rename:lr,js_disk_stop:ur,js_disk_write:dr,js_resolver_async:fr,llvm_eh_typeid_for:pr,random_get:mr},Q=await je(),Cr=I(`htonl`,1),wr=I(`strerror`,1),Tr=I(`ntohs`,1),Er=I(`htons`,1),Dr=r._free=I(`free`,1),Or=r._malloc=I(`malloc`,1);r._lt_dns_complete=I(`lt_dns_complete`,2),r._lt_set_log=I(`lt_set_log`,1),r._lt_set_utp_receive_buffer=I(`lt_set_utp_receive_buffer`,1),r._lt_set_dht=I(`lt_set_dht`,1),r._lt_session_set_rate_limits=I(`lt_session_set_rate_limits`,3),r._lt_set_listen_port=I(`lt_set_listen_port`,1),r._lt_session_create=I(`lt_session_create`,0),r._lt_session_destroy=I(`lt_session_destroy`,0),r._lt_diag_tick_count=I(`lt_diag_tick_count`,0),r._lt_diag_total_handlers=I(`lt_diag_total_handlers`,0),r._lt_diag_open_tcp=I(`lt_diag_open_tcp`,0),r._lt_diag_listen_full=I(`lt_diag_listen_full`,0),r._lt_diag_open_udp=I(`lt_diag_open_udp`,0),r._lt_diag_force_reopen=I(`lt_diag_force_reopen`,0),r._lt_diag_parse_interfaces=I(`lt_diag_parse_interfaces`,1),r._lt_session_tick=I(`lt_session_tick`,0),r._lt_session_next_timer_ms=I(`lt_session_next_timer_ms`,1),r._lt_session_pump_alerts=I(`lt_session_pump_alerts`,0),r._lt_alerts_size=I(`lt_alerts_size`,0),r._lt_alerts_data=I(`lt_alerts_data`,0),r._lt_alerts_clear=I(`lt_alerts_clear`,0),r._lt_session_add_magnet=I(`lt_session_add_magnet`,2),r._lt_session_add_torrent_file=I(`lt_session_add_torrent_file`,3),r._lt_session_remove_torrent=I(`lt_session_remove_torrent`,1),r._lt_session_remove_torrent_ex=I(`lt_session_remove_torrent_ex`,2),r._lt_torrent_pause=I(`lt_torrent_pause`,1),r._lt_torrent_resume=I(`lt_torrent_resume`,1),r._lt_torrent_force_recheck=I(`lt_torrent_force_recheck`,1),r._lt_torrent_save_resume_data=I(`lt_torrent_save_resume_data`,1),r._lt_session_add_torrent_with_resume=I(`lt_session_add_torrent_with_resume`,3),r._lt_torrent_post_status=I(`lt_torrent_post_status`,1),r._lt_torrent_status=I(`lt_torrent_status`,2),r._lt_torrent_post_peers=I(`lt_torrent_post_peers`,1),r._lt_torrent_post_trackers=I(`lt_torrent_post_trackers`,1),r._lt_torrent_infohash=I(`lt_torrent_infohash`,2),r._lt_torrent_infohash_v2=I(`lt_torrent_infohash_v2`,2),r._lt_torrent_set_sequential=I(`lt_torrent_set_sequential`,2),r._lt_torrent_set_flags=I(`lt_torrent_set_flags`,3),r._lt_torrent_force_reannounce=I(`lt_torrent_force_reannounce`,1),r._lt_torrent_queue_position=I(`lt_torrent_queue_position`,2),r._lt_torrent_set_upload_limit=I(`lt_torrent_set_upload_limit`,2),r._lt_torrent_set_download_limit=I(`lt_torrent_set_download_limit`,2),r._lt_torrent_read_piece=I(`lt_torrent_read_piece`,2),r._lt_torrent_set_piece_deadline=I(`lt_torrent_set_piece_deadline`,4),r._lt_torrent_clear_piece_deadlines=I(`lt_torrent_clear_piece_deadlines`,1),r._lt_torrent_reset_piece_deadline=I(`lt_torrent_reset_piece_deadline`,2),r._lt_torrent_prioritize_pieces=I(`lt_torrent_prioritize_pieces`,3),r._lt_torrent_prioritize_piece_list=I(`lt_torrent_prioritize_piece_list`,4),r._lt_torrent_prioritize_files=I(`lt_torrent_prioritize_files`,3),r._lt_torrent_cancel_piece_requests=I(`lt_torrent_cancel_piece_requests`,2),r._lt_torrent_set_file_priority=I(`lt_torrent_set_file_priority`,3),r._lt_disk_complete_read=I(`lt_disk_complete_read`,5),r._lt_disk_complete_write=I(`lt_disk_complete_write`,3),r._lt_disk_complete_simple=I(`lt_disk_complete_simple`,2),r._lt_disk_complete_status=I(`lt_disk_complete_status`,4),r._lt_disk_complete_move=I(`lt_disk_complete_move`,5),r._lt_disk_complete_delete=I(`lt_disk_complete_delete`,3),r._lt_disk_complete_rename=I(`lt_disk_complete_rename`,4);var kr=I(`fflush`,1),$=I(`setThrew`,2),Ar=I(`_emscripten_tempret_set`,1),jr=Q.emscripten_stack_init;Q.emscripten_stack_get_free,Q.emscripten_stack_get_base;var Mr=Q.emscripten_stack_get_end,Nr=Q._emscripten_stack_restore,Pr=Q._emscripten_stack_alloc,Fr=Q.emscripten_stack_get_current,Ir=I(`__cxa_decrement_exception_refcount`,1),Lr=I(`__cxa_increment_exception_refcount`,1),Rr=I(`__get_exception_message`,3),zr=I(`__cxa_can_catch`,3),Br=I(`__cxa_get_exception_ptr`,1),Vr=r.dynCall_jiij=I(`dynCall_jiij`,5),Hr=r.dynCall_j=I(`dynCall_j`,1),Ur=r.dynCall_iij=I(`dynCall_iij`,4),Wr=r.dynCall_vijj=I(`dynCall_vijj`,6),Gr=r.dynCall_iiiij=I(`dynCall_iiiij`,6),Kr=r.dynCall_vij=I(`dynCall_vij`,4),qr=r.dynCall_jii=I(`dynCall_jii`,3),Jr=r.dynCall_viiijiiiii=I(`dynCall_viiijiiiii`,11),Yr=r.dynCall_viijiiiiii=I(`dynCall_viijiiiiii`,11),Xr=r.dynCall_ji=I(`dynCall_ji`,2),Zr=r.dynCall_iiijii=I(`dynCall_iiijii`,7),Qr=r.dynCall_viiiijiii=I(`dynCall_viiiijiii`,10),$r=r.dynCall_viji=I(`dynCall_viji`,5),ei=r.dynCall_viiiij=I(`dynCall_viiiij`,7),ti=r.dynCall_viijji=I(`dynCall_viijji`,8),ni=r.dynCall_iiji=I(`dynCall_iiji`,5),ri=r.dynCall_jiiiii=I(`dynCall_jiiiii`,6),ii=r.dynCall_viiiji=I(`dynCall_viiiji`,7),ai=r.dynCall_ij=I(`dynCall_ij`,3),oi=r.dynCall_iijii=I(`dynCall_iijii`,6),si=r.dynCall_vijii=I(`dynCall_vijii`,6),ci=r.dynCall_viiiijiijii=I(`dynCall_viiiijiijii`,13),li=r.dynCall_viiijj=I(`dynCall_viiijj`,8),ui=r.dynCall_viiji=I(`dynCall_viiji`,6),di=r.dynCall_vijiji=I(`dynCall_vijiji`,8),fi=r.dynCall_vijijii=I(`dynCall_vijijii`,9);r.dynCall_jiji=I(`dynCall_jiji`,5),r.dynCall_viijii=I(`dynCall_viijii`,7);var pi=r.dynCall_jiiii=I(`dynCall_jiiii`,5);r.dynCall_iiiiij=I(`dynCall_iiiiij`,7),r.dynCall_iiiiijj=I(`dynCall_iiiiijj`,9),r.dynCall_iiiiiijj=I(`dynCall_iiiiiijj`,10);function mi(e,t,n,r,i){var a=B();try{Z(e)(t,n,r,i)}catch(e){if(z(a),!(e instanceof N))throw e;$(1,0)}}function hi(e,t){var n=B();try{Z(e)(t)}catch(e){if(z(n),!(e instanceof N))throw e;$(1,0)}}function gi(e,t){var n=B();try{return Z(e)(t)}catch(e){if(z(n),!(e instanceof N))throw e;$(1,0)}}function _i(e,t,n,r){var i=B();try{Z(e)(t,n,r)}catch(e){if(z(i),!(e instanceof N))throw e;$(1,0)}}function vi(e,t,n){var r=B();try{Z(e)(t,n)}catch(e){if(z(r),!(e instanceof N))throw e;$(1,0)}}function yi(e,t,n,r,i){var a=B();try{return Z(e)(t,n,r,i)}catch(e){if(z(a),!(e instanceof N))throw e;$(1,0)}}function bi(e,t,n,r,i,a){var o=B();try{Z(e)(t,n,r,i,a)}catch(e){if(z(o),!(e instanceof N))throw e;$(1,0)}}function xi(e,t,n){var r=B();try{return Z(e)(t,n)}catch(e){if(z(r),!(e instanceof N))throw e;$(1,0)}}function Si(e,t,n,r){var i=B();try{return Z(e)(t,n,r)}catch(e){if(z(i),!(e instanceof N))throw e;$(1,0)}}function Ci(e){var t=B();try{return Z(e)()}catch(e){if(z(t),!(e instanceof N))throw e;$(1,0)}}function wi(e,t,n,r,i,a,o,s){var c=B();try{return Z(e)(t,n,r,i,a,o,s)}catch(e){if(z(c),!(e instanceof N))throw e;$(1,0)}}function Ti(e){var t=B();try{Z(e)()}catch(e){if(z(t),!(e instanceof N))throw e;$(1,0)}}function Ei(e,t,n,r,i,a,o){var s=B();try{Z(e)(t,n,r,i,a,o)}catch(e){if(z(s),!(e instanceof N))throw e;$(1,0)}}function Di(e,t,n,r,i,a){var o=B();try{return Z(e)(t,n,r,i,a)}catch(e){if(z(o),!(e instanceof N))throw e;$(1,0)}}function Oi(e,t,n,r,i,a,o){var s=B();try{return Z(e)(t,n,r,i,a,o)}catch(e){if(z(s),!(e instanceof N))throw e;$(1,0)}}function ki(e,t,n,r,i,a,o,s){var c=B();try{Z(e)(t,n,r,i,a,o,s)}catch(e){if(z(c),!(e instanceof N))throw e;$(1,0)}}function Ai(e,t,n,r,i,a,o,s,c,l){var u=B();try{Z(e)(t,n,r,i,a,o,s,c,l)}catch(e){if(z(u),!(e instanceof N))throw e;$(1,0)}}function ji(e,t,n,r,i,a,o,s,c){var l=B();try{Z(e)(t,n,r,i,a,o,s,c)}catch(e){if(z(l),!(e instanceof N))throw e;$(1,0)}}function Mi(e,t,n,r,i,a,o,s,c,l,u){var d=B();try{Z(e)(t,n,r,i,a,o,s,c,l,u)}catch(e){if(z(d),!(e instanceof N))throw e;$(1,0)}}function Ni(e,t,n,r,i,a,o,s,c,l){var u=B();try{return Z(e)(t,n,r,i,a,o,s,c,l)}catch(e){if(z(u),!(e instanceof N))throw e;$(1,0)}}function Pi(e,t,n,r,i,a,o,s,c,l,u){var d=B();try{return Z(e)(t,n,r,i,a,o,s,c,l,u)}catch(e){if(z(d),!(e instanceof N))throw e;$(1,0)}}function Fi(e,t,n,r,i,a,o,s,c){var l=B();try{return Z(e)(t,n,r,i,a,o,s,c)}catch(e){if(z(l),!(e instanceof N))throw e;$(1,0)}}function Ii(e,t,n,r,i,a,o,s,c,l,u,d){var f=B();try{return Z(e)(t,n,r,i,a,o,s,c,l,u,d)}catch(e){if(z(f),!(e instanceof N))throw e;$(1,0)}}function Li(e,t,n,r,i,a,o,s,c,l,u,d,f){var p=B();try{return Z(e)(t,n,r,i,a,o,s,c,l,u,d,f)}catch(e){if(z(p),!(e instanceof N))throw e;$(1,0)}}function Ri(e,t,n,r){var i=B();try{return Z(e)(t,n,r)}catch(e){if(z(i),!(e instanceof N))throw e;$(1,0)}}function zi(e,t,n,r){var i=B();try{return Z(e)(t,n,r)}catch(e){if(z(i),!(e instanceof N))throw e;$(1,0)}}function Bi(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){var g=B();try{Z(e)(t,n,r,i,a,o,s,c,l,u,d,f,p,m,h)}catch(e){if(z(g),!(e instanceof N))throw e;$(1,0)}}function Vi(e,t,n,r,i){var a=B();try{return Vr(e,t,n,r,i)}catch(e){if(z(a),!(e instanceof N))throw e;$(1,0)}}function Hi(e){var t=B();try{return Hr(e)}catch(e){if(z(t),!(e instanceof N))throw e;$(1,0)}}function Ui(e,t,n,r){var i=B();try{return Ur(e,t,n,r)}catch(e){if(z(i),!(e instanceof N))throw e;$(1,0)}}function Wi(e,t,n,r,i,a){var o=B();try{return Gr(e,t,n,r,i,a)}catch(e){if(z(o),!(e instanceof N))throw e;$(1,0)}}function Gi(e,t,n){var r=B();try{return qr(e,t,n)}catch(e){if(z(r),!(e instanceof N))throw e;$(1,0)}}function Ki(e,t,n,r){var i=B();try{Kr(e,t,n,r)}catch(e){if(z(i),!(e instanceof N))throw e;$(1,0)}}function qi(e,t,n,r,i,a,o,s,c,l,u){var d=B();try{Jr(e,t,n,r,i,a,o,s,c,l,u)}catch(e){if(z(d),!(e instanceof N))throw e;$(1,0)}}function Ji(e,t,n,r,i,a,o,s,c,l,u){var d=B();try{Yr(e,t,n,r,i,a,o,s,c,l,u)}catch(e){if(z(d),!(e instanceof N))throw e;$(1,0)}}function Yi(e,t){var n=B();try{return Xr(e,t)}catch(e){if(z(n),!(e instanceof N))throw e;$(1,0)}}function Xi(e,t,n,r,i,a,o){var s=B();try{ii(e,t,n,r,i,a,o)}catch(e){if(z(s),!(e instanceof N))throw e;$(1,0)}}function Zi(e,t,n,r,i,a,o){var s=B();try{return Zr(e,t,n,r,i,a,o)}catch(e){if(z(s),!(e instanceof N))throw e;$(1,0)}}function Qi(e,t,n,r,i,a,o,s,c,l){var u=B();try{Qr(e,t,n,r,i,a,o,s,c,l)}catch(e){if(z(u),!(e instanceof N))throw e;$(1,0)}}function $i(e,t,n,r,i){var a=B();try{$r(e,t,n,r,i)}catch(e){if(z(a),!(e instanceof N))throw e;$(1,0)}}function ea(e,t,n,r,i,a,o){var s=B();try{ei(e,t,n,r,i,a,o)}catch(e){if(z(s),!(e instanceof N))throw e;$(1,0)}}function ta(e,t,n,r,i,a,o,s){var c=B();try{ti(e,t,n,r,i,a,o,s)}catch(e){if(z(c),!(e instanceof N))throw e;$(1,0)}}function na(e,t,n,r,i){var a=B();try{return ni(e,t,n,r,i)}catch(e){if(z(a),!(e instanceof N))throw e;$(1,0)}}function ra(e,t,n,r,i,a){var o=B();try{return ri(e,t,n,r,i,a)}catch(e){if(z(o),!(e instanceof N))throw e;$(1,0)}}function ia(e,t,n){var r=B();try{return ai(e,t,n)}catch(e){if(z(r),!(e instanceof N))throw e;$(1,0)}}function aa(e,t,n,r,i,a){var o=B();try{return oi(e,t,n,r,i,a)}catch(e){if(z(o),!(e instanceof N))throw e;$(1,0)}}function oa(e,t,n,r,i,a){var o=B();try{Wr(e,t,n,r,i,a)}catch(e){if(z(o),!(e instanceof N))throw e;$(1,0)}}function sa(e,t,n,r,i,a){var o=B();try{si(e,t,n,r,i,a)}catch(e){if(z(o),!(e instanceof N))throw e;$(1,0)}}function ca(e,t,n,r,i,a,o,s,c,l,u,d,f){var p=B();try{ci(e,t,n,r,i,a,o,s,c,l,u,d,f)}catch(e){if(z(p),!(e instanceof N))throw e;$(1,0)}}function la(e,t,n,r,i,a,o,s){var c=B();try{li(e,t,n,r,i,a,o,s)}catch(e){if(z(c),!(e instanceof N))throw e;$(1,0)}}function ua(e,t,n,r,i,a){var o=B();try{ui(e,t,n,r,i,a)}catch(e){if(z(o),!(e instanceof N))throw e;$(1,0)}}function da(e,t,n,r,i,a,o,s){var c=B();try{di(e,t,n,r,i,a,o,s)}catch(e){if(z(c),!(e instanceof N))throw e;$(1,0)}}function fa(e,t,n,r,i,a,o,s,c){var l=B();try{fi(e,t,n,r,i,a,o,s,c)}catch(e){if(z(l),!(e instanceof N))throw e;$(1,0)}}function pa(e,t,n,r,i){var a=B();try{return pi(e,t,n,r,i)}catch(e){if(z(a),!(e instanceof N))throw e;$(1,0)}}r.UTF8ToString=H,r.lengthBytesUTF8=ft,r.stringToNewUTF8=_r,(/* @__PURE__ */ `writeI53ToI64.writeI53ToI64Clamped.writeI53ToI64Signaling.writeI53ToU64Clamped.writeI53ToU64Signaling.readI53FromI64.readI53FromU64.getTempRet0.exitJS.readSockaddr.readEmAsmArgs.listenOnce.autoResumeAudioContext.dynCallLegacy.getDynCaller.dynCall.handleException.keepRuntimeAlive.runtimeKeepalivePush.runtimeKeepalivePop.callUserCallback.maybeExit.asmjsMangle.HandleAllocator.getNativeTypeSize.addOnPreRun.addOnInit.addOnPostCtor.addOnPreMain.addOnExit.addOnPostRun.STACK_SIZE.STACK_ALIGN.POINTER_SIZE.ASSERTIONS.getCFunc.ccall.cwrap.uleb128Encode.sigToWasmTypes.generateFuncType.convertJsFunctionToWasm.getEmptyTableSlot.updateTableMap.getFunctionAddress.addFunction.removeFunction.intArrayToString.AsciiToString.UTF16ToString.stringToUTF16.lengthBytesUTF16.UTF32ToString.stringToUTF32.lengthBytesUTF32.stringToUTF8OnStack.writeArrayToMemory.registerKeyEventCallback.maybeCStringToJsString.findEventTarget.getBoundingClientRect.fillMouseEventData.registerMouseEventCallback.registerWheelEventCallback.registerUiEventCallback.registerFocusEventCallback.fillDeviceOrientationEventData.registerDeviceOrientationEventCallback.fillDeviceMotionEventData.registerDeviceMotionEventCallback.screenOrientation.fillOrientationChangeEventData.registerOrientationChangeEventCallback.fillFullscreenChangeEventData.registerFullscreenChangeEventCallback.JSEvents_requestFullscreen.JSEvents_resizeCanvasForFullscreen.registerRestoreOldStyle.hideEverythingExceptGivenElement.restoreHiddenElements.setLetterbox.softFullscreenResizeWebGLRenderTarget.doRequestFullscreen.fillPointerlockChangeEventData.registerPointerlockChangeEventCallback.registerPointerlockErrorEventCallback.requestPointerLock.fillVisibilityChangeEventData.registerVisibilityChangeEventCallback.registerTouchEventCallback.fillGamepadEventData.registerGamepadEventCallback.registerBeforeUnloadEventCallback.fillBatteryEventData.battery.registerBatteryEventCallback.setCanvasElementSize.getCanvasElementSize.convertPCtoSourceLocation.wasiRightsToMuslOFlags.wasiOFlagsToMuslOFlags.safeSetTimeout.setImmediateWrapped.safeRequestAnimationFrame.clearImmediateWrapped.registerPostMainLoop.registerPreMainLoop.getPromise.makePromise.idsToPromises.makePromiseCallback.Browser_asyncPrepareDataCounter.isLeapYear.ydayFromDate.arraySum.addDays.getSocketFromFD.getSocketAddress.FS_unlink.FS_mkdirTree._setNetworkCallback.heapObjectForWebGLType.toTypedArrayIndex.webgl_enable_ANGLE_instanced_arrays.webgl_enable_OES_vertex_array_object.webgl_enable_WEBGL_draw_buffers.webgl_enable_WEBGL_multi_draw.webgl_enable_EXT_polygon_offset_clamp.webgl_enable_EXT_clip_control.webgl_enable_WEBGL_polygon_mode.emscriptenWebGLGet.computeUnpackAlignedImageSize.colorChannelsInGlTextureFormat.emscriptenWebGLGetTexPixelData.emscriptenWebGLGetUniform.webglGetUniformLocation.webglPrepareUniformLocationsBeforeFirstUse.webglGetLeftBracePos.emscriptenWebGLGetVertexAttrib.__glGetActiveAttribOrUniform.writeGLArray.registerWebGlEventCallback.runAndAbortIfError.ALLOC_NORMAL.ALLOC_STACK.allocate.writeStringToMemory.writeAsciiToMemory.setErrNo.demangle.stackTrace.FKN_setsockopt.FKN_resolve`.split(`.`)).forEach(fe),(/* @__PURE__ */ `run.addRunDependency.removeRunDependency.out.err.callMain.abort.wasmMemory.wasmExports.writeStackCookie.checkStackCookie.convertI32PairToI53.convertI32PairToI53Checked.convertU32PairToI53.stackSave.stackRestore.stackAlloc.setTempRet0.ptrToString.zeroMemory.getHeapMax.growMemory.ENV.ERRNO_CODES.strError.inetPton4.inetNtop4.inetPton6.inetNtop6.writeSockaddr.DNS.Protocols.Sockets.timers.warnOnce.emscriptenLog.readEmAsmArgsArray.jstoi_q.jstoi_s.getExecutableName.asyncLoad.alignMemory.mmapAlloc.wasmTable.noExitRuntime.freeTableIndexes.functionsInTableMap.reallyNegative.unSign.strLen.reSign.formatString.setValue.getValue.PATH.PATH_FS.UTF8Decoder.UTF8ArrayToString.stringToUTF8Array.stringToUTF8.intArrayFromString.stringToAscii.UTF16Decoder.JSEvents.specialHTMLTargets.findCanvasEventTarget.currentFullscreenStrategy.restoreOldWindowedStyle.jsStackTrace.getCallstack.UNWIND_CACHE.ExitStatus.getEnvStrings.checkWasiClock.doReadv.doWritev.initRandomFill.randomFill.emSetImmediate.emClearImmediate_deps.emClearImmediate.promiseMap.uncaughtExceptionCount.exceptionLast.exceptionCaught.ExceptionInfo.findMatchingCatch.getExceptionMessageCommon.incrementExceptionRefcount.decrementExceptionRefcount.getExceptionMessage.Browser.getPreloadedImageData__data.wget.MONTH_DAYS_REGULAR.MONTH_DAYS_LEAP.MONTH_DAYS_REGULAR_CUMULATIVE.MONTH_DAYS_LEAP_CUMULATIVE.SYSCALLS.preloadPlugins.FS_createPreloadedFile.FS_modeStringToFlags.FS_getMode.FS_stdin_getChar_buffer.FS_stdin_getChar.FS_createPath.FS_createDevice.FS_readFile.FS.FS_createDataFile.FS_createLazyFile.MEMFS.TTY.PIPEFS.SOCKFS.tempFixedLengthArray.miniTempWebGLFloatBuffers.miniTempWebGLIntBuffers.GL.AL.GLUT.EGL.GLEW.IDBStore.SDL.SDL_gfx.allocateUTF8.allocateUTF8OnStack.print.printErr.FKN.FKN_socket.FKN_connect.FKN_bind.FKN_listen.FKN_accept.FKN_recv.FKN_recvfrom.FKN_send.FKN_sendto.FKN_close.FKN_getsockname.FKN_getpeername.FKN_getsockopt.FKN_fcntl.FKN_poll`.split(`.`)).forEach(pe);var ma;function ha(){jr(),M()}function ga(){if(_e>0){ve=ga;return}if(ha(),_e>0){ve=ga;return}function e(){w(!ma),ma=!0,r.calledRun=!0,!C&&(he(),i(r),w(!r._main,`compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]`),ge())}e(),ae()}ga(),n=o;for(let e of Object.keys(r))e in t||Object.defineProperty(t,e,{configurable:!0,get(){F(`Access to module property ('${e}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}});return n})})();(()=>{var t=e;e=function(e){if(new.target)throw Error("Module() should not be called with `new Module()`");return t(e)}})();var t=e;export{t as default};
|