@procedures/exif 0.0.0-stage → 0.2.3

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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025-2026 Mark Russell
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,3 +1,29 @@
1
- # Temporary Holding Version
1
+ # @procedures/exif
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ [![npm](https://img.shields.io/npm/v/@procedures/exif?color=2346c4&label=npm)](https://www.npmjs.com/package/@procedures/exif)
4
+
5
+ When and where a JPEG photo was taken, from its EXIF block, without a dependency.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ pnpm add @procedures/exif @procedures/client
11
+ ```
12
+
13
+ A host registers the procedures with `createRegistry(exifModule)`, or with `import "@procedures/exif/register"` for the global registry. The package root and `./module` register nothing.
14
+
15
+ ## Procedures
16
+
17
+ | Procedure | Effects | What it does |
18
+ | --- | --- | --- |
19
+ | `exif.read` | reads `fs` | Reads the time of the photo (with its offset when the camera writes one) and its GPS position. |
20
+
21
+ ## Example
22
+
23
+ ```ts
24
+ const { takenAt, lat, lon } = await client.exec(["exif", "read"], { path: "photo.jpg" });
25
+ ```
26
+
27
+ ## What it reads
28
+
29
+ It reads `DateTimeOriginal`, `OffsetTimeOriginal` and the GPS position, and nothing else. A photo without EXIF (a screenshot, an edited copy) gives an empty result. A position of 0, 0 is the value of a camera without a position, so the result does not include it.
@@ -0,0 +1 @@
1
+ {"version":"7.0.2","root":[88,[410,413]],"packageJsons":["../../../node_modules/.pnpm/@mark1russell7+quantity@0.1.0_zod@4.6.5/node_modules/@mark1russell7/quantity/package.json","../../../node_modules/.pnpm/@types+body-parser@1.19.6/node_modules/@types/body-parser/package.json","../../../node_modules/.pnpm/@types+connect@3.4.38/node_modules/@types/connect/package.json","../../../node_modules/.pnpm/@types+express-serve-static-core@5.1.3/node_modules/@types/express-serve-static-core/package.json","../../../node_modules/.pnpm/@types+express@5.0.6/node_modules/@types/express/package.json","../../../node_modules/.pnpm/@types+http-errors@2.0.5/node_modules/@types/http-errors/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/package.json","../../../node_modules/.pnpm/@types+qs@6.15.1/node_modules/@types/qs/package.json","../../../node_modules/.pnpm/@types+range-parser@1.2.7/node_modules/@types/range-parser/package.json","../../../node_modules/.pnpm/@types+send@1.2.1/node_modules/@types/send/package.json","../../../node_modules/.pnpm/@types+serve-static@2.2.0/node_modules/@types/serve-static/package.json","../../../node_modules/.pnpm/@types+ws@8.18.2/node_modules/@types/ws/package.json","../../../node_modules/.pnpm/express@5.2.1_supports-color@7.2.0/node_modules/express/package.json","../../../node_modules/.pnpm/punycode@2.3.1/node_modules/punycode/package.json","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/package.json","../../../node_modules/.pnpm/ws@8.22.0/node_modules/ws/package.json","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/package.json","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/package.json","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/package.json","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/package.json","../../client/package.json","../package.json"],"missingPackageJsons":["../../../node_modules/.pnpm/@mark1russell7+quantity@0.1.0_zod@4.6.5/node_modules/@mark1russell7/quantity/build/package.json","../../../node_modules/.pnpm/@types+body-parser@1.19.6/node_modules/@types/http/package.json","../../../node_modules/.pnpm/@types+body-parser@1.19.6/node_modules/connect/package.json","../../../node_modules/.pnpm/@types+body-parser@1.19.6/node_modules/http/package.json","../../../node_modules/.pnpm/@types+connect@3.4.38/node_modules/@types/http/package.json","../../../node_modules/.pnpm/@types+connect@3.4.38/node_modules/http/package.json","../../../node_modules/.pnpm/@types+express-serve-static-core@5.1.3/node_modules/@types/events/package.json","../../../node_modules/.pnpm/@types+express-serve-static-core@5.1.3/node_modules/@types/http/package.json","../../../node_modules/.pnpm/@types+express-serve-static-core@5.1.3/node_modules/events/package.json","../../../node_modules/.pnpm/@types+express-serve-static-core@5.1.3/node_modules/http/package.json","../../../node_modules/.pnpm/@types+express-serve-static-core@5.1.3/node_modules/qs/package.json","../../../node_modules/.pnpm/@types+express-serve-static-core@5.1.3/node_modules/range-parser/package.json","../../../node_modules/.pnpm/@types+express-serve-static-core@5.1.3/node_modules/send/package.json","../../../node_modules/.pnpm/@types+express@5.0.6/node_modules/body-parser/package.json","../../../node_modules/.pnpm/@types+express@5.0.6/node_modules/express-serve-static-core/package.json","../../../node_modules/.pnpm/@types+express@5.0.6/node_modules/serve-static/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/assert/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/assert/strict/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/async_hooks/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/buffer/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/child_process/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/cluster/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/console/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/constants/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/crypto/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/dgram/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/diagnostics_channel/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/dns/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/dns/promises/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/domain/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/events/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/fs/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/fs/promises/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/http/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/http2/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/https/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/inspector/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/inspector/promises/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/module/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/net/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/assert/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/compatibility/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/dns/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/fs/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/readline/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/stream/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/timers/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/web-globals/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/os/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/path/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/path/posix/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/path/win32/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/perf_hooks/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/process/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/punycode/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/querystring/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/readline/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/readline/promises/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/repl/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/stream/consumers/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/stream/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/stream/promises/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/stream/web/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/string_decoder/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/timers/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/timers/promises/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/tls/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/trace_events/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/tty/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/url/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/util/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/util/types/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/v8/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/vm/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/wasi/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/worker_threads/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/zlib/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/assert/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/assert/strict/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/async_hooks/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/buffer/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/child_process/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/cluster/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/console/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/constants/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/crypto/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/dgram/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/diagnostics_channel/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/dns/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/dns/promises/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/domain/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/events/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/fs/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/fs/promises/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/http/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/http2/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/https/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/inspector/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/inspector/promises/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/module/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/net/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/os/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/path/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/path/posix/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/path/win32/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/perf_hooks/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/process/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/punycode/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/querystring/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/readline/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/readline/promises/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/repl/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/stream/consumers/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/stream/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/stream/promises/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/stream/web/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/string_decoder/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/timers/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/timers/promises/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/tls/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/trace_events/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/tty/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/url/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/util/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/util/types/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/v8/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/vm/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/wasi/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/worker_threads/package.json","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/zlib/package.json","../../../node_modules/.pnpm/@types+send@1.2.1/node_modules/@types/fs/package.json","../../../node_modules/.pnpm/@types+send@1.2.1/node_modules/@types/stream/package.json","../../../node_modules/.pnpm/@types+send@1.2.1/node_modules/fs/package.json","../../../node_modules/.pnpm/@types+send@1.2.1/node_modules/stream/package.json","../../../node_modules/.pnpm/@types+serve-static@2.2.0/node_modules/@types/http/package.json","../../../node_modules/.pnpm/@types+serve-static@2.2.0/node_modules/http-errors/package.json","../../../node_modules/.pnpm/@types+serve-static@2.2.0/node_modules/http/package.json","../../../node_modules/.pnpm/@types+ws@8.18.2/node_modules/@types/events/package.json","../../../node_modules/.pnpm/@types+ws@8.18.2/node_modules/@types/http/package.json","../../../node_modules/.pnpm/@types+ws@8.18.2/node_modules/@types/https/package.json","../../../node_modules/.pnpm/@types+ws@8.18.2/node_modules/@types/net/package.json","../../../node_modules/.pnpm/@types+ws@8.18.2/node_modules/@types/stream/package.json","../../../node_modules/.pnpm/@types+ws@8.18.2/node_modules/@types/tls/package.json","../../../node_modules/.pnpm/@types+ws@8.18.2/node_modules/@types/url/package.json","../../../node_modules/.pnpm/@types+ws@8.18.2/node_modules/@types/zlib/package.json","../../../node_modules/.pnpm/@types+ws@8.18.2/node_modules/events/package.json","../../../node_modules/.pnpm/@types+ws@8.18.2/node_modules/http/package.json","../../../node_modules/.pnpm/@types+ws@8.18.2/node_modules/https/package.json","../../../node_modules/.pnpm/@types+ws@8.18.2/node_modules/net/package.json","../../../node_modules/.pnpm/@types+ws@8.18.2/node_modules/stream/package.json","../../../node_modules/.pnpm/@types+ws@8.18.2/node_modules/tls/package.json","../../../node_modules/.pnpm/@types+ws@8.18.2/node_modules/url/package.json","../../../node_modules/.pnpm/@types+ws@8.18.2/node_modules/zlib/package.json","../../../node_modules/.pnpm/node_modules/@types/assert/package.json","../../../node_modules/.pnpm/node_modules/@types/assert/strict/package.json","../../../node_modules/.pnpm/node_modules/@types/async_hooks/package.json","../../../node_modules/.pnpm/node_modules/@types/buffer/package.json","../../../node_modules/.pnpm/node_modules/@types/child_process/package.json","../../../node_modules/.pnpm/node_modules/@types/cluster/package.json","../../../node_modules/.pnpm/node_modules/@types/console/package.json","../../../node_modules/.pnpm/node_modules/@types/constants/package.json","../../../node_modules/.pnpm/node_modules/@types/crypto/package.json","../../../node_modules/.pnpm/node_modules/@types/dgram/package.json","../../../node_modules/.pnpm/node_modules/@types/diagnostics_channel/package.json","../../../node_modules/.pnpm/node_modules/@types/dns/package.json","../../../node_modules/.pnpm/node_modules/@types/dns/promises/package.json","../../../node_modules/.pnpm/node_modules/@types/domain/package.json","../../../node_modules/.pnpm/node_modules/@types/events/package.json","../../../node_modules/.pnpm/node_modules/@types/fs/package.json","../../../node_modules/.pnpm/node_modules/@types/fs/promises/package.json","../../../node_modules/.pnpm/node_modules/@types/http/package.json","../../../node_modules/.pnpm/node_modules/@types/http2/package.json","../../../node_modules/.pnpm/node_modules/@types/https/package.json","../../../node_modules/.pnpm/node_modules/@types/inspector/package.json","../../../node_modules/.pnpm/node_modules/@types/inspector/promises/package.json","../../../node_modules/.pnpm/node_modules/@types/module/package.json","../../../node_modules/.pnpm/node_modules/@types/net/package.json","../../../node_modules/.pnpm/node_modules/@types/os/package.json","../../../node_modules/.pnpm/node_modules/@types/path/package.json","../../../node_modules/.pnpm/node_modules/@types/path/posix/package.json","../../../node_modules/.pnpm/node_modules/@types/path/win32/package.json","../../../node_modules/.pnpm/node_modules/@types/perf_hooks/package.json","../../../node_modules/.pnpm/node_modules/@types/process/package.json","../../../node_modules/.pnpm/node_modules/@types/punycode/package.json","../../../node_modules/.pnpm/node_modules/@types/querystring/package.json","../../../node_modules/.pnpm/node_modules/@types/readline/package.json","../../../node_modules/.pnpm/node_modules/@types/readline/promises/package.json","../../../node_modules/.pnpm/node_modules/@types/repl/package.json","../../../node_modules/.pnpm/node_modules/@types/stream/consumers/package.json","../../../node_modules/.pnpm/node_modules/@types/stream/package.json","../../../node_modules/.pnpm/node_modules/@types/stream/promises/package.json","../../../node_modules/.pnpm/node_modules/@types/stream/web/package.json","../../../node_modules/.pnpm/node_modules/@types/string_decoder/package.json","../../../node_modules/.pnpm/node_modules/@types/timers/package.json","../../../node_modules/.pnpm/node_modules/@types/timers/promises/package.json","../../../node_modules/.pnpm/node_modules/@types/tls/package.json","../../../node_modules/.pnpm/node_modules/@types/trace_events/package.json","../../../node_modules/.pnpm/node_modules/@types/tty/package.json","../../../node_modules/.pnpm/node_modules/@types/url/package.json","../../../node_modules/.pnpm/node_modules/@types/util/package.json","../../../node_modules/.pnpm/node_modules/@types/util/types/package.json","../../../node_modules/.pnpm/node_modules/@types/v8/package.json","../../../node_modules/.pnpm/node_modules/@types/vm/package.json","../../../node_modules/.pnpm/node_modules/@types/wasi/package.json","../../../node_modules/.pnpm/node_modules/@types/worker_threads/package.json","../../../node_modules/.pnpm/node_modules/@types/zlib/package.json","../../../node_modules/.pnpm/node_modules/assert/package.json","../../../node_modules/.pnpm/node_modules/assert/strict/package.json","../../../node_modules/.pnpm/node_modules/async_hooks/package.json","../../../node_modules/.pnpm/node_modules/buffer/package.json","../../../node_modules/.pnpm/node_modules/child_process/package.json","../../../node_modules/.pnpm/node_modules/cluster/package.json","../../../node_modules/.pnpm/node_modules/console/package.json","../../../node_modules/.pnpm/node_modules/constants/package.json","../../../node_modules/.pnpm/node_modules/crypto/package.json","../../../node_modules/.pnpm/node_modules/dgram/package.json","../../../node_modules/.pnpm/node_modules/diagnostics_channel/package.json","../../../node_modules/.pnpm/node_modules/dns/package.json","../../../node_modules/.pnpm/node_modules/dns/promises/package.json","../../../node_modules/.pnpm/node_modules/domain/package.json","../../../node_modules/.pnpm/node_modules/events/package.json","../../../node_modules/.pnpm/node_modules/fs/package.json","../../../node_modules/.pnpm/node_modules/fs/promises/package.json","../../../node_modules/.pnpm/node_modules/http/package.json","../../../node_modules/.pnpm/node_modules/http2/package.json","../../../node_modules/.pnpm/node_modules/https/package.json","../../../node_modules/.pnpm/node_modules/inspector/package.json","../../../node_modules/.pnpm/node_modules/inspector/promises/package.json","../../../node_modules/.pnpm/node_modules/module/package.json","../../../node_modules/.pnpm/node_modules/net/package.json","../../../node_modules/.pnpm/node_modules/os/package.json","../../../node_modules/.pnpm/node_modules/path/package.json","../../../node_modules/.pnpm/node_modules/path/posix/package.json","../../../node_modules/.pnpm/node_modules/path/win32/package.json","../../../node_modules/.pnpm/node_modules/perf_hooks/package.json","../../../node_modules/.pnpm/node_modules/process/package.json","../../../node_modules/.pnpm/node_modules/querystring/package.json","../../../node_modules/.pnpm/node_modules/readline/package.json","../../../node_modules/.pnpm/node_modules/readline/promises/package.json","../../../node_modules/.pnpm/node_modules/repl/package.json","../../../node_modules/.pnpm/node_modules/stream/consumers/package.json","../../../node_modules/.pnpm/node_modules/stream/package.json","../../../node_modules/.pnpm/node_modules/stream/promises/package.json","../../../node_modules/.pnpm/node_modules/stream/web/package.json","../../../node_modules/.pnpm/node_modules/string_decoder/package.json","../../../node_modules/.pnpm/node_modules/timers/package.json","../../../node_modules/.pnpm/node_modules/timers/promises/package.json","../../../node_modules/.pnpm/node_modules/tls/package.json","../../../node_modules/.pnpm/node_modules/trace_events/package.json","../../../node_modules/.pnpm/node_modules/tty/package.json","../../../node_modules/.pnpm/node_modules/url/package.json","../../../node_modules/.pnpm/node_modules/util/package.json","../../../node_modules/.pnpm/node_modules/util/types/package.json","../../../node_modules/.pnpm/node_modules/v8/package.json","../../../node_modules/.pnpm/node_modules/vm/package.json","../../../node_modules/.pnpm/node_modules/wasi/package.json","../../../node_modules/.pnpm/node_modules/worker_threads/package.json","../../../node_modules/.pnpm/node_modules/zlib/package.json","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/buffer/package.json","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/events/package.json","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/net/package.json","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/stream/package.json","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/stream/web/package.json","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/tls/package.json","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/url/package.json","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/worker_threads/package.json","../../../node_modules/assert/package.json","../../../node_modules/assert/strict/package.json","../../../node_modules/async_hooks/package.json","../../../node_modules/buffer/package.json","../../../node_modules/child_process/package.json","../../../node_modules/cluster/package.json","../../../node_modules/console/package.json","../../../node_modules/constants/package.json","../../../node_modules/crypto/package.json","../../../node_modules/dgram/package.json","../../../node_modules/diagnostics_channel/package.json","../../../node_modules/dns/package.json","../../../node_modules/dns/promises/package.json","../../../node_modules/domain/package.json","../../../node_modules/events/package.json","../../../node_modules/fs/package.json","../../../node_modules/fs/promises/package.json","../../../node_modules/http/package.json","../../../node_modules/http2/package.json","../../../node_modules/https/package.json","../../../node_modules/inspector/package.json","../../../node_modules/inspector/promises/package.json","../../../node_modules/module/package.json","../../../node_modules/net/package.json","../../../node_modules/os/package.json","../../../node_modules/path/package.json","../../../node_modules/path/posix/package.json","../../../node_modules/path/win32/package.json","../../../node_modules/perf_hooks/package.json","../../../node_modules/process/package.json","../../../node_modules/punycode/package.json","../../../node_modules/querystring/package.json","../../../node_modules/readline/package.json","../../../node_modules/readline/promises/package.json","../../../node_modules/repl/package.json","../../../node_modules/stream/consumers/package.json","../../../node_modules/stream/package.json","../../../node_modules/stream/promises/package.json","../../../node_modules/stream/web/package.json","../../../node_modules/string_decoder/package.json","../../../node_modules/timers/package.json","../../../node_modules/timers/promises/package.json","../../../node_modules/tls/package.json","../../../node_modules/trace_events/package.json","../../../node_modules/tslib/package.json","../../../node_modules/tty/package.json","../../../node_modules/url/package.json","../../../node_modules/util/package.json","../../../node_modules/util/types/package.json","../../../node_modules/v8/package.json","../../../node_modules/vm/package.json","../../../node_modules/wasi/package.json","../../../node_modules/worker_threads/package.json","../../../node_modules/zlib/package.json","../../client/node_modules/@types/http/package.json","../../client/node_modules/http/package.json","../node_modules/@types/express-serve-static-core/package.json","../node_modules/@types/serve-static/package.json","../node_modules/@types/tslib/package.json","../node_modules/tslib/package.json"],"fileNames":["lib.es5.d.ts","lib.es2015.d.ts","lib.es2016.d.ts","lib.es2017.d.ts","lib.es2018.d.ts","lib.es2019.d.ts","lib.es2020.d.ts","lib.es2021.d.ts","lib.es2022.d.ts","lib.es2023.d.ts","lib.es2024.d.ts","lib.es2025.d.ts","lib.esnext.d.ts","lib.es2015.core.d.ts","lib.es2015.collection.d.ts","lib.es2015.generator.d.ts","lib.es2015.iterable.d.ts","lib.es2015.promise.d.ts","lib.es2015.proxy.d.ts","lib.es2015.reflect.d.ts","lib.es2015.symbol.d.ts","lib.es2015.symbol.wellknown.d.ts","lib.es2016.array.include.d.ts","lib.es2016.intl.d.ts","lib.es2017.arraybuffer.d.ts","lib.es2017.date.d.ts","lib.es2017.object.d.ts","lib.es2017.sharedmemory.d.ts","lib.es2017.string.d.ts","lib.es2017.intl.d.ts","lib.es2017.typedarrays.d.ts","lib.es2018.asyncgenerator.d.ts","lib.es2018.asynciterable.d.ts","lib.es2018.intl.d.ts","lib.es2018.promise.d.ts","lib.es2018.regexp.d.ts","lib.es2019.array.d.ts","lib.es2019.object.d.ts","lib.es2019.string.d.ts","lib.es2019.symbol.d.ts","lib.es2019.intl.d.ts","lib.es2020.bigint.d.ts","lib.es2020.date.d.ts","lib.es2020.promise.d.ts","lib.es2020.sharedmemory.d.ts","lib.es2020.string.d.ts","lib.es2020.symbol.wellknown.d.ts","lib.es2020.intl.d.ts","lib.es2020.number.d.ts","lib.es2021.promise.d.ts","lib.es2021.string.d.ts","lib.es2021.weakref.d.ts","lib.es2021.intl.d.ts","lib.es2022.array.d.ts","lib.es2022.error.d.ts","lib.es2022.intl.d.ts","lib.es2022.object.d.ts","lib.es2022.string.d.ts","lib.es2022.regexp.d.ts","lib.es2023.array.d.ts","lib.es2023.collection.d.ts","lib.es2023.intl.d.ts","lib.es2024.arraybuffer.d.ts","lib.es2024.collection.d.ts","lib.es2024.object.d.ts","lib.es2024.promise.d.ts","lib.es2024.regexp.d.ts","lib.es2024.sharedmemory.d.ts","lib.es2024.string.d.ts","lib.es2025.collection.d.ts","lib.es2025.float16.d.ts","lib.es2025.intl.d.ts","lib.es2025.iterator.d.ts","lib.es2025.promise.d.ts","lib.es2025.regexp.d.ts","lib.esnext.array.d.ts","lib.esnext.collection.d.ts","lib.esnext.date.d.ts","lib.esnext.decorators.d.ts","lib.esnext.disposable.d.ts","lib.esnext.error.d.ts","lib.esnext.intl.d.ts","lib.esnext.sharedmemory.d.ts","lib.esnext.temporal.d.ts","lib.esnext.typedarrays.d.ts","lib.decorators.d.ts","lib.decorators.legacy.d.ts","../src/exif.ts","../../client/dist/procedures/schema.d.ts","../../client/dist/client/validation/types.d.ts","../../client/dist/procedures/collection/storage.d.ts","../../client/dist/events/types.d.ts","../../client/dist/procedures/ref.d.ts","../../client/dist/procedures/types.d.ts","../../client/dist/procedures/registry.d.ts","../../client/dist/client/deadline.d.ts","../../client/dist/procedures/capability.d.ts","../../client/dist/procedures/invoke.d.ts","../../client/dist/client/errors/types.d.ts","../../client/dist/client/errors/codes.d.ts","../../client/dist/client/errors/registry.d.ts","../../client/dist/client/errors/factory.d.ts","../../client/dist/client/errors/http-status.d.ts","../../client/dist/client/errors/http-errors.d.ts","../../client/dist/client/errors/index.d.ts","../../client/dist/client/types.d.ts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/json-schema.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/standard-schema.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/registries.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/to-json-schema.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/util.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/versions.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/schemas.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/checks.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/errors.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/core.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/parse.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/memoizer.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/regexes.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ar.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/az.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/be.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/bg.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/bn.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ca.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ckb.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/cs.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/da.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/de.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/el.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/en.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/eo.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/es.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/fa.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/fi.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/fr.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/fr-ca.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/gu.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/he.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/hi.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/hr.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/hu.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/hy.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/id.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/is.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/it.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ja.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ka.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/kh.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/km.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/kn.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ko.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/lt.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/mk.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ms.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ne.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/nl.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/nn.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/no.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ota.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ps.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/pl.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/pt.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/pt-br.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ro.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ru.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/sk.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/sl.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/sv.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ta.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/tg.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/th.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/tk.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/tr.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ua.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/uk.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/ur.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/uz.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/vi.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/zh-cn.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/zh-tw.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/yo.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/index.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/doc.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/compile.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/api.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/json-schema-processors.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/json-schema-generator.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/index.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/errors.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/parse.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/schemas.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/checks.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/compat.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/from-json-schema.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/deep-partial.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/in-out.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/iso.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/coerce.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/external.d.cts","../../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/index.d.cts","../../../node_modules/.pnpm/@mark1russell7+quantity@0.1.0_zod@4.6.5/node_modules/@mark1russell7/quantity/build/index.d.ts","../../client/dist/duration.d.ts","../../client/dist/client/middleware/contexts.d.ts","../../client/dist/client/context.d.ts","../../client/dist/client/consumption.d.ts","../../client/dist/client/call-types.d.ts","../../client/dist/client/client.d.ts","../../client/dist/adapters/http/shared/constants.d.ts","../../client/dist/adapters/http/shared/status-codes.d.ts","../../client/dist/adapters/http/shared/headers.d.ts","../../client/dist/adapters/http/shared/strategies.d.ts","../../client/dist/adapters/http/shared/errors.d.ts","../../client/dist/adapters/http/shared/index.d.ts","../../client/dist/adapters/http/client/types.d.ts","../../client/dist/adapters/http/client/transport.d.ts","../../client/dist/adapters/http/client/index.d.ts","../../client/dist/adapters/local/client/types.d.ts","../../client/dist/adapters/local/client/transport.d.ts","../../client/dist/adapters/local/client/index.d.ts","../../client/dist/clock.d.ts","../../client/dist/machines.d.ts","../../client/dist/server/types.d.ts","../../client/dist/adapters/websocket/client/types.d.ts","../../client/dist/adapters/websocket/client/transport.d.ts","../../client/dist/adapters/websocket/client/index.d.ts","../../client/dist/adapters/mock/client/types.d.ts","../../client/dist/adapters/mock/client/transport.d.ts","../../client/dist/adapters/mock/client/builder.d.ts","../../client/dist/adapters/mock/client/index.d.ts","../../client/dist/client/middleware/retry.d.ts","../../client/dist/client/middleware/items.d.ts","../../client/dist/client/middleware/cache.d.ts","../../client/dist/client/middleware/timeout.d.ts","../../client/dist/client/middleware/circuit-breaker.d.ts","../../client/dist/client/middleware/rate-limit.d.ts","../../client/dist/client/middleware/resilience.d.ts","../../client/dist/client/middleware/pagination.d.ts","../../client/dist/client/middleware/auth.d.ts","../../client/dist/client/middleware/tracing.d.ts","../../client/dist/client/validation/middleware.d.ts","../../client/dist/client/validation/index.d.ts","../../client/dist/client/typed.d.ts","../../client/dist/client/index.d.ts","../../client/dist/server/server.d.ts","../../client/dist/procedures/idempotency.d.ts","../../client/dist/server/procedure-server.d.ts","../../client/dist/server/request-auth.d.ts","../../client/dist/procedures/interceptors.d.ts","../../client/dist/server/host-procedures.d.ts","../../client/dist/server/method.d.ts","../../client/dist/procedures/effects.d.ts","../../client/dist/procedures/manifest.d.ts","../../client/dist/procedures/define.d.ts","../../client/dist/procedures/collection/schemas.d.ts","../../client/dist/procedures/collection/procedures.d.ts","../../client/dist/procedures/collection/index.d.ts","../../client/dist/procedures/discovery.d.ts","../../client/dist/procedures/module.d.ts","../../client/dist/procedures/core/schemas.d.ts","../../client/dist/procedures/core/logic.d.ts","../../client/dist/procedures/core/results.d.ts","../../client/dist/procedures/core/math.d.ts","../../client/dist/procedures/core/comparison.d.ts","../../client/dist/procedures/core/string.d.ts","../../client/dist/procedures/core/type.d.ts","../../client/dist/procedures/core/object.d.ts","../../client/dist/procedures/core/array.d.ts","../../client/dist/procedures/core/meta.d.ts","../../client/dist/procedures/core/index.d.ts","../../client/dist/procedures/runtime-programs.d.ts","../../client/dist/procedures/define-procedure.d.ts","../../client/dist/procedures/index.d.ts","../../client/dist/procedures/policy.d.ts","../../client/dist/timers.d.ts","../../client/dist/adapters/port/transport.d.ts","../../client/dist/tracing/traceparent.d.ts","../../client/dist/protocol.d.ts","../../client/dist/server/browser-guard.d.ts","../../client/dist/server/host-policy.d.ts","../../client/dist/client/route-resolver.d.ts","../../client/dist/client/batch-executor.d.ts","../../client/dist/events/bus.d.ts","../../client/dist/events/index.d.ts","../../client/dist/browser.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@22.20.5/node_modules/@types/node/index.d.ts","../../../node_modules/.pnpm/@types+send@1.2.1/node_modules/@types/send/index.d.ts","../../../node_modules/.pnpm/@types+qs@6.15.1/node_modules/@types/qs/index.d.ts","../../../node_modules/.pnpm/@types+range-parser@1.2.7/node_modules/@types/range-parser/index.d.ts","../../../node_modules/.pnpm/@types+express-serve-static-core@5.1.3/node_modules/@types/express-serve-static-core/index.d.ts","../../../node_modules/.pnpm/@types+http-errors@2.0.5/node_modules/@types/http-errors/index.d.ts","../../../node_modules/.pnpm/@types+serve-static@2.2.0/node_modules/@types/serve-static/index.d.ts","../../../node_modules/.pnpm/@types+connect@3.4.38/node_modules/@types/connect/index.d.ts","../../../node_modules/.pnpm/@types+body-parser@1.19.6/node_modules/@types/body-parser/index.d.ts","../../../node_modules/.pnpm/@types+express@5.0.6/node_modules/@types/express/index.d.ts","../../client/dist/adapters/http/server/types.d.ts","../../client/dist/adapters/http/server/strategies.d.ts","../../client/dist/adapters/http/server/transport.d.ts","../../client/dist/adapters/http/server/index.d.ts","../../../node_modules/.pnpm/@types+ws@8.18.2/node_modules/@types/ws/index.d.mts","../../client/dist/adapters/websocket/server/types.d.ts","../../client/dist/adapters/websocket/server/transport.d.ts","../../client/dist/adapters/websocket/server/index.d.ts","../../client/dist/server/index.d.ts","../../client/dist/index.d.ts","../src/procedures.ts","../src/module.ts","../src/index.ts","../src/register.ts"],"fileInfos":[{"version":"16934abaab7026ac114da441aabea1a0","affectsGlobalScope":true,"impliedNodeFormat":1},"d4306fb2e47f74835e8674ffac07d76f","e437c5c1302869326c3bb93da85bbbcf","e4324975a566567b21d350615f1fc6ac","333b1b9a2a9ac3b8497dba5c63b5ba50","6cffacd662b6eb5fa7a36aa2ea366bfa","b4c34f9c23304dbef2d23698637ed638","e5cb86a5fc491796ecd1d2dd348d208f","feb6c6fb19cdb246a5d8acb36a6901c7","9443a7f109277ffaa79d893ed2549995","793cee405385076e27c24f409659dccd","09f69c6610266eaee1ac9e3e30df2c71","62bad718844246b8e17547f37bad6085",{"version":"926204c28cd3d073865348473ae28d2e","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f25e42c801b2cb3cf2b39792006a9beb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6344b55f26a4e81d9608777dbfb877dd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3c0ed28e53d3695b363e256ec1c023fd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4c2761daba7f17141c25baa0821ac5da","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b87656acabd63e69379ff6ffcfe52fc7","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"597469522da047a5af5222cc6989f405","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1708ea4d34dc37fadadc63ca01127e80","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"55d97a8c6fbf34a30450a7b1e5f7a298","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0ee05eb59426d33e374226d8dcfa708b","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"e347c14030993906efcfbb88915b6a05","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b0231263857c9b6a03641acdc9280ceb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3b15c4a83b598cacb4067676e6f0abed","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b417d97b7934cef63b1889abec0bbfbf","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"09a6cf4032ebba60ce22a501e663f881","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2b056277dd138e8f5650fc04e20eaa8d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"e22cc07e3f3cc242ba52fa3f8ea1fc58","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2c45da767a1bfbb220848df1bc4029e4","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b44c3e0fbaf2130cdcf6ac38b120ffa1","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b612fb5cf8e5d964b92063a75207632a","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"02705151a5e1551b9162a9ed8ab763f7","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"41025e398be9215d32e4337335da8f0b","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"52684c2b1f353a5538e4f275182a54cd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6dedb6a4f90d1df3a6fbe5693e44886c","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ca3f36fe3562c07e0f0d71c2bebd3f6d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"409974d6129befbb8226ddd1c6558568","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4d9cfde2a1ae1b4925f1f9bc10848e5d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7e1daecc66dd564144e3bb1a0266b5fd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a8e1d9bb35fd0637f2f9fd2b2a54f2ec","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4f168501772a6543182765bfd5f2fbfe","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a19c80aad1b2162103496f5ba293a732","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b69afa63cd5d059851c78adb2856ee09","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ae2fc5d954e9b0f5feee3d481b953c27","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1cfd3091a071d8b6feec15277643bafe","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1da2c1f258970fd3cc91184f69e91a9d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a0d87491913d843139e0c993650a3235","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4ef72aa378127e7b7abba915b0110b1e","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3ec74c6a7d4463f0254db3a74cf75646","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"84c2bdfa470d075526cce6322d81b0b6","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0b3844c2b8c73e4e1ab91431411cad11","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4fc71cf4a15b8d99675a31df77f26e07","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d1b49564ddaeca3df5b6dbae925d2242","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6a25be566d60ccfc2d6e8b7bfdeefa83","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"8a20e27646985dfd58c57ca6566553dd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9969f02ad3cdcbf4f709405cda44167f","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c9be4792a7a4f42c15ae7360bf28779","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"8cf777fe00349b71ee9c4b6f3fe7fd19","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"74f96bc192530c9723f572bfff3d3078","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1df91c56b25955c56387426f378173c5","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"38856f70edcd2115c355d96ec77cc09e","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"de8700156c1275465bcd473c28b359aa","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d47cfdb6ede40518357bb5a4cd7cd9fb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6e5773860cd9e5b15e683113f642ab47","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"30ff5fe1682f7fcd629880476ca3c2e0","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"bf23d7d1b40b9015b694ddc2f011752f","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2cc585d42e2c548f9f24a30a1989fd33","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"713906ce9d332d2242b7f05ed9304be3","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0219894bfe5042c7e1aa2d22e4a91ed0","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6009ffff7e43c93318804d2d28e37fe3","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"03be89b227587594fbb50509fc1c2e45","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b30df52dc24740c0bad7c55c3511df7d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ab8d3c9b5ed5c2ab8f383607eef439f0","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d950ec671d0a8e07f3c1a31e94abed86","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1abef2ace5eccb02d60dd73cd5a5ee4c","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5f0a3044029d1cc081b5887eb4deb07","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d57c697f1446940ec4bfe669c962e2c4","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"be41035d7b941482a1e1ae6a5c5dcca5","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"10f7d9da7564f27f8ddf4a162b6da6d3","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1d0520af549e0c3581f15173cc713ca1","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d65083f97fd741cff028472563eddb79","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"da7f24f00653ebac660ac1c0821ed33d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7cb5ae9e65516ea2235f0721f6aac43c","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f64453cbf9671f28158677fa5c43967a","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"33f317af5428801f944a478d2c1e38e5","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"e5f574297300aa8a2709dbc28337c582","signature":"9d8e81d3a1e00da99b573c4fdaede2c4","impliedNodeFormat":99},{"version":"5bac83d1dccda3197da2606db1ac3c89","impliedNodeFormat":99},{"version":"006bbe75d9dc7ccf680d5b3118033f1f","impliedNodeFormat":99},{"version":"67820a5fcc47f78aa82c9b0ff630a44d","impliedNodeFormat":99},{"version":"337b6cdf77b57ce90d09ddac000c74fc","impliedNodeFormat":99},{"version":"c9e5a8b8853281fd2a7490f1150a4593","impliedNodeFormat":99},{"version":"977cfa0e70eae9a396843eac6e67efa6","impliedNodeFormat":99},{"version":"8d9042d3b304792479c25ade194f1bad","impliedNodeFormat":99},{"version":"1f55ed21bf520915c4c9aeda10d31f45","impliedNodeFormat":99},{"version":"48cc158308806fc03a0c33bac87c9389","impliedNodeFormat":99},{"version":"ece8df1762edbc3f71651cbf688a7214","impliedNodeFormat":99},{"version":"0868d21131f63c6318ecade7eb7210be","impliedNodeFormat":99},{"version":"8dcbe656772cea64e3bb7ff0b5d59f37","impliedNodeFormat":99},{"version":"a5a0d22c49f369c16e12c1e5813ab6d3","impliedNodeFormat":99},{"version":"c51a9a4153a693d98890ac03ee84c855","impliedNodeFormat":99},{"version":"9ac07717997d43affd1498e85689a1a3","impliedNodeFormat":99},{"version":"a7e8132761007fe6701dbf4326024341","impliedNodeFormat":99},{"version":"f1a5fa6676aa7ac22654446cad9d3d95","impliedNodeFormat":99},{"version":"4c11e2a8740860fa46e4ec7c077b0aec","impliedNodeFormat":99},"46adab8b8b66b08b5e7c0e8fab6a1ca6","a9fe29dcdd4288cacf574947747a4572","daada721cfdc43aa8e7c2e2d14d760de","1875116298cba1325500d3f1eac8bbf9","53a6603f36cd656a1fb80328ec67c2da","5d253feb3ce379964ce328df2e292f33","2ea6f8b0175c6790a666f87545015791","4ef66462d69c6b7504ef14011caac866","2f9112269cc3c45d1fb3d62f3ccb7097","ffb6ed8d47df8ca98044478684c0af40","cbc1f06fbfe43eb20a752fa368855819","2de5baa83f63307a4dd74d7aa2dd5254","3eeffcd208fa163e66f8769b350f0445","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","ee9981834b9f6f6958887811182849e8","5175ffa851d494a5195ffdebf8ed7285","89cf60624d459ce663be118a626d5fdc","1d1bc42979730b680201df62a3c1ac22","cb5ffae433c93a1431c0000260c7d0c3","9bb07208f876b5e95d56a3d2e9b9a427","0b02ecd3af1ccccee2f5c605903848f8","7454a3a8b97184f2d9432fa08bea4550","5ec4d3086f21642d2aeae2133b49ceeb","8318e3c39365fe3a3cfb375f5c29ab04","9e29bd130ef2dafefc736f6ab792a301","cde3fe3c0bfe6e037b07e7251fb1c3d3","c5a965bdb35a433f7fb044dcb56d485c","96b06af537c71de0a80e9ed880958afd","3008879c54fc6e5b56c202a9d7b09211","1339976f87e671ebf4b5ff1f36594612","0a95994056ab784c17e3331cd56bff1c","a9356de7c324c6f49c15587032b1f65f","f763a0656991aee48818a73fe218b09c","1904e67dd51f8bf1517f05edbfada0ea",{"version":"27caf3d1ca382dbe6c5972da661a0c90","impliedNodeFormat":99},{"version":"44ebf9c9d31295ba6c8e8269158d9a08","impliedNodeFormat":99},{"version":"23e2467c2b42be0e0e30c434125a9bf7","impliedNodeFormat":99},{"version":"4a1dc81d4a48c84e39c5573bc6a36181","impliedNodeFormat":99},{"version":"313de785aa7f53811273f58137396514","impliedNodeFormat":99},{"version":"1b9b690b1f336ef9423e124a808fe9bc","impliedNodeFormat":99},{"version":"1e294f2d41148543bdc673d2bff201c1","impliedNodeFormat":99},{"version":"7cf32e882dd594ac59d9e80978aa42ea","impliedNodeFormat":99},{"version":"8b5081e477e7845ac094d6b6cb5e8ec0","impliedNodeFormat":99},{"version":"973904e4766d26c9c60b05f71e718c7b","impliedNodeFormat":99},{"version":"41e03d403b9e0d632f3af81214cd8345","impliedNodeFormat":99},{"version":"523c21a5413305f17526b5b6cf535179","impliedNodeFormat":99},{"version":"eef5d85571d408190ce31d195bf03ed2","impliedNodeFormat":99},{"version":"115ccee921a92e3cade320d8c78eafc6","impliedNodeFormat":99},{"version":"e97d44ee39595a8d8e1e6cdaaf7b4fed","impliedNodeFormat":99},{"version":"265783c002544231a2c57c1b345e1cea","impliedNodeFormat":99},{"version":"3492503daa6bca0bbbbb5a1dffcbc28c","impliedNodeFormat":99},{"version":"2271435d60ba7a766a8c224d3d3ff69f","impliedNodeFormat":99},{"version":"00bc3f83d4845807f8271ab3c745ff67","impliedNodeFormat":99},{"version":"76feb28b8baa5c981fe2a45b142ce3df","impliedNodeFormat":99},{"version":"7dfc5fc25141c4801d366faead24a8aa","impliedNodeFormat":99},{"version":"c84033a035e3223e4c8e6597de17e34f","impliedNodeFormat":99},{"version":"a990fb9133bed0a8bae451d2395954e4","impliedNodeFormat":99},{"version":"f93b22d260e2742e66ecb5c85dfc0d43","impliedNodeFormat":99},{"version":"bc5e5b20c7d90084a0c1a76f912d8b8f","impliedNodeFormat":99},{"version":"f911f4d32a20b760f2082e6fbde5514f","impliedNodeFormat":99},{"version":"a4acfea690d58c4b47dfe275e2743f7f","impliedNodeFormat":99},{"version":"001090557d1d3df1f2482abcf561af1e","impliedNodeFormat":99},{"version":"bc833b857dd9a2ad2a2cc5b60a309d4e","impliedNodeFormat":99},{"version":"d0dd0a02f8c8f11b782f5144ca08db94","impliedNodeFormat":99},{"version":"21433b1e768e15bfe77c63a9b48129ec","impliedNodeFormat":99},{"version":"d79590e60df4adfdd1c6e6c31e7ddf2d","impliedNodeFormat":99},{"version":"7df7c12156e08542ad15262c05194dec","impliedNodeFormat":99},{"version":"443968f2e765f35e0e6919efbe2ecaf5","impliedNodeFormat":99},{"version":"951da67f7f3dbb230f93e18a93119875","impliedNodeFormat":99},{"version":"bd4831330348d981b0f1410853eed767","impliedNodeFormat":99},{"version":"8c4b62b4a00c51da5f8b7caffe0f03ee","impliedNodeFormat":99},{"version":"9d8af42705105f6cfb47f9977e7e284b","impliedNodeFormat":99},{"version":"cafd4971c8d191559ccf3da376bb0fd6","impliedNodeFormat":99},{"version":"a58c141c24aa04a112fc8161e137592d","impliedNodeFormat":99},{"version":"d7ebd2c11fe146421387e883bb5c2ccd","impliedNodeFormat":99},{"version":"c261f3352382743318751612666c0f97","impliedNodeFormat":99},{"version":"138fd8dabde1136c4ff1704e5ddf73cb","impliedNodeFormat":99},{"version":"16a73e4f9e9624e100119801052dc414","impliedNodeFormat":99},{"version":"dbff35b7a2b96efb2e37796539f645d5","impliedNodeFormat":99},{"version":"437e3c97f8de63e451c7e02fdbe47b4d","impliedNodeFormat":99},{"version":"43f5748650e99b4a1400717ceeb6da8c","impliedNodeFormat":99},{"version":"73102c1ff81b38ac4f96268acbc2823b","impliedNodeFormat":99},{"version":"754cd9e61e4f9feafe2404c533c8a936","impliedNodeFormat":99},{"version":"a7be7da3e0ff8a23e075c90fda9b6a33","impliedNodeFormat":99},{"version":"5a6e5aeecea8b44bac91fe48e7628d87","impliedNodeFormat":99},{"version":"ed8bf8b7b6254862a4836633e9c3f0f1","impliedNodeFormat":99},{"version":"549cdf7be9336865a24bbec9308f85c0","impliedNodeFormat":99},{"version":"484dc5040b1f3d2fd749a7531d0c6405","impliedNodeFormat":99},{"version":"0ba7ff53392a2a3b944cacbcf0b78b07","impliedNodeFormat":99},{"version":"17ca75b48a8fc1862386fea6fa7bdbff","impliedNodeFormat":99},{"version":"9b4982c4091dd5f18b8c1c81cf137c07","impliedNodeFormat":99},{"version":"5758228826deea77ba36666c076f1c0a","impliedNodeFormat":99},{"version":"4645c760c24932f240081a5688f9e5f4","impliedNodeFormat":99},{"version":"80d6a2ecb0aa22e5ee13b8ab2762cf32","impliedNodeFormat":99},{"version":"8f129880dcb2313f3badfed346ec2581","impliedNodeFormat":99},{"version":"035542f7200f4d22e59ecfa10f94739e","impliedNodeFormat":99},{"version":"2db291ced724b83ae656c59391a00271","impliedNodeFormat":99},{"version":"a9ac721f09236b64e6854577cfc36eaf","impliedNodeFormat":99},{"version":"5c207e5b00d64cd0c543e274e6036525","impliedNodeFormat":99},{"version":"b483fb83736a2f60e7194b82d08fb9c6","impliedNodeFormat":99},{"version":"efd280bdeb72be78b6ea34915ef99611","impliedNodeFormat":99},{"version":"dcdd6487a6e5216fafcf5f65da2cc51c","impliedNodeFormat":99},{"version":"925ec76390339184338710dad0d25956","impliedNodeFormat":99},{"version":"b6be181d2552152e604924fd778377b5","impliedNodeFormat":99},{"version":"470e247d47debe2ea3c38259a6501c4c","impliedNodeFormat":99},{"version":"cdde658c7e1d8ea776570f1a5bfdaea1","impliedNodeFormat":99},{"version":"d8897812d9461364c1cd0a7ab2ae3359","impliedNodeFormat":99},{"version":"727eddfa962c0d5525390790aab9887d","impliedNodeFormat":99},{"version":"42d636c6f1c779ae3aa3e110c1b5a353","impliedNodeFormat":99},{"version":"976728a6668b70e6f1f0957c4fc9ca80","impliedNodeFormat":99},{"version":"7bdf4473435fd37a93cd98ec19ca9996","impliedNodeFormat":99},{"version":"f2a6f84008e97af5558200cf59b6efb2","impliedNodeFormat":99},{"version":"f2b7e4cef7d066005ed1c264156e24c9","impliedNodeFormat":99},{"version":"ef8f19666296edc7210bd61a0bf2a704","impliedNodeFormat":99},{"version":"aa5917b17f32412bc9a80d56b59fd652","impliedNodeFormat":99},{"version":"0932ed4363b078dbdd8c1162783ab9cb","impliedNodeFormat":99},{"version":"9419011376155b09d207e3430d3fee58","impliedNodeFormat":99},{"version":"7ee2ab115efa72fc789fcfd2e14ff97d","impliedNodeFormat":99},{"version":"5fd84cb7055cb580f7698d4a32062548","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"913b52a39743d1c11984e4e124b1f3a8","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3e57a4cd3267159f3772bebd73534451","affectsGlobalScope":true,"impliedNodeFormat":1},"fe51d7a9bcdbcce1e65bbcf39b212298",{"version":"849a1873c4e917b0887368c1be897faa","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"69ee0752d1e70c56ca160360425752a9","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3ddc6139fafd9dfb16bb112a7b74f610","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9af0a7e3ef1c42cd066b9f8d365cc1ba","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9eca652586205dc5b07f9ba57b1c8500","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ec5f75939754ce94652189ec7d0d3058","affectsGlobalScope":true,"impliedNodeFormat":1},"628b774b54637325e286752c79c12432","bb1f9e3091b88e9d0e93b7198c736af3","514fd35e5eb35bb2e5cbb908af0a0aa2","ed57ae88565308729f2327f26d684976","dcd932d6b0038f2e250e30dc10125b22","9508c917bd7e458745e222a82dd24ef0","fabf86f455f96b90538cc26320ab2765","14550b4cd9f433e0addd8b6d67614d23","cf0ac6aebc25cb780674653aaeee688e","35fef7bac8048f583e4ce6eaa0c2a4c0","6752dc653fc7a333027249fd851fdb62","b9ad7e689b46dfba362c1bf174e69018","8b0a2930dfabdf27c69c6bb1eeabcdc8","4513b1ed15523d247040689f37fa9db2","5c0c499eed773a750903d9497beafacd","2377da227d1bac82ff7b3f2081ddf8d3","beef985b474fefeb80d27fb2c8778371","c79fc9d9f09ae598a374ae7c0b5284a4","f2caa3cebb1e6be855519004830a6be0","8ebc9f2a77c900e710801214c5cb994c","ec617a0e0577dd6a3210c3b067ecb325","1db5d06e485bd82d6d5f6e36925a8714","24b864518967840216c779b5e5f00975","8719cd8047700bfb6046798390053823","f2840afb502c94db92dab0fb8d27812f","a7e7d08b372210c203745d3eac61a411","531183cc80535e0e94226d720e5eb038","f627eb958ca52c85e42f04dce4661f86","9a43fc665bce9012a3d5fe1b574ff4dc","13f4b4da6546a34719fd6bde15fb63dd","a589216508844bfc00e62fc2d97fda45","865aea1c3209e31b076cb6fe780e769e","12e64aaf26af0f5c8f1b263dd66e3feb","928971ebbcdf5b093ef37669b33bddf6","b744265d8ad12b7d4d5c5dc35d18d44e","eff32168b8348b822afeed9cbf61afa7","9aafd1f29b4d8861c1c6c34bf83c0721",{"version":"a127795c4dad633990c87aa0b86831e5","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d0fd03004a6221614a1eaf764f324f74","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"45df94b3c51b898624bacc2bcd6d9eb2","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7d352f71d1b1bcc12c79dd0e4597537c","affectsGlobalScope":true,"impliedNodeFormat":1},"9a624e1940639eca005bbfa0b0795e0c","bc36d91e82ffa66a49621888701e71dc","f8c976cb12f3420b8cc8d03d579ada06",{"version":"ba7e459f9d165c391370248c1b6d27e6","affectsGlobalScope":true,"impliedNodeFormat":1},"1bd6f05fb97456c25967ff016b829638","10ea0c4d80d7a0333c1e857199853b74",{"version":"9fc8636e70e507ea8d98a7aabd265ee5","affectsGlobalScope":true,"impliedNodeFormat":1},"b2b472cd0bf0f8d5f022e00ca1c401f4",{"version":"2d78fd1079375d411033f64faae0c89b","affectsGlobalScope":true,"impliedNodeFormat":1},"2c854dda7450575791a388d8f0f29e31","61dd307aef9adea6fd307b5364c843da","4eb05de87a87ea4d8a41f4b2229bada4","5c5c7649711b5d982cf39fe9b6744080","958d9865bfe33c94973e3d58ac66b1d0",{"version":"e69aeb78ba4fd8c4493f80e9e81737e5","affectsGlobalScope":true,"impliedNodeFormat":1},"f2c1804a9a9d8f64eb2a67a797f9baef","b857d33151fcd39b213bb7c17cf12969","2e1cff79cd7dfb7d8281322931a687bd","3c217295039c32f3fecd8f7bab2e43e3","9fb3b9387eadc1aa053821d6c96b5769","1690a4da2f50085917cb933f6f2556cb","9d6686cc730682ed548fac9462ac4346",{"version":"f6be7fda5b8729494c54d9983698c290","affectsGlobalScope":true,"impliedNodeFormat":1},"0bb08d83737c91e9ca2c2c3b99ae99a2","a4e9f4bc0d06a3823fff0f55f31eac93","43b4e399ab399cf8ecd47e481abddeeb",{"version":"0769bf84d24c283d5b7d02cba94e7234","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9ffa943f975def71e2b112b28f946caa","affectsGlobalScope":true,"impliedNodeFormat":1},"d1dfd59bf8b7e71f40ee1d3a2f1b5fcf","9292aa21e6668349e0642faa07be7750","8ccb81bc00ea59aa908d31dbe50bb31a","0f80958d77cd6301b43c1d7904e3e4bc","0548d84bf13d6b5d3ef34d9755610be1","65398feea84a451329cd99b26a547514","b7e2bcd9d00432e1792823ed5da41128","739428f35658f9391641b3dfc9433fb2","c8206d568b54e5ea06131963eecd576a","15878f4f50c2e562c0768eb735c2aed5",{"version":"4e6c56c4b055178cfc9edc254d744a5b","affectsGlobalScope":true,"impliedNodeFormat":1},"329e5617fbab8b2de9bffcc41d07bb5d","6b82bee8c1c2c6d1a7f4ae0c8a47a006",{"version":"ea001113f32054398156e39095350f0a","affectsGlobalScope":true,"impliedNodeFormat":1},"7345aabef559e464447357f201cc05f8","0807835722b35673885024d2b10c282a","d63b35c1a5097295f0659f5583c8fb83","3509aa3de97926c2922f378a248ddb48",{"version":"78ce1294fea4c9fccd0600374816a75f","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9edcc62fa17b31ebfd8b865c8304a4a3","affectsGlobalScope":true,"impliedNodeFormat":1},"b0cbfb9126a2a747bd567e9b79c65b58","4cfe493c958076cdc2b0609a8f889091","3bb54ead687024118ffeb8d7337370a2",{"version":"90c1b6a898bba7f42c0020815dc93eba","affectsGlobalScope":true,"impliedNodeFormat":1},"aa2008c843fac96764def81cfdf70c58","1852b3a174acea86c49700b15f7d1539","6d6fcab6a7663b8314c5123ae0389e0a","a918e723cfac239d6a8a521275f9e03b","cd5c183c2bad150213a0cccaafe937e2",{"version":"13fc504fe4ab28ad42bce734f31e72e5","affectsGlobalScope":true,"impliedNodeFormat":1},"f8059a9ddf1aeefd103fce9c853541b9","f100181a3e9ff7f5b23eed47dd66a1de","fbb1086d78fad2e81eefa859d53b6ffd","fa614d3a843db2f4f4f804155cf537a6","406d0e50f03efd9f1bf194e636900c24",{"version":"34794242e25b053da9dc388a66c668b3","impliedNodeFormat":99},{"version":"0a5bcd147b373c42da20477b927d3c0a","impliedNodeFormat":99},{"version":"31e79548810041f1b9c211f080ec3afa","impliedNodeFormat":99},{"version":"65db998bccd72d596c2d1f11202a7667","impliedNodeFormat":99},{"version":"cdfacbac9a70df2daf00f3750400b268","impliedNodeFormat":99},{"version":"718c6db90f999bfc22fe6ea96f86965e","impliedNodeFormat":99},{"version":"b720f9a90ecbd067b820c7d0f60b6e66","impliedNodeFormat":99},{"version":"81b30454a6f9767e82f6da79e80e5dd1","impliedNodeFormat":99},{"version":"84e43d492d31521bad00121ce6edfa39","impliedNodeFormat":99},{"version":"f6f103a8172b974a843e4f08f7a1ea90","impliedNodeFormat":99},{"version":"eb0bb93d6eee7287881c87fa87399bfb","signature":"72d394de853c6cc1a4cd714e5677efd1","impliedNodeFormat":99},{"version":"2830580b9566067e450f5110f5ef84ab","signature":"eb2c777d84cf658ce93461d5357abece","impliedNodeFormat":99},{"version":"919eb0b6543fe7298bdb9e8db26d6dfb","signature":"a661aa8bb4266e7c25322f9614501a7d","impliedNodeFormat":99},{"version":"276ce9d74b3640530994138008d7d998","signature":"9c58ec54ba3468b040aee81a20bd0d9c","impliedNodeFormat":99}],"fileIdsList":[[201,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,397],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,394,396,398],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[286,287,288,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,332,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[289,290,291,292,293,294,295,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,388,389],[291,332,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,332,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,395],[291,304,308,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,304,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,299,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,301,304,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,299,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390],[291,296,297,300,303,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,304,311,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,296,302,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,304,325,326,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,300,304,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390],[291,325,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390],[291,298,299,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390],[291,298,299,300,301,302,303,304,305,306,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,326,327,328,329,330,331,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,304,319,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,304,311,312,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,302,304,312,313,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,303,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,296,299,304,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,304,308,312,313,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,308,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,302,304,307,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,296,301,304,311,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,299,304,325,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390],[200,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[189,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[189,192,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[111,183,187,189,190,191,192,193,194,195,196,197,198,199,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[107,109,192,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[189,190,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[108,114,189,191,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[109,111,113,114,115,116,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[111,113,115,116,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[113,116,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[111,113,115,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[108,111,113,114,116,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[107,109,110,111,112,113,114,115,116,117,118,119,183,184,185,186,187,188,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[107,109,110,113,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[109,110,113,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[113,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[107,108,110,111,112,114,115,116,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[107,108,109,113,189,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[113,114,115,116,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[115,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[214,215,216,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[106,214,215,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[203,214,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,400,401,402],[106,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,399],[223,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,400],[106,279,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,399],[209,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[106,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[209,210,211,212,213,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[106,209,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[218,219,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[106,218,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[94,95,98,106,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[106,227,228,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[227,228,229,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[106,227,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[106,203,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[106,223,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[224,225,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[106,224,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[203,221,222,223,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,405,406],[106,223,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,405],[203,279,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,404],[96,97,98,203,207,221,222,223,244,245,246,247,248,249,250,251,252,253,273,274,275,276,277,278,280,281,282,284,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[94,207,281,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[94,203,206,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[90,92,93,94,95,106,205,207,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[94,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[106,204,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[99,100,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[99,100,103,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[99,100,101,102,103,104,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[99,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[96,105,106,203,205,208,217,220,226,230,231,232,233,234,235,236,237,238,239,240,242,243,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[94,106,203,204,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[106,203,204,221,222,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[90,203,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[106,221,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[106,203,204,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[106,203,204,231,233,235,236,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[106,203,204,221,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[94,95,206,207,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[205,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[92,94,98,105,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[90,241,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[90,106,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[89,106,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[202,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[92,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[92,283,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[279,285,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,408],[94,96,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[91,255,256,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[90,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[94,260,261,262,263,264,265,266,267,268,269,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[89,90,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[89,94,253,271,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[89,94,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[94,106,203,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[89,93,94,95,97,246,252,253,254,257,258,259,270,272,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[94,98,203,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[92,93,94,95,97,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[94,95,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[89,90,91,92,93,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[94,95,98,203,223,247,279,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[94,247,249,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[223,245,247,251,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,403,407],[94,106,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[91,94,95,98,203,223,245,246,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[223,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389],[88,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,410,411],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,409,410],[88,201,291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,409],[291,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,411]],"options":{"allowUnreachableCode":false,"allowUnusedLabels":false,"composite":true,"declaration":true,"declarationMap":true,"exactOptionalPropertyTypes":true,"isolatedDeclarations":true,"importHelpers":true,"module":199,"newLine":2,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noPropertyAccessFromIndexSignature":true,"noUncheckedIndexedAccess":true,"noEmitOnError":true,"noUnusedLocals":true,"noUnusedParameters":true,"noImplicitOverride":true,"noUncheckedSideEffectImports":true,"outDir":"./","removeComments":false,"rootDir":"../src","skipLibCheck":true,"strict":true,"stripInternal":true,"skipDefaultLibCheck":false,"sourceMap":true,"target":99,"tsBuildInfoFile":"./.tsbuildinfo","verbatimModuleSyntax":true,"allowSyntheticDefaultImports":true,"esModuleInterop":true},"referencedMap":[[202,1],[398,2],[397,3],[394,4],[399,5],[395,6],[337,7],[338,8],[339,9],[291,10],[340,11],[341,12],[342,13],[286,6],[289,14],[287,6],[288,6],[343,15],[344,16],[345,17],[346,18],[347,19],[348,20],[349,21],[350,22],[351,23],[352,24],[353,25],[292,6],[290,6],[354,26],[355,27],[356,28],[390,29],[357,30],[358,31],[359,32],[360,33],[361,34],[362,35],[363,36],[364,37],[365,38],[366,39],[367,40],[368,41],[369,42],[370,43],[371,44],[372,45],[374,46],[373,47],[375,48],[376,49],[377,50],[378,51],[379,52],[380,53],[381,54],[382,55],[383,56],[384,57],[385,58],[386,59],[387,60],[293,6],[294,6],[295,6],[333,61],[334,6],[335,6],[336,6],[388,62],[389,63],[392,6],[393,6],[391,3],[396,64],[404,3],[86,6],[87,6],[15,6],[14,6],[2,6],[16,6],[17,6],[18,6],[19,6],[20,6],[21,6],[22,6],[23,6],[3,6],[24,6],[25,6],[4,6],[26,6],[30,6],[27,6],[28,6],[29,6],[31,6],[32,6],[33,6],[5,6],[34,6],[35,6],[36,6],[37,6],[6,6],[41,6],[38,6],[39,6],[40,6],[42,6],[7,6],[43,6],[48,6],[49,6],[44,6],[45,6],[46,6],[47,6],[8,6],[53,6],[50,6],[51,6],[52,6],[54,6],[9,6],[55,6],[56,6],[57,6],[59,6],[58,6],[60,6],[61,6],[10,6],[62,6],[63,6],[64,6],[11,6],[65,6],[66,6],[67,6],[68,6],[69,6],[70,6],[12,6],[71,6],[72,6],[73,6],[74,6],[75,6],[1,6],[76,6],[77,6],[13,6],[78,6],[79,6],[80,6],[81,6],[82,6],[83,6],[84,6],[85,6],[311,65],[321,66],[310,65],[331,67],[302,68],[301,6],[330,3],[324,69],[329,68],[304,70],[318,71],[303,72],[327,73],[299,74],[298,3],[328,75],[300,76],[305,66],[306,6],[309,66],[296,6],[332,77],[322,78],[313,79],[314,80],[316,81],[312,82],[315,83],[325,3],[307,84],[308,85],[317,86],[297,6],[320,78],[319,66],[323,6],[326,87],[201,88],[193,89],[199,90],[194,90],[196,90],[190,89],[200,91],[195,92],[197,90],[198,90],[191,93],[192,94],[186,95],[114,96],[185,97],[116,98],[184,6],[115,99],[189,100],[188,101],[187,102],[107,6],[118,103],[117,96],[119,6],[109,97],[113,104],[108,6],[110,105],[111,106],[112,6],[120,107],[121,107],[122,107],[123,107],[124,107],[125,107],[126,107],[127,107],[128,107],[129,107],[130,107],[131,107],[132,107],[133,107],[134,107],[135,107],[137,107],[136,107],[138,107],[139,107],[140,107],[141,107],[142,107],[143,107],[144,107],[183,108],[145,107],[146,107],[147,107],[148,107],[149,107],[150,107],[151,107],[152,107],[153,107],[154,107],[155,107],[156,107],[157,107],[158,107],[159,107],[160,107],[162,107],[161,107],[164,107],[163,107],[165,107],[166,107],[167,107],[168,107],[169,107],[170,107],[171,107],[172,107],[173,107],[174,107],[175,107],[176,107],[177,107],[178,107],[179,107],[182,107],[180,107],[181,107],[217,109],[216,110],[215,111],[403,112],[401,113],[402,114],[400,115],[209,6],[213,116],[211,117],[214,118],[210,116],[212,119],[220,120],[219,121],[218,122],[229,123],[230,124],[228,125],[227,126],[276,127],[226,128],[225,129],[224,130],[407,131],[406,132],[405,133],[285,134],[282,135],[207,136],[208,137],[206,138],[205,139],[96,117],[100,6],[102,140],[104,141],[103,6],[105,142],[101,143],[99,6],[244,144],[239,139],[233,145],[235,146],[204,147],[232,148],[238,139],[236,149],[237,150],[231,151],[234,149],[240,139],[281,152],[243,153],[106,154],[242,155],[241,156],[90,157],[221,6],[203,158],[283,159],[284,160],[92,6],[409,161],[222,6],[97,162],[257,163],[256,138],[255,164],[91,6],[268,138],[264,138],[270,165],[261,6],[263,138],[269,138],[267,138],[262,6],[260,166],[265,138],[266,138],[272,167],[254,168],[258,138],[252,138],[246,169],[273,170],[249,171],[98,172],[253,168],[259,173],[274,138],[93,138],[95,138],[271,6],[89,164],[94,174],[278,6],[279,6],[280,175],[250,176],[408,177],[251,178],[247,179],[248,180],[245,180],[223,117],[275,6],[277,6],[88,6],[412,181],[411,182],[410,183],[413,184]],"latestChangedDtsFile":"./register.d.ts"}
package/dist/exif.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * When and where a photo was taken, from the EXIF block of a JPEG: the time of the shutter
3
+ * (DateTimeOriginal, with OffsetTimeOriginal when the camera writes it) and the GPS position. It
4
+ * reads these facts only, without a dependency. A JPEG without EXIF (a screenshot, an edited
5
+ * copy) gives no facts.
6
+ */
7
+ export interface PhotoFacts {
8
+ /** `YYYY-MM-DDTHH:MM:SS`, with the offset when the photo has one */
9
+ readonly takenAt?: string | undefined;
10
+ readonly lat?: number | undefined;
11
+ readonly lon?: number | undefined;
12
+ }
13
+ /** This function reads the time and the GPS position of a photo from the bytes of a JPEG. */
14
+ export declare const readExif: (bytes: Uint8Array) => PhotoFacts;
15
+ //# sourceMappingURL=exif.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exif.d.ts","sourceRoot":"","sources":["../src/exif.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,UAAU;IACzB,oEAAoE;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAiCD,6FAA6F;AAC7F,eAAO,MAAM,QAAQ,UAAW,UAAU,KAAG,UAqE5C,CAAC"}
package/dist/exif.js ADDED
@@ -0,0 +1,109 @@
1
+ /**
2
+ * When and where a photo was taken, from the EXIF block of a JPEG: the time of the shutter
3
+ * (DateTimeOriginal, with OffsetTimeOriginal when the camera writes it) and the GPS position. It
4
+ * reads these facts only, without a dependency. A JPEG without EXIF (a screenshot, an edited
5
+ * copy) gives no facts.
6
+ */
7
+ const TAG_EXIF_IFD = 0x8769;
8
+ const TAG_GPS_IFD = 0x8825;
9
+ const TAG_DATETIME_ORIGINAL = 0x9003;
10
+ const TAG_OFFSET_TIME_ORIGINAL = 0x9011;
11
+ const TYPE_ASCII = 2;
12
+ const TYPE_RATIONAL = 5;
13
+ /** The TIFF block in the APP1 "Exif" segment of a JPEG. */
14
+ const tiffOf = (bytes) => {
15
+ if (bytes[0] !== 0xff || bytes[1] !== 0xd8)
16
+ return undefined; // not a JPEG
17
+ let at = 2;
18
+ while (at + 4 <= bytes.length) {
19
+ if (bytes[at] !== 0xff)
20
+ return undefined;
21
+ const marker = bytes[at + 1] ?? 0;
22
+ const length = ((bytes[at + 2] ?? 0) << 8) | (bytes[at + 3] ?? 0);
23
+ if (marker === 0xe1 && String.fromCharCode(...bytes.subarray(at + 4, at + 8)) === "Exif") {
24
+ const size = Math.min(length - 8, bytes.length - (at + 10));
25
+ return size > 0 ? new DataView(bytes.buffer, bytes.byteOffset + at + 10, size) : undefined;
26
+ }
27
+ if (marker === 0xda)
28
+ return undefined; // the image data starts: there is no EXIF
29
+ at += 2 + length;
30
+ }
31
+ return undefined;
32
+ };
33
+ /** This function reads the time and the GPS position of a photo from the bytes of a JPEG. */
34
+ export const readExif = (bytes) => {
35
+ const tiff = tiffOf(bytes);
36
+ if (tiff === undefined || tiff.byteLength < 8)
37
+ return {};
38
+ const little = tiff.getUint16(0) === 0x4949;
39
+ const within = (at, size) => at >= 0 && at + size <= tiff.byteLength;
40
+ const u16 = (at) => (within(at, 2) ? tiff.getUint16(at, little) : 0);
41
+ const u32 = (at) => (within(at, 4) ? tiff.getUint32(at, little) : 0);
42
+ /** The entries of one IFD: tag to type, count and the position of the value or its offset */
43
+ const entries = (offset) => {
44
+ const out = new Map();
45
+ if (!within(offset, 2))
46
+ return out;
47
+ const n = u16(offset);
48
+ for (let i = 0; i < n; i += 1) {
49
+ const entry = offset + 2 + i * 12;
50
+ if (!within(entry, 12))
51
+ break;
52
+ out.set(u16(entry), { type: u16(entry + 2), count: u32(entry + 4), at: entry + 8 });
53
+ }
54
+ return out;
55
+ };
56
+ const ascii = (field) => {
57
+ if (field === undefined || field.type !== TYPE_ASCII)
58
+ return undefined;
59
+ const start = field.count > 4 ? u32(field.at) : field.at;
60
+ if (!within(start, field.count))
61
+ return undefined;
62
+ let text = "";
63
+ for (let i = 0; i < field.count; i += 1) {
64
+ const code = tiff.getUint8(start + i);
65
+ if (code === 0)
66
+ break;
67
+ text += String.fromCharCode(code);
68
+ }
69
+ return text;
70
+ };
71
+ const rationals = (field) => {
72
+ if (field === undefined || field.type !== TYPE_RATIONAL)
73
+ return undefined;
74
+ const start = u32(field.at);
75
+ if (!within(start, field.count * 8))
76
+ return undefined;
77
+ return Array.from({ length: field.count }, (_, i) => {
78
+ const denominator = u32(start + i * 8 + 4);
79
+ return denominator === 0 ? 0 : u32(start + i * 8) / denominator;
80
+ });
81
+ };
82
+ const ifd0 = entries(u32(4));
83
+ const facts = {};
84
+ const exifPointer = ifd0.get(TAG_EXIF_IFD);
85
+ if (exifPointer !== undefined) {
86
+ const exif = entries(u32(exifPointer.at));
87
+ const original = ascii(exif.get(TAG_DATETIME_ORIGINAL)); // "YYYY:MM:DD HH:MM:SS"
88
+ const offset = ascii(exif.get(TAG_OFFSET_TIME_ORIGINAL)); // "+HH:MM"
89
+ const match = original !== undefined ? /^(\d{4}):(\d{2}):(\d{2}) (\d{2}:\d{2}:\d{2})$/.exec(original) : null;
90
+ if (match !== null) {
91
+ const zone = offset !== undefined && /^[+-]\d{2}:\d{2}$/.test(offset) ? offset : "";
92
+ facts.takenAt = `${match[1]}-${match[2]}-${match[3]}T${match[4]}${zone}`;
93
+ }
94
+ }
95
+ const gpsPointer = ifd0.get(TAG_GPS_IFD);
96
+ if (gpsPointer !== undefined) {
97
+ const gps = entries(u32(gpsPointer.at));
98
+ const degrees = (parts) => parts !== undefined && parts.length === 3 ? (parts[0] ?? 0) + (parts[1] ?? 0) / 60 + (parts[2] ?? 0) / 3600 : undefined;
99
+ const lat = degrees(rationals(gps.get(2)));
100
+ const lon = degrees(rationals(gps.get(4)));
101
+ // 0, 0 is the value of a camera without a position
102
+ if (lat !== undefined && lon !== undefined && (lat !== 0 || lon !== 0)) {
103
+ facts.lat = Math.round((ascii(gps.get(1)) === "S" ? -lat : lat) * 1e6) / 1e6;
104
+ facts.lon = Math.round((ascii(gps.get(3)) === "W" ? -lon : lon) * 1e6) / 1e6;
105
+ }
106
+ }
107
+ return facts;
108
+ };
109
+ //# sourceMappingURL=exif.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exif.js","sourceRoot":"","sources":["../src/exif.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B,MAAM,WAAW,GAAG,MAAM,CAAC;AAC3B,MAAM,qBAAqB,GAAG,MAAM,CAAC;AACrC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AACxC,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,2DAA2D;AAC3D,MAAM,MAAM,GAAG,CAAC,KAAiB,EAAwB,EAAE;IACzD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC,CAAC,aAAa;IAC3E,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,OAAO,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QACzC,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YACzF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAC5D,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7F,CAAC;QACD,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC,CAAC,0CAA0C;QACjF,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAQF,6FAA6F;AAC7F,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAiB,EAAc,EAAE;IACxD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACzD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;IAC5C,MAAM,MAAM,GAAG,CAAC,EAAU,EAAE,IAAY,EAAW,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC;IAC9F,MAAM,GAAG,GAAG,CAAC,EAAU,EAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,GAAG,GAAG,CAAC,EAAU,EAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAErF,6FAA6F;IAC7F,MAAM,OAAO,GAAG,CAAC,MAAc,EAAsB,EAAE;QACrD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAiB,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACnC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;gBAAE,MAAM;YAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,KAAwB,EAAsB,EAAE;QAC7D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,SAAS,CAAC;QACvE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAClD,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACtC,IAAI,IAAI,KAAK,CAAC;gBAAE,MAAM;YACtB,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,CAAC,KAAwB,EAAwB,EAAE;QACnE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;YAAE,OAAO,SAAS,CAAC;QAC1E,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACtD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAClD,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3C,OAAO,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC;QAClE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAqD,EAAE,CAAC;IACnE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,wBAAwB;QACjF,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,WAAW;QACrE,MAAM,KAAK,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,+CAA+C,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7G,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,MAAM,KAAK,SAAS,IAAI,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACpF,KAAK,CAAC,OAAO,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;QAC3E,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,CAAC,KAA2B,EAAsB,EAAE,CAClE,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1H,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,mDAAmD;QACnD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACvE,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YAC7E,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAC/E,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./module.js";
2
+ export * from "./procedures.js";
3
+ export * from "./exif.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ // The root registers nothing: import "<package>/register", or give the module to createRegistry()
2
+ export * from "./module.js";
3
+ export * from "./procedures.js";
4
+ export * from "./exif.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The procedures of @procedures/exif as data. Importing this file registers nothing.
3
+ */
4
+ import { type ProcedureModule, type ProcedureRegistry } from "@procedures/client";
5
+ export declare const exifModule: ProcedureModule;
6
+ export default exifModule;
7
+ /**
8
+ * This function registers the procedures of @procedures/exif in a registry. The default is the
9
+ * global registry.
10
+ */
11
+ export declare function registerExifProcedures(registry?: ProcedureRegistry): void;
12
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAqD,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGrI,eAAO,MAAM,UAAU,EAAE,eAAkE,CAAC;eAE7E,UAAU;AAEzB;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,GAAE,iBAAsC,GAAG,IAAI,CAE7F"}
package/dist/module.js ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The procedures of @procedures/exif as data. Importing this file registers nothing.
3
+ */
4
+ import { defineModule, registerModules, PROCEDURE_REGISTRY } from "@procedures/client";
5
+ import { exifProcedures } from "./procedures.js";
6
+ export const exifModule = defineModule("@procedures/exif", exifProcedures);
7
+ export default exifModule;
8
+ /**
9
+ * This function registers the procedures of @procedures/exif in a registry. The default is the
10
+ * global registry.
11
+ */
12
+ export function registerExifProcedures(registry = PROCEDURE_REGISTRY) {
13
+ registerModules(registry, [exifModule]);
14
+ }
15
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAgD,MAAM,oBAAoB,CAAC;AACrI,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,CAAC,MAAM,UAAU,GAAoB,YAAY,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;AAE5F,eAAe,UAAU,CAAC;AAE1B;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAQ,GAAsB,kBAAkB;IACrF,eAAe,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The procedure of `@procedures/exif`: `exif.read`.
3
+ */
4
+ import { type AnyProcedure } from "@procedures/client";
5
+ /** This function reads the first bytes of a file. */
6
+ export declare function readHead(path: string, size?: number): Promise<Uint8Array>;
7
+ export declare const exifReadProcedure: AnyProcedure;
8
+ export declare const exifProcedures: AnyProcedure[];
9
+ //# sourceMappingURL=procedures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procedures.d.ts","sourceRoot":"","sources":["../src/procedures.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAA+B,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOpF,qDAAqD;AACrD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAS3F;AAQD,eAAO,MAAM,iBAAiB,EAAE,YAWN,CAAC;AAE3B,eAAO,MAAM,cAAc,EAAE,YAAY,EAAwB,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * The procedure of `@procedures/exif`: `exif.read`.
3
+ */
4
+ import { open } from "node:fs/promises";
5
+ import { createProcedure, zodAdapter } from "@procedures/client";
6
+ import { z } from "zod";
7
+ import { readExif } from "./exif.js";
8
+ /** The EXIF block is in the first APP1 segment, at most 64 KiB after the start of the file. */
9
+ const HEAD_BYTES = 128 * 1024;
10
+ /** This function reads the first bytes of a file. */
11
+ export async function readHead(path, size = HEAD_BYTES) {
12
+ const file = await open(path, "r");
13
+ try {
14
+ const buffer = new Uint8Array(size);
15
+ const { bytesRead } = await file.read(buffer, 0, size, 0);
16
+ return buffer.subarray(0, bytesRead);
17
+ }
18
+ finally {
19
+ await file.close();
20
+ }
21
+ }
22
+ const ReadInputSchema = z.object({
23
+ path: z.string().min(1).describe("The path of a JPEG file"),
24
+ });
25
+ const ReadOutputSchema = z.object({ takenAt: z.string().optional(), lat: z.number().optional(), lon: z.number().optional() });
26
+ export const exifReadProcedure = createProcedure()
27
+ .path(["exif", "read"])
28
+ .input(zodAdapter(ReadInputSchema))
29
+ .output(zodAdapter(ReadOutputSchema))
30
+ .meta({
31
+ description: "Read when and where a JPEG photo was taken (EXIF time and GPS position)",
32
+ args: ["path"],
33
+ output: "json",
34
+ effects: { reads: ["fs"], writes: [] },
35
+ })
36
+ .handler(async (input) => readExif(await readHead(input.path)))
37
+ .build();
38
+ export const exifProcedures = [exifReadProcedure];
39
+ //# sourceMappingURL=procedures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procedures.js","sourceRoot":"","sources":["../src/procedures.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAqB,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAmB,MAAM,WAAW,CAAC;AAEtD,+FAA+F;AAC/F,MAAM,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC;AAE9B,qDAAqD;AACrD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,IAAI,GAAW,UAAU;IACpE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1D,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACvC,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CAC5D,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAE9H,MAAM,CAAC,MAAM,iBAAiB,GAAiB,eAAe,EAAE;KAC7D,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACtB,KAAK,CAAC,UAAU,CAAY,eAAe,CAAC,CAAC;KAC7C,MAAM,CAAC,UAAU,CAAa,gBAAgB,CAAC,CAAC;KAChD,IAAI,CAAC;IACJ,WAAW,EAAE,yEAAyE;IACtF,IAAI,EAAE,CAAC,MAAM,CAAC;IACd,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;CACvC,CAAC;KACD,OAAO,CAAC,KAAK,EAAE,KAAgB,EAAuB,EAAE,CAAC,QAAQ,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;KAC9F,KAAK,EAAkB,CAAC;AAE3B,MAAM,CAAC,MAAM,cAAc,GAAmB,CAAC,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Importing this file registers the procedures of @procedures/exif in the global registry:
3
+ * `import "@procedures/exif/register"`. The package root registers nothing.
4
+ */
5
+ export * from "./module.js";
6
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,cAAc,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Importing this file registers the procedures of @procedures/exif in the global registry:
3
+ * `import "@procedures/exif/register"`. The package root registers nothing.
4
+ */
5
+ import { registerExifProcedures } from "./module.js";
6
+ export * from "./module.js";
7
+ registerExifProcedures();
8
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,cAAc,aAAa,CAAC;AAE5B,sBAAsB,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,79 @@
1
1
  {
2
+ "$schema": "https://json.schemastore.org/package",
2
3
  "name": "@procedures/exif",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
4
+ "version": "0.2.3",
5
+ "description": "When and where a JPEG photo was taken, from its EXIF block (time, offset, GPS), without a dependency.",
6
+ "keywords": [
7
+ "exif",
8
+ "jpeg",
9
+ "photo",
10
+ "gps",
11
+ "procedures"
12
+ ],
13
+ "homepage": "https://mark1russell7.github.io/client/",
14
+ "bugs": {
15
+ "url": "https://github.com/mark1russell7/client/issues"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/mark1russell7/client.git",
20
+ "directory": "packages/exif"
21
+ },
22
+ "license": "MIT",
23
+ "author": "Mark Russell (https://github.com/mark1russell7)",
24
+ "type": "module",
25
+ "main": "./dist/index.js",
26
+ "types": "./dist/index.d.ts",
27
+ "exports": {
28
+ ".": {
29
+ "types": "./dist/index.d.ts",
30
+ "import": "./dist/index.js"
31
+ },
32
+ "./module": {
33
+ "types": "./dist/module.d.ts",
34
+ "import": "./dist/module.js"
35
+ },
36
+ "./register": {
37
+ "types": "./dist/register.d.ts",
38
+ "import": "./dist/register.js"
39
+ }
40
+ },
41
+ "files": [
42
+ "dist",
43
+ "src",
44
+ "!src/**/*.test.ts",
45
+ "!src/**/*.test.tsx",
46
+ "!src/**/__tests__",
47
+ "CHANGELOG.md"
48
+ ],
49
+ "sideEffects": [
50
+ "./dist/register.js"
51
+ ],
52
+ "engines": {
53
+ "node": ">=22"
54
+ },
55
+ "publishConfig": {
56
+ "access": "public",
57
+ "provenance": true
58
+ },
59
+ "dependencies": {
60
+ "@procedures/client": "0.2.3",
61
+ "zod": "^4.6.5"
62
+ },
63
+ "devDependencies": {
64
+ "typescript": "^7.0.2",
65
+ "@types/node": "^22.0.0",
66
+ "@mark1russell7/cue": "^1.0.0",
67
+ "vitest": "^5.0.3"
68
+ },
69
+ "client": {
70
+ "procedures": "./dist/register.js"
71
+ },
72
+ "scripts": {
73
+ "build": "tsc -b",
74
+ "typecheck": "tsc --noEmit",
75
+ "clean": "rm -rf dist .tsbuildinfo",
76
+ "test": "vitest run",
77
+ "test:watch": "vitest"
78
+ }
6
79
  }
package/src/exif.ts ADDED
@@ -0,0 +1,116 @@
1
+ /**
2
+ * When and where a photo was taken, from the EXIF block of a JPEG: the time of the shutter
3
+ * (DateTimeOriginal, with OffsetTimeOriginal when the camera writes it) and the GPS position. It
4
+ * reads these facts only, without a dependency. A JPEG without EXIF (a screenshot, an edited
5
+ * copy) gives no facts.
6
+ */
7
+
8
+ export interface PhotoFacts {
9
+ /** `YYYY-MM-DDTHH:MM:SS`, with the offset when the photo has one */
10
+ readonly takenAt?: string | undefined;
11
+ readonly lat?: number | undefined;
12
+ readonly lon?: number | undefined;
13
+ }
14
+
15
+ const TAG_EXIF_IFD = 0x8769;
16
+ const TAG_GPS_IFD = 0x8825;
17
+ const TAG_DATETIME_ORIGINAL = 0x9003;
18
+ const TAG_OFFSET_TIME_ORIGINAL = 0x9011;
19
+ const TYPE_ASCII = 2;
20
+ const TYPE_RATIONAL = 5;
21
+
22
+ /** The TIFF block in the APP1 "Exif" segment of a JPEG. */
23
+ const tiffOf = (bytes: Uint8Array): DataView | undefined => {
24
+ if (bytes[0] !== 0xff || bytes[1] !== 0xd8) return undefined; // not a JPEG
25
+ let at = 2;
26
+ while (at + 4 <= bytes.length) {
27
+ if (bytes[at] !== 0xff) return undefined;
28
+ const marker = bytes[at + 1] ?? 0;
29
+ const length = ((bytes[at + 2] ?? 0) << 8) | (bytes[at + 3] ?? 0);
30
+ if (marker === 0xe1 && String.fromCharCode(...bytes.subarray(at + 4, at + 8)) === "Exif") {
31
+ const size = Math.min(length - 8, bytes.length - (at + 10));
32
+ return size > 0 ? new DataView(bytes.buffer, bytes.byteOffset + at + 10, size) : undefined;
33
+ }
34
+ if (marker === 0xda) return undefined; // the image data starts: there is no EXIF
35
+ at += 2 + length;
36
+ }
37
+ return undefined;
38
+ };
39
+
40
+ interface Field {
41
+ readonly type: number;
42
+ readonly count: number;
43
+ readonly at: number;
44
+ }
45
+
46
+ /** This function reads the time and the GPS position of a photo from the bytes of a JPEG. */
47
+ export const readExif = (bytes: Uint8Array): PhotoFacts => {
48
+ const tiff = tiffOf(bytes);
49
+ if (tiff === undefined || tiff.byteLength < 8) return {};
50
+ const little = tiff.getUint16(0) === 0x4949;
51
+ const within = (at: number, size: number): boolean => at >= 0 && at + size <= tiff.byteLength;
52
+ const u16 = (at: number): number => (within(at, 2) ? tiff.getUint16(at, little) : 0);
53
+ const u32 = (at: number): number => (within(at, 4) ? tiff.getUint32(at, little) : 0);
54
+
55
+ /** The entries of one IFD: tag to type, count and the position of the value or its offset */
56
+ const entries = (offset: number): Map<number, Field> => {
57
+ const out = new Map<number, Field>();
58
+ if (!within(offset, 2)) return out;
59
+ const n = u16(offset);
60
+ for (let i = 0; i < n; i += 1) {
61
+ const entry = offset + 2 + i * 12;
62
+ if (!within(entry, 12)) break;
63
+ out.set(u16(entry), { type: u16(entry + 2), count: u32(entry + 4), at: entry + 8 });
64
+ }
65
+ return out;
66
+ };
67
+ const ascii = (field: Field | undefined): string | undefined => {
68
+ if (field === undefined || field.type !== TYPE_ASCII) return undefined;
69
+ const start = field.count > 4 ? u32(field.at) : field.at;
70
+ if (!within(start, field.count)) return undefined;
71
+ let text = "";
72
+ for (let i = 0; i < field.count; i += 1) {
73
+ const code = tiff.getUint8(start + i);
74
+ if (code === 0) break;
75
+ text += String.fromCharCode(code);
76
+ }
77
+ return text;
78
+ };
79
+ const rationals = (field: Field | undefined): number[] | undefined => {
80
+ if (field === undefined || field.type !== TYPE_RATIONAL) return undefined;
81
+ const start = u32(field.at);
82
+ if (!within(start, field.count * 8)) return undefined;
83
+ return Array.from({ length: field.count }, (_, i) => {
84
+ const denominator = u32(start + i * 8 + 4);
85
+ return denominator === 0 ? 0 : u32(start + i * 8) / denominator;
86
+ });
87
+ };
88
+
89
+ const ifd0 = entries(u32(4));
90
+ const facts: { takenAt?: string; lat?: number; lon?: number } = {};
91
+ const exifPointer = ifd0.get(TAG_EXIF_IFD);
92
+ if (exifPointer !== undefined) {
93
+ const exif = entries(u32(exifPointer.at));
94
+ const original = ascii(exif.get(TAG_DATETIME_ORIGINAL)); // "YYYY:MM:DD HH:MM:SS"
95
+ const offset = ascii(exif.get(TAG_OFFSET_TIME_ORIGINAL)); // "+HH:MM"
96
+ const match = original !== undefined ? /^(\d{4}):(\d{2}):(\d{2}) (\d{2}:\d{2}:\d{2})$/.exec(original) : null;
97
+ if (match !== null) {
98
+ const zone = offset !== undefined && /^[+-]\d{2}:\d{2}$/.test(offset) ? offset : "";
99
+ facts.takenAt = `${match[1]}-${match[2]}-${match[3]}T${match[4]}${zone}`;
100
+ }
101
+ }
102
+ const gpsPointer = ifd0.get(TAG_GPS_IFD);
103
+ if (gpsPointer !== undefined) {
104
+ const gps = entries(u32(gpsPointer.at));
105
+ const degrees = (parts: number[] | undefined): number | undefined =>
106
+ parts !== undefined && parts.length === 3 ? (parts[0] ?? 0) + (parts[1] ?? 0) / 60 + (parts[2] ?? 0) / 3600 : undefined;
107
+ const lat = degrees(rationals(gps.get(2)));
108
+ const lon = degrees(rationals(gps.get(4)));
109
+ // 0, 0 is the value of a camera without a position
110
+ if (lat !== undefined && lon !== undefined && (lat !== 0 || lon !== 0)) {
111
+ facts.lat = Math.round((ascii(gps.get(1)) === "S" ? -lat : lat) * 1e6) / 1e6;
112
+ facts.lon = Math.round((ascii(gps.get(3)) === "W" ? -lon : lon) * 1e6) / 1e6;
113
+ }
114
+ }
115
+ return facts;
116
+ };
package/src/index.ts ADDED
@@ -0,0 +1,4 @@
1
+ // The root registers nothing: import "<package>/register", or give the module to createRegistry()
2
+ export * from "./module.js";
3
+ export * from "./procedures.js";
4
+ export * from "./exif.js";
package/src/module.ts ADDED
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The procedures of @procedures/exif as data. Importing this file registers nothing.
3
+ */
4
+
5
+ import { defineModule, registerModules, PROCEDURE_REGISTRY, type ProcedureModule, type ProcedureRegistry } from "@procedures/client";
6
+ import { exifProcedures } from "./procedures.js";
7
+
8
+ export const exifModule: ProcedureModule = defineModule("@procedures/exif", exifProcedures);
9
+
10
+ export default exifModule;
11
+
12
+ /**
13
+ * This function registers the procedures of @procedures/exif in a registry. The default is the
14
+ * global registry.
15
+ */
16
+ export function registerExifProcedures(registry: ProcedureRegistry = PROCEDURE_REGISTRY): void {
17
+ registerModules(registry, [exifModule]);
18
+ }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * The procedure of `@procedures/exif`: `exif.read`.
3
+ */
4
+
5
+ import { open } from "node:fs/promises";
6
+ import { createProcedure, zodAdapter, type AnyProcedure } from "@procedures/client";
7
+ import { z } from "zod";
8
+ import { readExif, type PhotoFacts } from "./exif.js";
9
+
10
+ /** The EXIF block is in the first APP1 segment, at most 64 KiB after the start of the file. */
11
+ const HEAD_BYTES = 128 * 1024;
12
+
13
+ /** This function reads the first bytes of a file. */
14
+ export async function readHead(path: string, size: number = HEAD_BYTES): Promise<Uint8Array> {
15
+ const file = await open(path, "r");
16
+ try {
17
+ const buffer = new Uint8Array(size);
18
+ const { bytesRead } = await file.read(buffer, 0, size, 0);
19
+ return buffer.subarray(0, bytesRead);
20
+ } finally {
21
+ await file.close();
22
+ }
23
+ }
24
+
25
+ const ReadInputSchema = z.object({
26
+ path: z.string().min(1).describe("The path of a JPEG file"),
27
+ });
28
+ type ReadInput = z.infer<typeof ReadInputSchema>;
29
+ const ReadOutputSchema = z.object({ takenAt: z.string().optional(), lat: z.number().optional(), lon: z.number().optional() });
30
+
31
+ export const exifReadProcedure: AnyProcedure = createProcedure()
32
+ .path(["exif", "read"])
33
+ .input(zodAdapter<ReadInput>(ReadInputSchema))
34
+ .output(zodAdapter<PhotoFacts>(ReadOutputSchema))
35
+ .meta({
36
+ description: "Read when and where a JPEG photo was taken (EXIF time and GPS position)",
37
+ args: ["path"],
38
+ output: "json",
39
+ effects: { reads: ["fs"], writes: [] },
40
+ })
41
+ .handler(async (input: ReadInput): Promise<PhotoFacts> => readExif(await readHead(input.path)))
42
+ .build() as AnyProcedure;
43
+
44
+ export const exifProcedures: AnyProcedure[] = [exifReadProcedure];
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Importing this file registers the procedures of @procedures/exif in the global registry:
3
+ * `import "@procedures/exif/register"`. The package root registers nothing.
4
+ */
5
+
6
+ import { registerExifProcedures } from "./module.js";
7
+
8
+ export * from "./module.js";
9
+
10
+ registerExifProcedures();